2013-02-05 17 views
14

Mam klasę, która implementuje SKPaymentTransactionObserver. Jednak po kliknięciu przycisku Kup, jeśli użytkownik nie jest zalogowany w sklepie z aplikacjami, otrzymuje alert z prośbą o podanie istniejącego identyfikatora lub o utworzenie nowego. Jeśli kliknięcie zostanie anulowane lub pojawi się kolejny wpis poświadczenia logowania, nie otrzymam powiadomienia o anulowaniu. Mam widok aktywności obejmujący ekran po kliknięciu przycisku zakupu, więc naprawdę muszę wiedzieć, czy alert logowania został anulowany.Wykrywanie anulowanego wpisu dotyczącego itunes dla zakupów w aplikacji

Już testuję kod błędu SKErrorPaymentCancelled, który działa, jeśli proces zakupu zostanie anulowany po zalogowaniu. Testuję na urządzeniu.

Jakieś wskazówki?

-UPDATE-

Przepraszam zapomniałem wspomnieć, że to tylko się podczas próby przywrócenia transakcji, a to objawia odpowiedź: mój brak wiedzy na temat protokołu.

+0

rodzaj hack, ale można słuchać do zgłoszenia UIApplicationWillResignActive, która powinna uzyskać wywołana, gdy pojawia się alert widok. – jmstone617

Odpowiedz

34

Aby wykryć anulować zdarzenie, gdy użytkownik próbuje anulować przywracanie zakupy zażądać wdrożenia:

- (void)paymentQueue:(SKPaymentQueue *)queue restoreCompletedTransactionsFailedWithError:(NSError *)error 
{ 
    // test error.code, if it equals SKErrorPaymentCancelled it's been cancelled 
} 
+0

Właśnie tego szukałem, dzięki! –

+0

Pomogło mi to z tym samym problemem - godzinami waliłem głową w ścianę i nie mogłem uzyskać przyzwoitej odpowiedzi - DZIĘKI! – wayneh

0

Gdy użytkownik anuluje monitu, który ma je wprowadzić swoje poświadczenia Apple ID, stan transakcji jest SKPaymentTransactionStateFailed . Może to być mylące, ponieważ transakcja nie została technicznie "nieudana", jeśli użytkownik dobrowolnie wycofał się z procesu. Aby wykryć, czy użytkownik rzeczywiście zakończył proces, sprawdź, czy kod błędu błędu transakcji (dostępnego pod numerem transaction.error.code) to SKErrorPaymentCancelled. Jeśli tak nie jest, aplikacja rzeczywiście miała problemy z przetwarzaniem transakcji.

1

w Swift 2.2

public func paymentQueue(queue: SKPaymentQueue, restoreCompletedTransactionsFailedWithError error: NSError) { 
    print("Cancel Transaction") 

} 
6

w Swift 3.0

public func paymentQueue(_ queue: SKPaymentQueue, restoreCompletedTransactionsFailedWithError error: Error) { 
     print("Cancel Transaction"); 
    } 
+0

Nie wiem, dlaczego głosowanie w dół ... poprawna odpowiedź jest powyżej, a następnie poprawna odpowiedź przetłumaczona na Swift 2.2, a ta trafia do Swift 3.0 – Scooter

Powiązane problemy