React-native-iap: RNIapはAndroidでは機能しませんが、同じコードでiOSで機能します

作成日 2020年07月07日  ·  33コメント  ·  ソース: dooboolab/react-native-iap

react-native-iapのバージョン
4.4.7

react-nativeのバージョン
0.60.6

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

予想される行動

     async componentDidMount() {
        try {
            const result = await RNIap.initConnection();
            await RNIap.consumeAllItemsAndroid();
            console.log('result', result);
            const products: Product[] = await RNIap.getProducts(itemSkus);
            this.setState({ products }, () => {console.log(this.state.products)});
        } catch (err) {
            console.warn(err.code, err.message);
        }

予想される動作は、ターミナルに出力された.getProducts()によってPlayConsoleから取得された製品のリストです。

実際の動作
約束は返されません。 エラー「請求は利用できません」

テストされた環境(エミュレーター?実デバイス?)
実デバイス(アプリは現在本番環境にあります)

動作を再現する手順
const itemSkus = Platform.select({ ios: [ 'com.example.1' ], android: [ 'com.example.1' ] });

     async componentDidMount() {
        try {
            const result = await RNIap.initConnection();
            await RNIap.consumeAllItemsAndroid();
            console.log('result', result);
            const products: Product[] = await RNIap.getProducts(itemSkus);
            this.setState({ products }, () => {console.log(this.state.products)});
        } catch (err) {
            console.warn(err.code, err.message);
        }
    this.purchaseUpdateSubscription = purchaseUpdatedListener(async (purchase: InAppPurchase | SubscriptionPurchase | ProductPurchase) => {
        console.log('purchaseUpdatedListener', purchase);
        const receipt = purchase.transactionReceipt;
        if (receipt) {
            try {
                // if (Platform.OS === 'ios') {
                //   finishTransactionIOS(purchase.transactionId);
                // } else if (Platform.OS === 'android') {
                //   // If consumable (can be purchased again)
                //   consumePurchaseAndroid(purchase.purchaseToken);
                //   // If not consumable
                //   acknowledgePurchaseAndroid(purchase.purchaseToken);
                // }
                const ackResult = await finishTransaction(purchase);
            } catch (ackErr) {
                console.warn('ackErr', ackErr);
            }

            this.setState({ receipt }, () => this.goNext());
        }
    },
    );

    this.purchaseErrorSubscription = purchaseErrorListener(
        (error: PurchaseError) => {
            console.log('purchaseErrorListener', error);
        },
    );
}
componentWillUnmount() {
    if (this.purchaseUpdateSubscription) {
        this.purchaseUpdateSubscription.remove();
        this.purchaseUpdateSubscription = null;
    }
    if (this.purchaseErrorSubscription) {
        this.purchaseErrorSubscription.remove();
        this.purchaseErrorSubscription = null;
    }
}

これがなぜなのか理解できないようです。 私はiOS用にこの正確なコードを使用していますが、完全に機能します。 Play Consoleですべての製品を設定し、マニフェストファイルに請求権限を追加し、IAPパッケージをリンクしました(AndroidXを使用しているため、パッケージは自動リンクされます)。 Playストアにログインしていて、最新バージョンのPlayストアを持っていますが、initConnection()がまだ機能していません。 他に何をすべきかわかりません。 どんな助けでも大歓迎です! 読んでくれてありがとう。

🙏 help wanted 🤖 android

全てのコメント33件

これは役に立ちますか?

これは役に立ちますか?

残念ながら、それは役に立ちませんでした:(。これはAndroidXの移行と関係がありますか?何らかの理由でinitConnection()が機能せず、その理由がわかりません。

@damialajogun何が悪かったのかわかりましたか? 私はまったく同じ間違いをしていて、それがどこから来たのかわかりません... initConnection()は未定義です。

@hyochanアイデアはありますか?

@damialajogun何が悪かったのかわかりましたか? 私はまったく同じ間違いをしていて、それがどこから来たのかわかりません... initConnection()は未定義です。

ねえ、いいえ私はまだそれを理解していません:(

AndroidManifest.xmlファイルに<uses-permission android:name="com.android.vending.BILLING" />を追加しましたか?

@hakkikonuはい私は持っています

エラーログでは、米国やニュージーランドなどのいくつかの国のユーザーのごく一部で同じエラーが発生していることがわかります。 しかし、それは非常に一貫性がないように見えます。 これが何によって引き起こされる可能性があるかについてのアイデアはありますか?

@ joris1995私もこの問題を抱えています。一部のユーザーはアプリ内購入を行うことができません。エラーは「SKUが見つかりませんでした。最初にgetItemsを呼び出して商品を取得してください」ですが、購入ポップアップにSKUが含まれているためです。 getProductsから取得したオブジェクトの価格を表示します。getItemsはAPIにも含まれていません

あなたのグーグルプレイストアアプリは最新バージョンですか? この問題は、電話またはすべてのユーザーでのみ発生しますか?

また、別のGmailアカウントでGooglePlayストアにログインしてみることもできます。

お使いのデバイスの設定/アプリケーション/グーグルプレイからあなたのグーグルプレイサービスとグーグルプレイストアアプリのキャッシュファイルをきれいにすることを忘れないでください。

すべてのユーザー/アカウント/電話...

私にとって、それは私のユーザーの一部にすぎません。 国、OSバージョン、デバイスメーカーなどの一貫した要素はないようです。 BugSnagでは、「請求は利用できません」というエラーが表示されます。 これはデバイスに問題があるか、Playストアがダウンしている可能性があります。 これは何が原因でしょうか?

アプリ内購入を読み込む前にベータ版を送信する必要があり、リリースビルドを使用してのみデバッグできます。

ベータは必須ではありません。 クローズドアルファも大丈夫です

私も同じ問題を抱えています。ベータ版を提出し、4日前に承認されました。

あなたの言っていることが理解できれば、initConnection()はテストではなくベータ版で機能するということですか?

@Kamsouはい。ただし、デバッグビルドでは機能しないのは主に「getProducts()」です。

詳細: https

私と一緒に起こっていることは、それは私が購入が行われたかどうかを見たいとき、私がするということです:
RNIap.getPurchaseHistory()
iOSでは、すべてが正常に機能します。
しかし、Androidでは、「エラー:E_IAP_NOT_AVAILABLE」という1つの間違いがあります。
_ローカルエミュレータを使用しています_

`` ` const initilizeIAPConnection = async () => { await initConnection() .then(async (connection) => { consumeAllItemsAndroid(); await getItems(); console.log('IAP result', connection); }) .catch((error) => { console.warn( IAP ERROR $ {error.code}`、error.message);
});
};

const getItems = async()=> {
試す {
const Subscriptions = getSubscriptions(itemSkus);を待ちます。
console.log( '製品'、サブスクリプション);
setSubscriptions(subscriptions);
} catch(err){
console.warn(err.code、err.message);
}
};
useEffect(()=> {
initilizeIAPConnection();
}、[]);

`` ` I just removed await for ConsumerAllItemsAndroid(); `そしてそれは働き始めました

@rizshivalliそれがあなたのために働いていると聞いてうれしいです。 残念ながら、 consumeAllItemsAndroid()待機を削除しても、まだ機能しません。 私の問題は、 initConnection()が機能しないことです。 その部分をどのように機能させることができますか?

@damialajogun try catchを削除し、.thenと.catchを追加しました

@rizshivalli試してみましたが、まだ機能していません:(。すべての質問で申し訳ありませんが、実際に端末に印刷された「製品」を下から見ることができますか?私の問題は引っ張っていないことだと思います設定してアクティブになっている場合でも、PlayConsoleで設定したすべての製品。
const getItems = async () => { try { const subscriptions = await getSubscriptions(itemSkus); console.log('Products', subscriptions);

@damialajogunはい動作しています。 また、Androidで支払いをテストすることもできます。 ビルドをAndroidでアルファ版またはベータ版にリリースしましたか?

@rizshivalliアルファ版でもベータ版でもありませんが、

こんにちは@rizshivalli簡単な質問-あなたのアプリは

@damialajogunユーザーはアプリのインストールに料金を支払う必要がないため、無料としてリストされています

みんな、おはよう、
支払いでうまく機能するAndroidアプリケーションを持っている人はいますか?
私の場合、initConnectionが機能しないためです。

私は最新バージョンを使用しています。 initConnectionは実際には何もしないと思います。接続を開始するだけなので、製品をフェッチする必要があります。

これに対する解決策はありますか?
私にとって、Androidはアプリを起動する前にクラッシュします。 しかし、Iosは期待どおりに機能します。
助けてください

私は(おそらく)同じ問題に直面しています。

アプリにさらに2つのサブスクリプションを追加しましたが、機能しているのは古いサブスクリプションのみです。
RNIap.getSubscriptions()を待とうとすると、「グーグルは支払いに接続する際に問題があることを示しています」と表示されます。

RNIap.requestSubscription(subId、true)を実行しようとすると、「SKUが見つかりませんでした」というメッセージが表示されます。

SkusはGooglePlayに登録されており、IDが正しいことを再確認しました。 デバッグモードとリリースモードを使用して、エミュレータと実際のデバイスでテストされています。

何か案が?

ねえ、最近この問題に関する活動はなかったようです。 問題は修正されましたか、それともコミュニティの注意が必要ですか? それ以上のアクティビティが発生しない場合、この問題は解決される可能性があります。 この問題に「ディスカッション用」または「良い最初の問題」というラベルを付けることもできます。開いたままにしておきます。 貢献していただきありがとうございます。

ねえ、最近この問題に関する活動はなかったようです。 問題は修正されましたか、それともコミュニティの注意が必要ですか? それ以上のアクティビティが発生しない場合、この問題は解決される可能性があります。 この問題に「ディスカッション用」または「良い最初の問題」というラベルを付けることもできます。開いたままにしておきます。 貢献していただきありがとうございます。

まだ注意が必要です

閉めることができます!

ルサム。 19日 11時03分à2020、damialajogun [email protected] A
écrit:

ねえ、この問題に関する活動はなかったようです
近々。 問題は修正されましたか、それともまだ必要ですか?
コミュニティの注目? これ以上のアクティビティがない場合、この問題は解決される可能性があります
発生します。 この問題に「ディスカッション用」または「最初に良い」というラベルを付けることもできます。
問題」と私はそれを開いたままにします。あなたの貢献に感謝します。

まだ注意が必要です


あなたが言及されたのであなたはこれを受け取っています。
このメールに直接返信し、GitHubで表示してください
https://github.com/dooboolab/react-native-iap/issues/1040#issuecomment-748451922
または購読を解除する
https://github.com/notifications/unsubscribe-auth/AJ2B2AUIRMGWIHZSFYL6SWTSVR3AXANCNFSM4OSLGZSQ

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