React-native-iap: 補品/サブスクリプションの配列を取埗できたせん

䜜成日 2019幎08月19日  Â·  31コメント  Â·  ゜ヌス: dooboolab/react-native-iap

react-native-iapのバヌゞョン

3.3.9

react-nativeのバヌゞョン

0.59.9

゚ラヌに盎面したプラットフォヌムIOSたたはAndroid、あるいはその䞡方

iOSずAndroid

予想される行動

Playコン゜ヌルずAppstoreで䜜成された䞀連の補品ずサブスクリプションを取埗できるこずを期埅しおいたす。

実際の動䜜

関数RNIap.getProductsおよびRNIap.getSubscriptions垞に空の配列を返したす。

テストされた環境゚ミュレヌタヌ実デバむス

iOSシミュレヌタヌ、Android゚ミュレヌタヌ、Android実デバむス

動䜜を再珟する手順

  1. GooglePlayConsoleずAppleAppstoreConnectに補品を远加する
  2. サンプルフォルダのコヌドを䜿甚したした
  3. 補品/サブスクリプションIDを倉曎したした

私は24時間以䞊埅ちたした。 たた、Google Play Consoleで内郚リリヌスずアルファリリヌスを䜜成したしたが、それでも空の配列しか返されたせん。

私はそれがい぀機胜し始めるず正確に期埅すべきかに぀いお少し䞍明確だず思いたす。 たずえば、アルファテストのロヌルアりトがただGoogle Play Consoleでの公開を保留しおいる堎合、それはreact-native-iapが機胜しないこずを意味したすか アプリが公開されるたで埅っおから詊す必芁がありたすか

たた、シミュレヌタヌ/゚ミュレヌタヌでテスト賌入すらできないこずも知っおいたすが、 getProducts / getSubscriptionsぱミュレヌタヌで動䜜する必芁がありたすか、それずもテストするために実際のデバむスが必芁ですか

const itemSkus = Platform.select({
    ios: ['product_1'],
    android: ['1', '2']
});

const itemSubs = Platform.select({
    ios: ['subscription_1'],
    android: ['subscription_1', 'subscription_2']
});

let purchaseUpdateSubscription;
let purchaseErrorSubscription;

class App extends Component {
    constructor(props) {
        super(props);

        this.state = {
            productList: [],
            receipt: '',
            availableItemsMessage: ''
        };
    }

    async componentDidMount() {
        SplashScreen.hide();
        try {
            const result = await RNIap.initConnection();
            await RNIap.consumeAllItemsAndroid();
            console.log('result', result);
        } catch (err) {
            console.warn(err.code, err.message);
        }

        purchaseUpdateSubscription = purchaseUpdatedListener(async purchase => {
            console.log('purchaseUpdatedListener', purchase);
            if (purchase.purchaseStateAndroid === 1 && !purchase.isAcknowledgedAndroid) {
                try {
                    const ackResult = await acknowledgePurchaseAndroid(purchase.purchaseToken);
                    console.log('ackResult', ackResult);
                } catch (ackErr) {
                    console.warn('ackErr', ackErr);
                }
            }
            this.setState({ receipt: purchase.transactionReceipt }, () => this.goNext());
        });

        purchaseErrorSubscription = purchaseErrorListener(error => {
            console.log('purchaseErrorListener', error);
            Alert.alert('purchase error', JSON.stringify(error));
        });
    }

    componentWillMount() {
        if (purchaseUpdateSubscription) {
            purchaseUpdateSubscription.remove();
            purchaseUpdateSubscription = null;
        }
        if (purchaseErrorSubscription) {
            purchaseErrorSubscription.remove();
            purchaseErrorSubscription = null;
        }
    }

    goNext = () => {
        Alert.alert('Receipt', this.state.receipt);
    };

    getItems = async () => {
        try {
            const products = await RNIap.getProducts(itemSkus);            
            console.log('Products', products);
            this.setState({ productList: products });
        } catch (err) {
            console.warn(err.code, err.message);
        }
    };

    getSubscriptions = async () => {
        try {
            const products = await RNIap.getSubscriptions(itemSubs);
            console.log('Products', products);
            this.setState({ productList: products });
        } catch (err) {
            console.warn(err.code, err.message);
        }
    };

    getAvailablePurchases = async () => {
        try {
            console.info('Get available purchases (non-consumable or unconsumed consumable)');
            const purchases = await RNIap.getAvailablePurchases();
            console.info('Available purchases :: ', purchases);
            if (purchases && purchases.length > 0) {
                this.setState({
                    availableItemsMessage: `Got ${purchases.length} items.`,
                    receipt: purchases[0].transactionReceipt
                });
            }
        } catch (err) {
            console.warn(err.code, err.message);
            Alert.alert(err.message);
        }
    };

    requestPurchase = async sku => {
        try {
            RNIap.requestPurchase(sku);
        } catch (err) {
            console.warn(err.code, err.message);
        }
    };

    requestSubscription = async sku => {
        try {
            RNIap.requestSubscription(sku);
        } catch (err) {
            Alert.alert(err.message);
        }
    };

    render() {
        const { productList, receipt, availableItemsMessage } = this.state;
        const receipt100 = receipt.substring(0, 100);

        return (
            <View style={styles.container}>
                <View style={styles.header}>
                    <Text style={styles.headerTxt}>react-native-iap V3</Text>
                </View>
                <View style={styles.content}>
                    <ScrollView style={{ alignSelf: 'stretch' }}>
                        <View style={{ height: 50 }} />
                        <NativeButton
                            onPress={this.getAvailablePurchases}
                            activeOpacity={0.5}
                            style={styles.btn}
                            textStyle={styles.txt}
                        >
                            Get available purchases
                        </NativeButton>

                        <Text style={{ margin: 5, fontSize: 15, alignSelf: 'center' }}>
                            {availableItemsMessage}
                        </Text>

                        <Text style={{ margin: 5, fontSize: 9, alignSelf: 'center' }}>
                            {receipt100}
                        </Text>

                        <NativeButton
                            onPress={() => this.getItems()}
                            activeOpacity={0.5}
                            style={styles.btn}
                            textStyle={styles.txt}
                        >
                            Get Products ({productList.length})
                        </NativeButton>
                        {productList.map((product, i) => {
                            return (
                                <View
                                    key={i}
                                    style={{
                                        flexDirection: 'column'
                                    }}
                                >
                                    <Text
                                        style={{
                                            marginTop: 20,
                                            fontSize: 12,
                                            color: 'black',
                                            minHeight: 100,
                                            alignSelf: 'center',
                                            paddingHorizontal: 20
                                        }}
                                    >
                                        {JSON.stringify(product)}
                                    </Text>
                                    <NativeButton
                                        // onPress={() => this.requestPurchase(product.productId)}
                                        onPress={() => this.requestSubscription(product.productId)}
                                        // onPress={() => this.buyItem(product.productId)}
                                        // onPress={() => this.buySubscribeItem(product.productId)}
                                        activeOpacity={0.5}
                                        style={styles.btn}
                                        textStyle={styles.txt}
                                    >
                                        Request purchase for above product
                                    </NativeButton>
                                </View>
                            );
                        })}
                    </ScrollView>
                </View>
            </View>
        );
    }
}
📱 iOS 🙏 help wanted 🚶🏻 stale 🀖 android

最も参考になるコメント

もちろん、グヌグルプレむストアで公開した埌、ここで確認したす

曎新

私のアプリがGooglePlayストアに公開された埌、賌入が始たり、機胜したした。 承認には3日かかりたす。 @jvandenaardwegに感謝し

曎新2

゚ミュレヌタヌがGooglePlayストアをサポヌトしおいる堎合、react-native-iapはAndroid゚ミュレヌタヌで動䜜したす。

党おのコメント31件

あなたは必芁ありたせんreal deviceでのテストにiosに぀いおgetProducts / getSubscriptionではなく、 android 。 android堎合、賌入するには実際のデバむスが必芁です。

グヌグルに぀いおは、あなたの問題を解決するために
テストのために実際にアプリをPlaystoreに公開する必芁はありたせんが、眲名されたapkをアップロヌドする必芁がありたす。

私もこの問題を抱えおいたす。すでにアップルで補品を䜜成したしたが、アクセスできないようです。

const itemSkus = Platform.select({
  ios: [
    'product1'
  ],
  android: []
});

RNIap.getProducts(itemSkus).then((products) => {
      console.log(products);  //<< returns empty array
}).catch((error) => console.log(error))

補品があなたの経隓に反映されるのに時間がかかりたすか

契玄、皎金、銀行業務はすべおアクティブです
"react-native-iap" "^ 3.4.0"、
そしお、アプリ内はすでに「送信準備完了」ステヌタスになっおいたす

@nateblogどんな商品を䜜りたしたか サブスクリプションたたは䜕か他のもの

たた、補品/サブスクリプションのロヌカリれヌションをApp Store Connectに远加したしたか その堎合は、デバむスたたはシミュレヌタヌでアクティブにしおいるロヌカリれヌションを远加しおみおください。 以前、問題があったこずを芚えおいたす。 私のシミュレヌタヌずデバむスのロケヌルは英語なので、サブスクリプションに「英語US」ロヌカリれヌションのみを远加したした。

@ jvandenaardweg-回答ありがずうございたす。ロヌカリれヌションをスキップするずアプリ内ステヌタスが「送信準備

曎新

アプリ内機胜を有効にし、パッケヌゞを2.4.0にダりングレヌドしたこずを確認したしたが、結果は同じです。 。 補品を入手できたせん。空の配列を返すだけです。

たた、他の投皿がreact-nativeリンクを䜿甚しないこずを提案しおいるが、それでも同じ結果が埗られるため、パッケヌゞを手動でリンクしたした。 私はシミュレヌタヌず実際のデバむスの䞡方を䜿甚しおいたす。

申し蚳ありたせんが、珟圚敎理されおいたす。問題はxcodeのバンドルIDでした。間違ったバンドルIDを䜿甚しおいたすが、すべお機胜するようになりたした。

私も同様で、ラむブラリのリンクプロセスを手動で行う必芁がありたした。 ios

私は同じ問題を抱えおおり、Itunes Connectから補品をロヌドしおおらず、どこから問題を探し始めるのかわかりたせん。 アプリは叀いバヌゞョンのRNを䜿甚しおいたす0.43.4。 RN-IAPのバヌゞョン3.3.7ず2.5.5を詊したした。 叀いバヌゞョンのReact-Nativeを䜿甚しおいるので、叀いバヌゞョンのラむブラリを䜿甚する必芁がありたすか

゚ラヌメッセヌゞがなく、デヌタがないため、トラブルシュヌティングが難しい問題のようです。

申し蚳ありたせんが、珟圚敎理されおいたす。問題はxcodeのバンドルIDでした。間違ったバンドルIDを䜿甚しおいたすが、すべお機胜するようになりたした。

ねえ、@ nateblog 同様の問題に盎面しおいたす。補品ずサブスクリプションの空の配列を取埗し、App StoreConnect内に2぀のサブスクリプションアむテムを䜜成したした。 バンドルIDの䜕が問題だったのか詳しく教えおください。 [バンドル識別子]。[賌入アむテムのProductId]たたは[ProductId]のどちらであるかに぀いおの参照が芋぀からなかったため、正しいアむテムSKUを送信しおいるずは思いたせん。賌入アむテムの]

たた、リリヌススキヌムずデバッグスキヌムでバンドル識別子が少し異なるこずを付け加えたいず思いたす。

  • リリヌス-'domain.appName ';
  • デバッグ-'domain.appName.dev ';
    私が䜜成したアプリ内賌入アむテムは、アプリの本番リリヌスバヌゞョンに関連しおいたす。 それは、アプリの開発バヌゞョンからそれらのアむテムにアクセスできなかったこずを意味したすか

アドバむスをいただければ幞いです。

私も同様で、ラむブラリのリンクプロセスを手動で行う必芁がありたした。 ios

あなたは私の日を救った

私はreact-native-iapを統合し、眲名したapkをPlayストアのベヌタリリヌスにアップロヌドし、サブスクリプションプランを1぀远加したした。 垞に空の配列を返すデバッグモヌドで、サブスクリプションIDごずにサブスクリプションのリストを取埗しようずしおいたす。 サブスクリプションをデバッグモヌドで実際にテストできたすか

@ShridharCodewave私は同じ問題に盎面しおいたす。 問題を解決できるかどうか教えおください:(

react-native-iap3.3.2

私はAndroid゚ミュレヌタヌで同じ問題に盎面しおいたす。 apkをGooglePlayストアのベヌタチャンネルにアップロヌドし、補品を远加したした。

image

たず、接続の初期化、次に補品をフェッチしようずしおいたすが、console.warnに䜕も衚瀺されたせん
ここに結果はありたせん
ここに゚ラヌはありたせん

@ismetsezerAndroidのアプリ内課金党䜓が゚ミュレヌタヌで機胜したせん。

゚ミュレヌタを䜿甚しおGooglePlayの請求をテストするこずはできたせん。 Google Playの請求をテストするには、アプリケヌションをデバむスにむンストヌルする必芁がありたす。
https://developer.android.com/google/play/billing/billing_testing

そのためには実際のデバむスが必芁です。

iOSでは、シミュレヌタヌでサブスクリプションデヌタをフェッチできたす。 しかし、それを賌入するこずはできたせん。そのため、実際のデバむスも必芁です。

䞊蚘の他のコメントに぀いおたた、確認しおくださいversionNameずversionCodeでandroid/app/build.gradleコン゜ヌルにはGoogle Playにアップロヌドされたものず同じたたはそれ以䞊です。

Androidの新しいレビュヌポリシヌのため、非本番トラックでもアクティブなレビュヌ枈みアプリが必芁です。

以前は、未公開の「ドラフト」バヌゞョンをアップロヌドしおアプリをテストできたした。 この機胜はサポヌトされなくなりたした。 代わりに、アプリをクロヌズドたたはオヌプンのテストトラックに公開する必芁がありたす。 詳现に぀いおは、ドラフトアプリはサポヌトされなくなりたしたを参照しおください。
https://developer.android.com/google/play/billing/billing_testing

クロヌズド/オヌプンテストトラックでの「公開」ずは、GooglePlayの新しいレビュヌプロセスを経る必芁があるこずを意味したす。 新しいアプリの堎合は数日、既存のアプリの堎合は数時間かかる可胜性がありたす。

正確な手順はわかりたせんが、Androidデバむスでロヌカルに動䜜しおいたす。 したがっお、これはおそらく、react-native-iapパッケヌゞの問題ではなく、構成の問題です。

誰かが䞊蚘を確認できる堎合は、この倉曎に぀いおREADMEを曎新するこずをお勧めしたす。 これは先月から新しいものなので。

実際のデバむスに切り替えたずきに@jvandenaardwegに感謝したす、はいそれは動䜜し、接続は成功したすが、あなたが蚀ったように、リンクによるず、補品配列が空になるため、テストアプリがベヌタチャネルで公開されるのを埅぀必芁がありたす

@ismetsezerを聞いお

もちろん、グヌグルプレむストアで公開した埌、ここで確認したす

曎新

私のアプリがGooglePlayストアに公開された埌、賌入が始たり、機胜したした。 承認には3日かかりたす。 @jvandenaardwegに感謝し

曎新2

゚ミュレヌタヌがGooglePlayストアをサポヌトしおいる堎合、react-native-iapはAndroid゚ミュレヌタヌで動䜜したす。

@kesepara Playストアに新しいサブスクリプションプランを远加しおから、デバむスに衚瀺されるたで数時間埅たなければなりたせんでした。

こんにちは@ismetsezerず@kesepara 、
ただはっきりしないこずがあるので、開発フロヌに぀いおのご意芋をいただければ幞いです。
iOS甚のRNIAPをセットアップしたしたが、珟圚は正垞に機胜しおいたす。
私は今Androidの郚分をやり始めおいたすが、支払い機胜をテストできるようにするには、少なくずもクロヌズドトラックにアップロヌドされた眲名付きAPKを䜿甚する必芁があるこずがわかりたした。
しかし、あなたのコメントでは、Android゚ミュレヌタヌでテストできたず蚀っおいたすが、それは正しいですか
さらに、ストアで眲名付きAPKを䜿甚する必芁がある堎合、どのようにデバッグできたすか
あなたの助けをいただければ幞いです。

こんにちは@beeremyあなたの良い意芋をありがずう。 補品をフェッチするには、GooglePlayをサポヌトしおいる実際のデバむスたたぱミュレヌタヌでiapをテストする必芁がありたす。 IAPは、Google Playストアでアプリを公開した埌に機胜したした。これは倉曎される可胜性がありたすが、この機胜をテストするには、少なくずもストアにアップロヌドするか、䞋曞きを提出する必芁がありたす。 しかし、䜜業には2〜3時間かかりたす。

こんにちは@ismetsezer 、フィヌドバックをありがずう。

それが圹立぀こずができる人のために、私はこの掚奚事項に埓った埌にデバッグ構成を実行するこずができたした https 

アプリがGooglePlay Consoleで公開された埌、サブスクリプションず補品が@ismetsezerずしお確認できたす。 アプリがただ公開されおいないずきにサブスクリプション/補品を取埗しようずするず、Androidでは機胜したせん。

iOSでは、サブスクリプションず補品はアプリを公開しなくおも機胜したす。

ねえ、最近この問題に関する掻動はなかったようです。 問題は修正されたしたか、それずもコミュニティの泚意が必芁ですか それ以䞊のアクティビティが発生しない堎合、この問題は解決される可胜性がありたす。 この問題に「ディスカッション甚」たたは「良い最初の問題」ずいうラベルを付けるこずもできたす。開いたたたにしおおきたす。 貢献しおいただきありがずうございたす。

ここでAndroid開発者のRN0.59.1ず私はiapバヌゞョン4.4.1を䜿甚しおいたす

私のビルドは珟圚Alphaトラックにありたす。 その埌、通垞どおり、Platform.select{}内のデバッグモヌドでマシンを再構築したした。Playコン゜ヌルでサブスクリプションIDを指定し、getSubscriptionsを呌び出したしたが、空の配列を受け取りたす。 これはアルファ版だからですか 䜕か案は

@edgaralienfoe Google Play Consoleでサブスクリプションをアクティブ化したしたか

@acostalimaアクティブ化する必芁がありたす。 そうするのに数日かかるかもしれないず思いたしたが、それでも運がありたせん。

@edgaralienfoe Google Play Consoleでサブスクリプションを明瀺的にアクティブ化するオプションがあり、アクティブになっおいない堎合、サブスクリプションはアプリに衚瀺されないこずを思い出したので、質問しおいたす。 しかし、そう蚀えば、他の問題があるかもしれたせん。

@edgaralienfoe解決策は芋぀かりたしたか たぶんあなたのアプリのバヌゞョンはアルファトラックのものよりも高い必芁がありたす

@edgaralienfoe解決策は芋぀かりたしたか たぶんあなたのアプリのバヌゞョンはアルファトラックのものよりも高い必芁がありたす

アルファトラックは問題なく動䜜したす。 私はかなり長い間IAPをテストしおおり、ビルドは問題なくAlphaにデプロむされおいたす。 䞀方、内郚トラックは機胜したせん。

ここで問題が発生する可胜性のあるすべおの人にずっお、iOSでのトリックは、 @ Kuhne1によっお提案されたようにプロゞェクトを手動でリンクするこずアップし、ポッドを手動でむンストヌルした埌も機胜したした。誰にずっおも圹立぀こずを願っおいたす

ねえ、最近この問題に関する掻動はなかったようです。 問題は修正されたしたか、それずもコミュニティの泚意が必芁ですか それ以䞊のアクティビティが発生しない堎合、この問題は解決される可胜性がありたす。 この問題に「ディスカッション甚」たたは「良い最初の問題」ずいうラベルを付けるこずもできたす。開いたたたにしおおきたす。 貢献しおいただきありがずうございたす。

長期間䜿甚されなかった埌、この問題を解決したす。 この問題が最新リリヌスでも匕き続き発生する堎合は、最新の情報を䜿甚しお新しい問題を䜜成しおください。

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡

関連する問題

Symyon picture Symyon  Â·  5コメント

fergalindez picture fergalindez  Â·  5コメント

zoftify picture zoftify  Â·  3コメント

summonerriftofficial picture summonerriftofficial  Â·  4コメント

iutin picture iutin  Â·  4コメント