React-native-iap: iOS:このアプリ内購入はすでに購入されています。

作成日 2018年09月12日  ·  16コメント  ·  ソース: dooboolab/react-native-iap

react-native-iapのバージョン

"react-native-iap": "^2.0.3",

エラーに直面したプラットフォーム(IOSまたはAndroid、あるいはその両方?)

iOS

予想される行動

購入する

const Purchase = await RNIap.buyProductWithoutFinishTransaction(productId)
const {transactionReceipt、purchaseToken} =購入
sendToServer(transactionReceipt、{
onSuccess:()=> {
RNIap.finishTransaction()
RNIap.consumeAllItems()
}})

実際の動作

ダイアログ:「このアプリ内購入はすでに購入されています」。 これは1つのSKUでのみ発生し、他のSKUは正常に機能しています。 アプリの状態が悪く、修正する方法が見当たらないと思います。 初期化時にfinishTransactionconsumeAllItemsを呼び出すのに疲れましたが、それでも修正されませんでした。 その他のSKUは問題なく複数回購入できます。 getPurchaseHistoryについては何も返されません。

テストされた環境(エミュレーター?実デバイス?)

デバイス(サンドボックス)

動作を再現する手順

よく分かりません。

📱 iOS 🙏 help wanted

最も参考になるコメント

私はこのネイティブコードを呼んでいました。

didFinishLaunchingWithOptions呼び出すと、currentQueue.transactionsは空でしたが、applicationDidBecomeActiveで呼び出すと機能しました。

これはうまくいきました:

- (void)applicationDidBecomeActive:(UIApplication *)application
{
  // take current payment queue
  SKPaymentQueue* currentQueue = [SKPaymentQueue defaultQueue];
  [currentQueue restoreCompletedTransactions];
  // finish ALL transactions in queue
  //  [[SKPaymentQueue defaultQueue] finishTransaction:transaction];
  [currentQueue.transactions enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
    [currentQueue finishTransaction:(SKPaymentTransaction *)obj];
  }]; 
}

方法はわかりませんが、ライブラリでこの機能を公開できるのではないでしょうか。

全てのコメント16件

@siderakisうん奇妙だ。 私はすでにstackoverflowで言われているようにこの問題にパッチを当てましたが、それでも一部のデバイスで発生しています。 私もこれを修正したいと思っています。 どのデバイスを使用していますか?

@siderakisこれは私が推測する悪い状態であなたのアプリを解決するかもしれません。 やってみませんか?

試してみましたが、うまくいきませんでした。 私もアプリを再インストールしましたが、それは役に立ちませんでした。 iPadで実行されています。

ブレークポイントを設定しましたが、currentQueue.transactionsが空のようです

SKPaymentQueue.hから

// Array of unfinished SKPaymentTransactions.  Only valid while the queue has observers.  Updated asynchronously.
@property(nonatomic, readonly) NSArray<SKPaymentTransaction *> *transactions NS_AVAILABLE_IOS(3_0);

<strong i="6">@end</strong>

多分私はそれをあまりにも早く呼んだ

プログラムの実行の後半でコードを呼び出したところ、問題が修正されました。

@siderakisご迷惑を
transactions配列はプロパティであり、メソッドではなく、コードには含まれていません。
finishTransactionですか?

私はこのネイティブコードを呼んでいました。

didFinishLaunchingWithOptions呼び出すと、currentQueue.transactionsは空でしたが、applicationDidBecomeActiveで呼び出すと機能しました。

これはうまくいきました:

- (void)applicationDidBecomeActive:(UIApplication *)application
{
  // take current payment queue
  SKPaymentQueue* currentQueue = [SKPaymentQueue defaultQueue];
  [currentQueue restoreCompletedTransactions];
  // finish ALL transactions in queue
  //  [[SKPaymentQueue defaultQueue] finishTransaction:transaction];
  [currentQueue.transactions enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
    [currentQueue finishTransaction:(SKPaymentTransaction *)obj];
  }]; 
}

方法はわかりませんが、ライブラリでこの機能を公開できるのではないでしょうか。

@siderakisはい。 それが私が第259号で意味したことです。
アクションはapplicationDidBecomeActiveの後のどこにでもできると思います。
そこで、そのメソッドをJS側に公開し、ユーザーがいつでも呼び出すことができるようにします。
アドバイスありがとうございます。

@JJMoon 、私は同じ問題を抱えています、あなたが上で述べたようにメソッドを公開するための解決策をいつ期待できますか? ありがとう。

@sivrihuseyin問題は今よく知られています。 今週末にパッチを作成します。 すべての発行者に感謝します。

期待されるソリューションを2.2.0でリリースしました。 readmeに従って、このコード行を試して

こんにちはヒョチャン、

情報ありがとうございました。

バージョン2.2.0をインストールして、コードを試しました。 残念ながら、
問題はまだ修正されていません。 関数* clearTransaction *にはない
エクスポートされました。 reactNative環境ではclearTransactionはありません
RNIap内で機能します。

ファイルindex.d.tsを確認しましたが、関数が次のように表示されませんでした。
これでclearTransaction。 ファイル。

敬具、

フセイン

14:25ヒョリチャンチャンの日、2018年9月16日には[email protected]
書きました:

クローズ#257 https://github.com/dooboolab/react-native-iap/issues/257
a5f225d経由
https://github.com/dooboolab/react-native-iap/commit/a5f225d470af0a85417325d24357667e54aa7078


あなたが言及されたのであなたはこれを受け取っています。
このメールに直接返信し、GitHubで表示してください
https://github.com/dooboolab/react-native-iap/issues/257#event-1848183078
またはスレッドをミュートします
https://github.com/notifications/unsubscribe-auth/AiH7bOp96EzsoX82UVxKHK2LkN7PNWVAks5ubjUogaJpZM4WmG_0

こんにちはヒョチャン、

間違った情報でごめんなさい。 修正されました。 問題はない
もう。

迅速な対応と優れた解決策をありがとうございます。

敬具、

フセイン

2018年9月16日日曜日午後2時56分HuseyinSivri [email protected]
書きました:

こんにちはヒョチャン、

情報ありがとうございました。

バージョン2.2.0をインストールして、コードを試しました。 残念ながら、
問題はまだ修正されていません。 関数* clearTransaction *が持っていると思います
エクスポートされません。 reactNative環境ではclearTransactionはありません
RNIap内で機能します。

ファイルindex.d.tsを確認しましたが、関数が次のように表示されませんでした。
これでclearTransaction。 ファイル。

敬具、

フセイン

14:25ヒョリチャンチャンの日、2018年9月16日には[email protected]
書きました:

クローズ#257 https://github.com/dooboolab/react-native-iap/issues/257
a5f225d経由
https://github.com/dooboolab/react-native-iap/commit/a5f225d470af0a85417325d24357667e54aa7078


あなたが言及されたのであなたはこれを受け取っています。
このメールに直接返信し、GitHubで表示してください
https://github.com/dooboolab/react-native-iap/issues/257#event-1848183078
またはスレッドをミュートします
https://github.com/notifications/unsubscribe-auth/AiH7bOp96EzsoX82UVxKHK2LkN7PNWVAks5ubjUogaJpZM4WmG_0

clearTransaction関数を適用することにより、バージョン2.2.0で修正されています。 ありがとうございました
@JJMoon

v2からv3-5にアップグレードする将来のGoogle社員にとって、これは役に立ちました

https://github.com/dooboolab/react-native-iap/blob/de0fc084966fc4d36a9c45f4e27cb166243d4319/README_DEPRECATED.md

このページは役に立ちましたか?
0 / 5 - 0 評価