web-dev-qa-db-ja.com

アプリ内購入のtransactionReceiptはiOS 7で廃止されました。何に置き換えることができますか?

IOS 7では、 SKPaymentTransaction クラスのプロパティtransactionReceipt

// Only valid if state is SKPaymentTransactionStatePurchased.

 @property(nonatomic, readonly) NSData *transactionReceipt

…は 非推奨 です。しかし、私のコードではInAppPurchaseクラスを作成し、メソッドの購入方法を制御するためのメソッドでは、コードでデリゲートメソッドを使用しています。

- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions {

for (SKPaymentTransaction *transaction in transactions) {

    switch (transaction.transactionState) {

        case SKPaymentTransactionStatePurchasing:

                       // code and bla bla bla    
                          [self initPurchase];  
                          NSLog(@"PASO 1");          

            break;

        case SKPaymentTransactionStatePurchased:

                      // this is successfully purchased!
                            purchased = TRUE;
                            NSLog(@"PASO 2");
                           [self isPurchased];

                 NSLog(@"purchased %s", purchased? "true" : "false");

                     //  and return the transaction data

  if ([delegate respondsToSelector:@selector(successfulPurchase:restored:identifier:receipt:)])
  [delegate successfulPurchase:self restored:NO identifier:transaction.payment.productIdentifier receipt:transaction.transactionReceipt];

                     // and more code bla bla bla 

            break;

        case SKPaymentTransactionStateRestored:

                    // and more code bla bla bla 

                          [self restorePurchase];
                          NSLog(@"PASO 3");

            break;

        case SKPaymentTransactionStateFailed:

                    // and more code bla bla bla 

                           [self failedNotification];
                           NSLog(@"PASO 4");

            break;

                    //------------------------------------------//
                    //               THANKS GUYS                //
                    //          GRETTINGS FROM BOLIVIA          //
                    //             ROCK ON!!!! n_n'             //
                    //------------------------------------------//

    }
   }
  }

enter image description here

25

領収書は、mainBundleのappStoreReceiptURLのコンテンツとして取得できます。あなたは参照を見つけることができます: developer.Apple.com

これはテストされていないコードですが、頭から離れて、次のように言います。

[NSData dataWithContentsOfURL:[[NSBundle mainBundle] appStoreReceiptURL]]

transactionReceiptが返すのと同じ結果が得られるはずです。

27
lodlock

誰かがこの問題についても混乱している可能性がある場合(多分あなたは私のような少し古いチュートリアルも読んでいるかもしれません...)

チェックアウトしてください WWDC 2014セッション 305領収書による不正な購入の防止。 iOSとOS Xの両方をカバーし、明確かつ包括的です。

2
hewigovens