0

3 つのアプリでアプリ内購入を利用しています。最初のものは、1 年以上にわたって正常に動作します。その中で、私はこのルーチンを持っています:

-(void)purchaseProUpgrade{
  SKPayment *payment = [SKPayment paymentWithProductIdentifier: inAppProductId];

  if ([SKPaymentQueue canMakePayments]) [[SKPaymentQueue defaultQueue] addPayment:payment];
  else [self purchaseFailedWithError:nil];
}

しかし、paymentWithProductIdentifier は減価償却されています。したがって、次の 2 つのアプリでは、これを次のように変更しました (残りのコードは同じです)。

-(void)purchaseProUpgrade{
 SKPayment *payment =[SKPayment paymentWithProduct: self.upgradeProduct];

   if ([SKPaymentQueue canMakePayments]) [[SKPaymentQueue defaultQueue] addPayment:payment];
   else [self purchaseFailedWithError:nil];
}

「upgradeProduct」が設定されている場所

- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response{
   NSArray *products = response.products;
   if([products count]>0)  self.upgradeProduct = products[0];

   // the user is warned if upgradeProduct not is set 
}

// upgradeProduct is declared as Strong and I am using ARC.

これは、購入ビューに前後にジャンプしたり、購入をキャンセルしたりしてそれを誘発しようとしても、サンドボックスで正常に機能します。アプリ ストアからアプリを購入すると機能します。また、販売登録があるので、大多数のユーザーのために働いているようです。

しかし、[[SKPaymentQueue defaultQueue] addPayment:payment] が「無効な製品 ID: (null)」でクラッシュしたというクラッシュ レポートをほぼ毎日受け取っています。場合によっては、クラッシュしてすぐにアプリを再起動し、再度購入しようとしてクラッシュした人もいるようです。

どんな入力でも大歓迎です。

4

1 に答える 1

0

Github にサンプルがあります。下のリンクを見てください。

https://github.com/ebutterfly/EBPurchase

于 2013-04-29T11:49:09.497 に答える