2.3.0
アンドロイド
sub = await RNIApp.buySubscription( "some");
ユーザーがアプリ内支払いのモーダルで購入を押すのを待つ必要があります
ユーザーがサブスクリプションを受け入れたかどうかを確認できません。
sub = await RNIApp.buySubscription( "some");
if(sub){
いくつかのことをします。
}
if(sub)ブロックはポップアップが開いた直後に実行されますが、ユーザーはまだサブスクリプションを受け入れません
実際のデバイス
何か案は?
getAvailablePurchasesのように、promiseを返し、正常に機能するメソッドは他にもあります。
問題は、buySubscriptionがユーザー入力のコールバックを返す必要があり、それが返されないことです。
RN 57を使用しています。また、サブスクリプションが完了しました。プレイストアで購入に問題がないことを確認できますが、buySubscriptionの約束が未定義で返されます。
何か助けはありますか?
ええと、私は2.2.2にダウングレードして動作します。だから、皆さんは新しいリリースで何かを逃したと思います
@ marcosmartinez7壊れてすみません、 2.3.1
を試してみませんか?
ありがとね!
今は時間がありませんが、
@ marcosmartinez7ありがとうございます。
@dooboolabの問題はiOSにも存在します。 2.3.1
と2.3.2
両方を試しました。 @ marcosmartinez7で述べたように、 2.2.2
は正常に機能します
2.3.3
修正されていると思います。 これがまだ発生している場合は、再度開いてください。
@dooboolab申し訳ありませんが、 2.3.5
インストールして再リンクしました。 await RNIap.buySubscription(iapProductId)
undefined
、iOSですぐに
@ Gaia-栄養ios
コードが変更されていないため、問題は異なると思います。 リンクを解除してもう一度リンクしてみてください。
@dooboolabリンクとリンク2.2.2
に戻すと、再び機能し始めます。 でも明日またチェックします。 たぶん私はネイティブコンポーネントを手動でインストールしようとします
@dooboolab OK、新しい2.3.6
バージョンを手動でリンクしました。 まだundefined
取得しています。 この問題の解決をお手伝いしたいと思います。 私が助けるために何ができるか教えてください!
誰かがこれを確認できますか? これは特にiOSでは発生しないはずです。
@dooboolab iOSバージョン2.3.6では
2.3.7でもこの問題が発生しています。 await
を使おうとすると、promiseを待つ代わりに次の行がすぐに呼び出され、 RNIap.buySubscription(subId).then(purchase => {})
使用すると、エラーでクラッシュし、プロパティを読み取れなくなります。
現在、これに取り組んでいます。 また、これに直面している人は、実際にbuySubscription
に電話する前に、 getSubscriptions
に電話しましたか?
RNExampleアプリで購入をテストしました。 BuyProductWithoutFinishTransaction()メソッドでサブスクリプションを購入しました。
RNExampleと同じようにテストすることをお勧めします。 そして、Xcodeを更新し、設定を「レガシー」にビルドします。Xcodeのビルドプロセスがこの更新を変更したと思います。
そして、新しく作られたサンドボックステスターを使用してください。
@JJMoonはとても興味深いです。 buyProductWithoutFinishTransaction()
とfinishTransaction()
の組み合わせはbuyProductWithoutFinishTransaction()
2.3.7
、 buySubscription()
直接失敗します。
@ Gaia-栄養OK。 次に、 buySubscription
代わりにbuyProductWithoutFinishTransaction
とfinishTransaction
使用します。 購入アクションはまったく同じです。
@ Gaia-Nutrition 2.3.8
を試してみませんか? また、 buySubscription
前にgetSubscriptions
に電話しましたか?
@dooboolab 2.3.8
まだbuySubscription
を使用して失敗します:はい、以前にgetSubscriptions
呼び出しました。 buyProductWithoutFinishTransaction()
が他の方法で機能するとは思わない。
サンドボックスモードのiOSデバイスでbuySubscriptionをテストしました。
なんとか成功しましたが、エラーメッセージが表示されます。
また、自動更新可能なサブスクリプションは領収書を発行しません。
BuySubscriptionの代わりにbuyProductWithoutFinishTransactionとfinishTransactionを使用することをお勧めします。
現在、テスト用のデバイスがありません。この問題は後で追跡します。
これは現在iOS
のみ問題になっているようです。 私は正しいですか?
@dooboolabいいえ、Androidでも発生します。 この関数は、buyItemByTypeの最初の行が呼び出される前でも未定義を返します。
@dooboolabこの問題はindex.js:105で発生します。 行を次のようなものに変更する必要があります
export const buySubscription = (sku, oldSku, prorationMode) => Platform.select({
ios: () => RNIapIos.buyProduct(sku),
android: () => RNIapModule.buyItemByType(ANDROID_ITEM_TYPE_SUBSCRIPTION, sku, oldSku, -1),
})();
(私はこれがprorationModeを無視することを知っています)
ただし、正常にサブスクライブした後、問題が発生します。
E/UncaughtException: java.lang.NullPointerException: Attempt to invoke interface method 'java.lang.Object java.util.List.get(int)' on a null object reference
at com.dooboolab.RNIap.RNIapModule$11.onPurchasesUpdated(RNIapModule.java:427)
at com.android.billingclient.api.BillingClientImpl$1.onReceive(BillingClientImpl.java:136)
at com.android.billingclient.api.LocalBroadcastManager.executePendingBroadcasts(LocalBroadcastManager.java:303)
at com.android.billingclient.api.LocalBroadcastManager.access$000(LocalBroadcastManager.java:44)
at com.android.billingclient.api.LocalBroadcastManager$1.handleMessage(LocalBroadcastManager.java:114)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6938)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)
@mfentrossどのバージョンのreact-native-iap
ていますか? RNIapModule.java:427
空の行があります。 最近のものをもう一度やり直してください。
私のせい:数行編集しました。 しかし、主な問題の修正は、buySubscription関数を次のように編集することです。
`
export const BuySubscription =(sku、oldSku、prorationMode)=>
Platform.select({
ios:()=> RNIapIos.buyProduct(sku)、
android:()=> {
if(!prorationMode)prorationMode = -1;
RNIapModule.buyItemByType(ANDROID_ITEM_TYPE_SUBSCRIPTION、sku、oldSku、prorationMode);を返します。
}、
})();
`
不要な角かっこがいくつかありました。
@mfentross私の悪い。 return
ステートメントを見逃しました。 2.3.11
公開しました。 だから今アンドロイドは働いていますか?
@dooboolabありがとう、今は動作します👍
@mfentross @JJMoon OK! そのため、iOSの問題のみが残っています。
@JJMoon彼は、 async
とawait
wrapメソッドを使用すると、機能すると言います。 しかし、これがどのように可能になるのかはよくわかりません。 async
とawait
ラップすると、戻り値が冗長になりますね。
2.3.13
公開しました。 皆さんもこれを試してみてください。
これがまだ発生している場合は、再度開いてください。 すべての助けをありがとう。
最も参考になるコメント
現在、これに取り組んでいます。 また、これに直面している人は、実際に
buySubscription
に電話する前に、getSubscriptions
に電話しましたか?