2014-10-03 25 views
6

mam w aplikacji zakupów w mojej aplikacji, a nowy iOS 8 są „odroczone” transakcje, częściowo opisane w a tech noteCo powinna zrobić aplikacja w odpowiedzi na odroczoną transakcję SKPaymentTransaction?

rozumiem, co robi i że muszę nie zablokować UI i zaktualizować UI aby odzwierciedlić fakt, że stan transakcji został odroczony. Ale co mam umieścić w metodzie -(void)transactionDeferred:(SKPaymentTransaction *)transaction, aby na razie zignorować transakcję?

Czy mam aktualizację tylko interfejsu użytkownika? Jak powinna wyglądać zawartość interfejsu? Czy muszę zastąpić etykietę cenową słowem "Twój zakup został odroczony"? Nie sądzę, żeby można to było przetestować, a przynajmniej nie widziałem nic na ten temat z moim kontem testowym Sandbox. Jeśli byłby sposób, aby przejść przez proces i zobaczyć, jak to działa, miałoby to dla mnie dużo więcej sensu.

Odpowiedz

14

Co robie to:

  1. Zatrzymanie animacja wskaźnik
  2. Aktywacja kupić i przywrócić przycisków
  3. Pokazuje alert:

czeka na zatwierdzenie
Dziękujemy! Możesz nadal używać Altershot, gdy zakup oczekuje na zatwierdzenie przez rodzica.

Obejrzałem wideo z WWDC 14. Apple twierdzi, że nie należy blokować interfejsu użytkownika i ponownie kliknąć przycisk Kup. Myślę, że potrzebujemy tego na wypadek alarmu typu "miss miss", aby dziecko mogło wysłać jeszcze jednego.

co wiem jest to, że nie powinny wezwanie następujący sposób odroczonych transakcji:

[[SKPaymentQueue defaultQueue] finishTransaction:transaction];

+8

Dokumentacja mówi "Twoja aplikacja powinna wywołać finishTransaction: dopiero po pomyślnym przetworzeniu transakcji i odblokowaniu funkcji zakupionych przez użytkownika." co oznacza, że ​​nie trzeba wywoływać metody finishTransaction, gdy stanem jest SKPaymentTransactionStateDeferred. – JulianSymes

+0

powinieneś poczekać na FAIL lub ZAKUPIONY. powinieneś teraz wywołać metodę finishTransaction w odroczonym terminie. – Pichirichi

+0

@Pichirichi dzięki, zaktualizowałem swoją odpowiedź. –

2

Kod poniżej pozwoli Ci sprawdzić, czy identyfikator produktu chcesz sprzedać w trybie odroczonym . Użyj go, aby odpowiednio zaktualizować interfejs.

if ([[SKPaymentQueue defaultQueue].transactions count] > 0) { 
    for (SKPaymentTransaction *transaction in [SKPaymentQueue defaultQueue].transactions) { 
     if ([@"your.product.id" isEqualToString:transaction.payment.productIdentifier]) { 
      if (transaction.transactionState == SKPaymentTransactionStateDeferred) { 
       // update UI that you are still waiting for parent approval. You'll get "PURCHASED" if parent approved or "FAILD" if parent declined or 24 hours passed since request. 
      } 
      break; 
     } 
    } 
}