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)」でクラッシュしたというクラッシュ レポートをほぼ毎日受け取っています。場合によっては、クラッシュしてすぐにアプリを再起動し、再度購入しようとしてクラッシュした人もいるようです。
どんな入力でも大歓迎です。