React-native-iap: [Android] getProductsは常に空の配列を返します

作成日 2018年04月25日  ·  19コメント  ·  ソース: dooboolab/react-native-iap

react-native-iapのバージョン

0.3.15

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

アンドロイド

予想される行動

すべての製品を入手

実際の動作

iOSではすべて正常に動作しますが、getProductsはAndroidでは常に空の配列を返します。
私はそれが設定の問題だと思いますが、私は各ステップに従いました...

請求許可付きのAPKアップロード/マーチャントアカウントの設定/アプリ内購入で作成...

🙏 help wanted

最も参考になるコメント

@vadermemo @martinberbessonこんにちは〜あなたのjsコードをitemSkus共有できますか? 以下のコードのように設定しましたか?

export const PURCHASE_ITEMS = Platform.select({
  ios: [
    'productid_1',
    'productid_2',
  ],
  android: [
    'productid_1',
    'productid_2',
  ],
});

また、ドラフトアプリのテストはサポートされなくなりました。 ガイドを参照して

全てのコメント19件

ここで同じ問題

私のスニペット:

  RNIap.prepare().then(responsePrepare => {
    console.log("=============>responsePrepare:" + responsePrepare);
    RNIap.getProducts(itemSkus).then(response => {
        this.setState({ items  : response});
        console.log("=============>response:" + JSON.stringify(response));
    });
  });

adb.logcat(Android)での私の応答

208 28473 28524 I ReactNativeJS:appParamsでアプリケーション "testingIap"を実行しています:{"rootTag":11}。 __DEV__ === true、開発レベルの警告がオン、パフォーマンスの最適化がオフ
04-25 17:04:04.228 1140 1150 I AccountManagerService:getTypesVisibleToCaller:isPermitted? true
04-25 17:04:04.230 1140 2059 I AccountManagerService:getTypesVisibleToCaller:isPermitted? true
04-25 17:04:04.232 24842 24933 I Finsky:[4061] com.google.android.finsky.billing.iab.ab.b(46):com.projectbundle:最初のアカウントのアカウント-[uuAJBL1tLX2MAj69S-olEslXXXX]
04-25 17:04:04.233 28473 28473 D RNIapModule:課金クライアントの準備ができました
04-25 17:04:04.303 28473 28524 I ReactNativeJS:=============> responsePrepare:null
04-25 17:04:04.308 28473 28524 I ReactNativeJS:=============> responsePrepare:null
04-25 17:04:04.328 1140 2107 I AccountManagerService:getTypesVisibleToCaller:isPermitted? true
04-25 17:04:04.330 1140 1896 I AccountManagerService:getTypesVisibleToCaller:isPermitted? true
04-25 17:04:04.339 1140 2095 I AccountManagerService:getTypesVisibleToCaller:isPermitted? true
04-25 17:04:04.340 1140 1679 I AccountManagerService:getTypesVisibleToCaller:isPermitted? true
04-25 17:04:04.343 24842 24854 I Finsky:[4020] com.google.android.finsky.billing.iab.ab.b(46):com.projectbundle:最初のアカウントのアカウント-[uuAJBL1tLX2MAj69S-olEslXXXX]
04-25 17:04:04.347 24842 24853 I Finsky:[4019] com.google.android.finsky.billing.iab.ab.b(46):com.projectbundle:最初のアカウントのアカウント-[uuAJBL1tLX2MAj69S-olEslXXXX]
04-25 17:04:04.626 28473 28525 D RNIapModule:responseCode:0
04-25 17:04:04.628 28473 28525 D RNIapModule:responseCode:0
04-25 17:04:04.669 28473 28524 I ReactNativeJS:=============>応答:[]
04-25 17:04:04.693 28473 28524 I ReactNativeJS:=============>応答:[]

しかし、iOSでは、データが適切な形式の配列を取得します。

PD1https //medium.com/@dooboolab/react-native-in-app-purchase-121622d26b67から推奨事項を取得し

PD2「オビ=ワン・ケノービ、あなたが私の唯一の希望だ」

Package.jsonスニペット:
「依存関係」:{
"react": "16.3.1"、
"react-native": "0.55.3"、
"react-native-iap": "^ 0.3.18"
}、

@vadermemo @martinberbessonこんにちは〜あなたのjsコードをitemSkus共有できますか? 以下のコードのように設定しましたか?

export const PURCHASE_ITEMS = Platform.select({
  ios: [
    'productid_1',
    'productid_2',
  ],
  android: [
    'productid_1',
    'productid_2',
  ],
});

また、ドラフトアプリのテストはサポートされなくなりました。 ガイドを参照して

こんにちは@dooboolab

これは私のデータです
const itemSkus = Platform.select({
ios:[
'com.iap.cart'、
'com.iap.doublecoins'
]、
アンドロイド:[
'ダブル'、
'cart_1500'
]、
});

宜しくお願いします

PD1私のアプリはアルファバージョンですが、製品を入手できません。
PD2他のnpmでは、react-native-billingのように、製品を入手できます:(

@vadermemoこれは私にとって本当に悪いことです..ごめんなさい。 私の環境では問題なく動作します。 もっと明日デバッグして、きっと明日戻ってきます! また、ステートメントをキャッチして、そこに何が表示されているかを確認してみてください。

アルファリリースが必要だと思います...請求許可のあるapkをアップロードするだけでは不十分です

@dooboolabええと、何か助けがあれば、次のポイントかもしれません。

構成をreact-native-billingに配置するときに、リソースファイル「string.xml」にパラメータ文字列名= "RNB_GOOGLE_PLAY_LICENSE_KEY"を配置しました。
しかし、react-native-iapでは、このパラメーターの動作を確認できません。

必要なtry-catchは、次のログをスローします。

  1. アイテムを変更するSkus

const itemSkus = Platform.select({
ios:[
'predictorcart_1500'、
]、
アンドロイド:[
'predictorcart_1500'、
'android.test.purchased'、
'android.test.canceled'、
'android.test.refunded'、
'android.test.item_unavailable'、
]、
});

  1. componentDidMountの変更

    非同期componentDidMount(){
    {を試してください
    RNIap.prepare();を待つ
    this.getItems();を待つ

    }
    キャッチ(エラー){
    console.warn(err.code、err.message);
    }
    }

  2. 取得データを変更する

    getProductDetails = async()=> {
    {を試してください
    const products = await RNIap.getProducts(itemSkus);
    console.log( '=======> Products ::::'、products);
    this.setState({productDetails:products});
    } catch(err){
    console.warn(err.code、err.message);
    }
    }

  3. ボタンを押す
    \

  4. アプリをデバイスに配置する
    react-native run-android --variant = release

6.最後に、ログは次のとおりです。
04-26 12:53:11.335 16749 16759 I Finsky:[11707] com.google.android.finsky.billing.iab.ab.b(46):com.projectbundle:最初のアカウントのアカウント-[uuAJBL1tLX2MAj69S-olEl331212]
04-26 12:53:11.401 226 1177 V audio_hw_primary:do_output_standby in
04-26 12:53:11.409 20362 20432 D RNIapModule:responseCode:0
04-26 12:53:11.426 226 1177 W audio_hw_primary:do_output_standby.mode:0
04-26 12:53:11.426 226 1177 V audio_hw_primary:do_output_standby in out
04-26 12:53:11.427 1140 2106 D PowerManagerService:releaseWakeLockInternal:lock = 87714678 [AudioMix]、flags = 0x0、total_time = 3166ms
04-26 12:53:11.444 20362 20431 I ReactNativeJS: '=======> Products ::::'、[{description: 'Descripcióndemuestraparael producto:android.test.canceled。'、
04-26 12:53:11.444 20362 20431 I ReactNativeJS:タイトル: 'Títulodemuestra'、
04-26 12:53:11.444 20362 20431 I ReactNativeJS:localizedPrice: '$ 18.65'、
04-26 12:53:11.444 20362 20431 I ReactNativeJS:タイプ: 'inapp'、
04-26 12:53:11.444 20362 20431 I ReactNativeJS:通貨: 'MXN'、
04-26 12:53:11.444 20362 20431 I ReactNativeJS:価格:'18 .65 '、
04-26 12:53:11.444 20362 20431 I ReactNativeJS:productId: 'android.test.canceled'}、
04-26 12:53:11.444 20362 20431 I ReactNativeJS:{説明: 'Descripcióndemuestraparael producto:android.test.item_unavailable。'、
04-26 12:53:11.444 20362 20431 I ReactNativeJS:タイトル: 'Títulodemuestra'、
04-26 12:53:11.444 20362 20431 I ReactNativeJS:localizedPrice: '$ 18.65'、
04-26 12:53:11.444 20362 20431 I ReactNativeJS:タイプ: 'inapp'、
04-26 12:53:11.444 20362 20431 I ReactNativeJS:通貨: 'MXN'、
04-26 12:53:11.444 20362 20431 I ReactNativeJS:価格:'18 .65 '、
04-26 12:53:11.444 20362 20431 I ReactNativeJS:productId: 'android.test.item_unavailable'}、
04-26 12:53:11.444 20362 20431 I ReactNativeJS:{説明: 'Descripcióndemuestraparael producto:android.test.purchased。'、
04-26 12:53:11.444 20362 20431 I ReactNativeJS:タイトル: 'Títulodemuestra'、
04-26 12:53:11.444 20362 20431 I ReactNativeJS:localizedPrice: '$ 18.65'、
04-26 12:53:11.444 20362 20431 I ReactNativeJS:タイプ: 'inapp'、
04-26 12:53:11.444 20362 20431 I ReactNativeJS:通貨: 'MXN'、
04-26 12:53:11.444 20362 20431 I ReactNativeJS:価格:'18 .65 '、
04-26 12:53:11.444 20362 20431 I ReactNativeJS:productId: 'android.test.purchased'}、
04-26 12:53:11.444 20362 20431 I ReactNativeJS:{説明: 'Descripcióndemuestraparael producto:android.test.refunded。'、
04-26 12:53:11.444 20362 20431 I ReactNativeJS:タイトル: 'Títulodemuestra'、
04-26 12:53:11.444 20362 20431 I ReactNativeJS:localizedPrice: '$ 18.65'、
04-26 12:53:11.444 20362 20431 I ReactNativeJS:タイプ: 'inapp'、
04-26 12:53:11.444 20362 20431 I ReactNativeJS:通貨: 'MXN'、
04-26 12:53:11.444 20362 20431 I ReactNativeJS:価格:'18 .65 '、
04-26 12:53:11.444 20362 20431 I ReactNativeJS:productId: 'android.test.refunded'}]

@martinberbessonアルファリリースのアプリがありますが、製品を入手できません。 別のことだと思います。おそらくreact-native-iapまたはgoogleコンソールの構成です。

@ martinberbesson @ dooboolab信じられない!!

同じ手順で別のアプリを作成しましたが、アプリはiOSとAndroidで動作しています!!。 信じられない。

どちらが理由なのかわかりませんが、コードやグーグルコンソールでの設定だと思います。

PD正しいitemSkusを取得するために5時間待っていました。
PD2古いアプリは24時間でもitemsSkusを取得しません。
PD3 @ dooboolabこれで静かに眠ることができます。 :)
PD4購入プロセスを開発します。簡単だといいのですが。

宜しくお願いします、

@vadermemoそれが機能していることをstring.xml他に何も入れる必要はありません。

#124によると、これはまだ発生していると思います。少なくとも、これに対する解決策があるとよい既存のアプリについては。

まだこの問題が発生している場合は、まずhttps://stackoverflow.com/a/35132936/1374827を読んで、その投稿で概説されているすべての要件を満たしていることを確認する必要があります。

それがすべて問題ない場合は、適切な関数を呼び出していることを確認してください。 私の場合、サブスクリプションのアプリ内購入のみを使用しているアプリがありましたが、誤ってRNIap.getProductsを呼び出し、もちろん空の配列を取得していました。 代わりにRNIap.getSubscriptionsに電話する必要があり、サブスクリプションが返されました。

同様に、サブスクリプションを購入する場合はRNIap.buySubscription電話し、製品を購入する場合はRNIap.buyProduct電話するようにしてください。

これと格闘した後、私の問題はアンドロイドの経験不足であることが判明しました。 私はdevでパッケージ名をいじっていましたが、デバイス上で正常に実行されていましたが、パッケージ名が完全に設定されていなかったため、空の配列が返されていました。 次の後の手順およびこれらのことは、すべての格好良いです。

空の配列も取得します、
また、 https: //developer.android.com/google/play/billing/billing_testing#draft_apps docと混同しており、テストアカウントが必要で、テスターを追加しているので、誰でも手伝ってください。

ありがとう!

同じ

@bharatidudhjiya @tmjordan構成の問題に直面している場合は、最初に純粋なandroid iapプロジェクトを試して、正しく機能するかどうかを確認してください。 これは、Androidのiap SDKをよりよく理解するのにも役立ちます。

@hyochanありがとう、それはいい考えです。 私はそれを行います

@tmjordanこれはかなり古いですが、これは基本的なセットアップに役立つ可能性があります。

ありがとう男@hyochan

解決しました! 私はこれらのバージョンを使用しています、

react-native-iap: ^4.3.0
react-native: 0.60.5

このようにしてください

const itemSkus = Platform.select({
    ios: [
        '100coins' // just remove bundle id from product id
    ],
    android: [
        '100coins' // just remove bundle id from product id
    ]
});

アプリケーションに適切なパッケージ名があることを確認してください。

そして、react-nativeコマンドから変更した場合。 それはまだ機能しません。

手動で実行してから、androidフォルダーの./gradlewcleanを使用してプロジェクトをクリーンアップする必要があります。

その後、試してみてください。

ハッピーコーディング。

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