---
title: "Zakupy w aplikacji na iOS. Część 5: lista kodów SKError i sposób ich obsługi"
description: "Lista SKErrorów na iOS. Jakie problemy mogą wystąpić podczas transakcji i jakie działania są potrzebne od strony dewelopera."
url: "https://adapty.io/pl/blog/ios-in-app-purchases-part-5-list-of-skerror-codes-and-how-to-handle-them/"
language: "pl"
slug: "ios-in-app-purchases-part-5-list-of-skerror-codes-and-how-to-handle-them"
category: "adapty-updates"
date: "2021-08-30T00:00:00.000Z"
date_modified: "2021-08-30T00:00:00.000Z"
author: "Kirill Potekhin"
---

# Zakupy w aplikacji na iOS. Część 5: lista kodów SKError i sposób ich obsługi

W tym poście zajmę się SKErrorami (SKErrors): jakie problemy implikują i co z nimi zrobić. Dla każdego błędu omówimy trzy aspekty: dlaczego on występuje, jak sobie z nim poradzić i jaki komunikat wyświetlać w powiadomieniu o błędzie.

## SKError.Code.unknown, code 0

**Co to znaczy.** Wystąpił błąd z nieznanego powodu.

**Jak to naprawić.** Nie jest potrzebne żadne działanie ze strony deweloperów. Ten błąd pojawia się również przy żądaniu podczas próby uzyskania produktów podczas korzystania z symulatora iOS 14 i nowszych. W takim przypadku, aby uzyskać produkt, użyj lokalnego testowania StoreKit lub prawdziwego urządzenia/emulatora z wersją iOS poniżej iOS 14.

**Jaki komunikat wyświetlać.** Przepraszamy, zakup jest niedostępny z nieznanego powodu. Spróbuj ponownie później.

![6129480992e3bf3eee2b6498 6zrtcxb0l aojbaykonkyks ytivmmkytagofibbph6zuprqv 4p1h8bjunif2yqzsush8mv26sehrxknqi ajrtygdos2nrly shjoisglkplfpgmxsnc hfvmsodaxqcii5sjz3ds0](https://adapty.io/wp-content/uploads/2023/01/6129480992e3bf3eee2b6498_6zrtcxb0l-aojbaykonkyks-ytivmmkytagofibbph6zuprqv_4p1h8bjunif2yqzsush8mv26sehrxknqi-ajrtygdos2nrly_shjoisglkplfpgmxsnc-hfvmsodaxqcii5sjz3ds0.png)

## SKError.Code.clientInvalid, code 1

**Co to znaczy.** Użytkownik nie może dokonać zakupu. Na przykład dziecko próbuje coś kupić, gdy funkcja kontroli rodzicielskiej na urządzeniu jest włączona.

**Jak to naprawić.** Nie jest potrzebne żadne działanie ze strony deweloperów.

**Jaki komunikat wyświetlać.** Zakup nie może zostać zrealizowany. Zmień swoje konto lub urządzenie.

## SKError.Code.paymentCancelled, code 2

**Co to znaczy.** Użytkownik wszedł na ekran płatności, ale zmienił zdanie na temat dokonania zakupu i kliknął "anuluj".

**Jak to naprawić.** Z technicznego punktu widzenia nie wystąpił błąd i w tym przypadku nic nie trzeba robić. Z punktu widzenia marketingu możesz kontynuować pracę z takim użytkownikiem, na przykład zaoferować mu zniżkę.

**Jaki komunikat wyświetlać.** Masz dwie opcje. Najłatwiej jest nie pokazywać niczego. Możesz jednak również spróbować odzyskać użytkownika za pomocą takiego komunikatu: "Anulowano zakup. Czy interesuje Cię możliwość wypróbowania subskrypcji po obniżonej cenie?”

## SKError.Code.paymentInvalid, code 3

**Co to znaczy.** Z jakiegoś powodu płatność nie powiodła się: skończyła się ważność karty, lub nie było wystarczających środków na ten zakup.

**Jak to naprawić.** Nie jest potrzebne żadne działanie ze strony deweloperów.

**Jaki komunikat wyświetlać.** Twój zakup został odrzucony. Sprawdź szczegóły płatności i upewnij się, że na twoim koncie jest wystarczająca ilość środków.

## SKError.Code.paymentNotAllowed, code 4

**Co to znaczy.** Prawdopodobnie ta karta ma pewne ograniczenia zakupu: ustawione są limity lub funkcja zakupów online jest niedostępna.

**Jak to naprawić.** Nie jest potrzebne żadne działanie ze strony deweloperów.

**Jaki komunikat wyświetlać.** Zakup nie jest dostępny dla wybranej metody płatności. Upewnij się, że twoja metoda płatności pozwala na dokonywanie zakupów online.

## SKError.Code.storeProductNotAvailable, code 5

**Co to znaczy.** Użytkownik próbuje kupić produkt, który nie jest dostępny dla regionu, w którym ten sklep jest używany.

**Jak to naprawić.** Deweloper musi sprawdzić dostępność produktów w sklepie i regionie użytkownika. W tym celu możesz użyć [SKStorefront](https://developer.apple.com/documentation/storekit/skstorefront).

**Jaki komunikat wyświetlać.** Ten produkt nie jest dostępny w Twoim regionie. Zmień sklep i spróbuj ponownie.

## SKError.Code.cloudServicePermissionDenied, code 6

**Co to znaczy.** Użytkownik nie dał dostępu do informacji o swojej usłudze w chmurze (Cloud Service).

**Jak to naprawić.** Nie jest potrzebne żadne działanie ze strony deweloperów.

**Jaki komunikat wyświetlać. Szczerze mówiąc,** nigdy nie spotkałem się z takim błędem. Właściwie możesz po prostu napisać, że zakup został odrzucony.

## SKError.Code.cloudServiceNetworkConnectionFailed, code 7

**Co to znaczy.** Urządzenie nie było podłączone do Internetu podczas dokonywania zakupu.

**Jak to naprawić.** Nie jest potrzebne żadne działanie ze strony deweloperów.

**Jaki komunikat wyświetlać.** Zakupu nie można zrealizować, ponieważ urządzenie nie jest połączone z Internetem. Spróbuj ponownie później, korzystając ze stabilnego połączenia internetowego.

## SKError.Code.cloudServiceRevoked, code 8

**Co to znaczy.** To urządzenie nie ma dostępu do usługi płatności StoreKit. Często ten błąd występuje w sandboxie.

**Jak to naprawić.** Utwórz nowego użytkownika sandbox lub po prostu spróbuj powtórzyć operację.

**Jaki komunikat wyświetlać.** Przepraszamy,wystąpił błąd.

## SKError.Code.privacyAcknowledgementRequired, code 9

**Co to znaczy.** Użytkownik nie zaakceptował regulaminu korzystania w AppStore. Jak napisano w dokumentacji, "Użytkownik nie potwierdził jeszcze znajomości polityki prywatności Apple Music". Ale wygląda to na błąd, ponieważ nie ma powodu, aby wspominać tutaj o Apple Music.

**Jak to naprawić.** Nie jest potrzebne żadne działanie ze strony deweloperów.

**Jaki komunikat wyświetlać.** Zakup nie może zostać zrealizowany, ponieważ nie zaakceptowałeś regulaminu korzystania z AppStore. Potwierdź swoją zgodę w ustawieniach, a następnie wróć do zakupu.

## SKError.Code.unauthorizedRequestData, code 10

**Co to znaczy.** Twój identyfikator aplikacji nie zawiera wymaganych uprawnień do korzystania ze StoreKit.

**Jak to naprawić.** Musisz zakończyć proces konfiguracji zakupów w aplikacji dla swojej aplikacji.

**Jaki komunikat wyświetlać.** Wystąpił błąd. Spróbuj ponownie później.

## SKError.Code.invalidOfferIdentifier, code 11

**Co to znaczy.** Użytkownik próbuje kupić produkt z nieprawidłową ofertą promocyjną.

**Jak to naprawić.** Nie jest potrzebne żadne działanie ze strony deweloperów.

**Jaki komunikat wyświetlać.** Oferta promocyjna jest nieważna lub wygasła.

## SKError.Code.invalidSignature, code 12

**Co to znaczy.** Podpis dla oferty promocyjnej (promotional offer) dla zapytania StoreKit został wygenerowany nieprawidłowo.

**Jak to naprawić.** Sprawdź, w jaki sposób generowany jest podpis i napraw błędy. Jeśli używasz Adapty, pobierz Klucz Subskrypcji.

**Jaki komunikat wyświetlać.** Przepraszamy, wystąpił błąd podczas zastosowania kodu promocyjnego. Spróbuj ponownie później.

## SKError.Code.missingOfferParams, code 13

**Co to znaczy.** Parametry oferty promocyjnej są utworzone nieprawidłowo.

**Jak to naprawić.** Sprawdź i popraw parametry swojej oferty promocyjnej.

**Jaki komunikat wyświetlać.** Przepraszamy, wystąpił błąd podczas zastosowania kodu promocyjnego. Spróbuj ponownie później.

## SKError.Code.invalidOfferPrice, code 14

**Co to znaczy.** Użytkownik próbuje kupić produkt z nieprawidłową ceną. Prawdopodobnie cena wyświetlana w AppStore nie jest już aktualna.

**Jak to naprawić.** Ustaw aktualną cenę dla tej oferty w AppStore.

**Jaki komunikat wyświetlać.** Przepraszamy, zakup nie może zostać zakończony. Spróbuj ponownie później.

## Wnioski

Poprawna obsługa błędów poprawia wrażenia użytkownika i może pomóc w odzyskaniu przynajmniej niektórych użytkowników, którzy z jakiegoś powodu nie mogli natychmiast zapłacić za subskrypcję. Oto najczęstsze błędy podczas wdrażania zakupów w aplikacji na iOS:

- SKError.Code.unknown, nieznany błąd;
- SKError.Code.paymentCancelled, gdy użytkownik anuluje zakup;
- SKError.Code.paymentInvalid, gdy płatność nie może zostać przetworzona.

Rzeczywiście, obsługa błędów i implementacja zakupu są uciążliwymi procesami. Z tego powody polecam wypróbować [Adapty SDK dla iOS](https://adapty.io/sdk/ios/), które ułatwia wdrażanie zakupów w aplikacji i zapewnia inne korzyści, takie jak analiza subskrypcji, analiza kohortowa (cohort analysis), testy a/b (a/b tests) dla paywalli oraz walidacja potwierdzeń zakupu po stronie serwera (server-side receipt validation).
