React-native-iap: ユーザーフィードバックを無視するbuySubscription

作成日 2018年10月06日  ·  32コメント  ·  ソース: dooboolab/react-native-iap

react-native-iapのバージョン

2.3.0

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

アンドロイド

予想される行動

sub = await RNIApp.buySubscription( "some");

ユーザーがアプリ内支払いのモーダルで購入を押すのを待つ必要があります

実際の動作

ユーザーがサブスクリプションを受け入れたかどうかを確認できません。

sub = await RNIApp.buySubscription( "some");
if(sub){
いくつかのことをします。
}

if(sub)ブロックはポップアップが開いた直後に実行されますが、ユーザーはまだサブスクリプションを受け入れません

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

実際のデバイス

何か案は?

getAvailablePurchasesのように、promiseを返し、正常に機能するメソッドは他にもあります。

問題は、buySubscriptionがユーザー入力のコールバックを返す必要があり、それが返されないことです。

⌚️ regression 📱 iOS

最も参考になるコメント

現在、これに取り組んでいます。 また、これに直面している人は、実際にbuySubscriptionに電話する前に、 getSubscriptionsに電話しましたか?

全てのコメント32件

RN 57を使用しています。また、サブスクリプションが完了しました。プレイストアで購入に問題がないことを確認できますが、buySubscriptionの約束が未定義で返されます。

何か助けはありますか?

ええと、私は2.2.2にダウングレードして動作します。だから、皆さんは新しいリリースで何かを逃したと思います

@ marcosmartinez7壊れてすみません、 2.3.1を試してみませんか?

ありがとね!

今は時間がありませんが、

@ marcosmartinez7ありがとうございます。

@dooboolabの問題はiOSにも存在します。 2.3.12.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.7buySubscription()直接失敗します。

@ Gaia-栄養OK。 次に、 buySubscription代わりにbuyProductWithoutFinishTransactionfinishTransaction使用します。 購入アクションはまったく同じです。

@ 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彼は、 asyncawait wrapメソッドを使用すると、機能すると言います。 しかし、これがどのように可能になるのかはよくわかりません。 asyncawaitラップすると、戻り値が冗長になりますね。

2.3.13公開しました。 皆さんもこれを試してみてください。

これがまだ発生している場合は、再度開いてください。 すべての助けをありがとう。

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

関連する問題

jvandenaardweg picture jvandenaardweg  ·  4コメント

ramondelmondo picture ramondelmondo  ·  4コメント

sanilcgs picture sanilcgs  ·  3コメント

Symyon picture Symyon  ·  5コメント

coldfins picture coldfins  ·  3コメント