OK、私は IAP を iOs アプリに実装していますが、ストア内の一部の製品のみが実際にネイティブの購入処理ダイアログをトリガーします。
バックグラウンド:
このアプリは、クロスプラットフォーム対応のために JavaScript バインディングを備えた cocos2dx を使用します。ストア処理を実装するために、iOs のネイティブ セクターに取り組んでいます。
これらの呼び出しはすべて正しく機能します。
[[SKPaymentQueue defaultQueue] addTransactionObserver:self];
[SKPaymentQueue canMakePayments];
[[SKProductsRequest alloc] initWithProductIdentifiers:productIdentifiers];
ラストについて追記。すべての製品 ID がチェックされ、productsRequest:request didReceiveResponse:response
コールバックで有効なものとして返されますが、送信される ID にバンドル ID が含まれていない場合のみです。私が見たほとんどの例は、これが必要であると言っていましたが、含まれている場合はすべて として返されinvalidProductIdentifiers
ます。これは問題を示している可能性がありますか?
そのため、現在、一部の製品は、(以前に検証された) ID が に渡された後、ネイティブの購入確認ダイアログを表示し[[SKPaymentQueue defaultQueue] addPayment:payment]
ます。それらのほとんどは、その後何もしません。コールバックなしpaymentQueue:queue updatedTransactions:transactions
、エラー コードなし、クラッシュなし。
一部の機能とほとんどの機能が機能しない理由のパターンがわかりません。消耗品、非消耗品、サブスクリプションの作品が少なくとも1つあるので、それはないと思います。の後にコードを中断してステップ実行すると、[[SKPaymentQueue defaultQueue] addPayment:payment]
一貫性はありませんが、いくつかの製品がより頻繁に動作する可能性がわずかにあることがわかりました。これにより、スレッドの問題である可能性があると思いましたが、以下で試したことがわかりますが、役に立ちませんでした.
私が試したこと:
SOや他の場所を読んで、人々はtest usersを変更し、 でキューをクリアし[[SKPaymentQueue defaultQueue] finishTransaction:transaction]
、Apple の Sandbox サーバーには「問題がある」場合があることを提案しました。しかし、これで修正されたものはなく、クラッシュやエラーが発生しないのは奇妙に思えます。特定の製品IDにまったく反応しません。
これが私が試したいくつかのことを含む実際の呼び出しです:
- (void)purchaseProductWithId:(const char*)item_code
{
/** OCCASIONALLY MAY NEED TO CLEAR THE QUEUE **
NSArray *transactions = [[SKPaymentQueue defaultQueue] transactions];
for(id transaction in transactions){
[[SKPaymentQueue defaultQueue] finishTransaction:transaction];
}// */
// dispatch_async(dispatch_get_main_queue(),^ {
SKPayment *payment = [SKPayment paymentWithProductIdentifier:[NSString stringWithUTF8String:item_code]];
// [[SKPaymentQueue defaultQueue] performSelectorOnMainThread:@selector(addPayment:) withObject:payment waitUntilDone:NO];
[[SKPaymentQueue defaultQueue] addPayment:payment];
// } );
}
他に役立つコードがあれば教えてください。
ご協力いただきありがとうございます。
編集:このhasAddObserver
質問からチェック
を追加しましたが、それも問題ではありません。