In-App-Billing v3は、ヘルパーとともに私のAndroidアプリに実装されています。
ネットワークがない場合、購入を開始した後、醜い灰色の画面で立ち往生しています。
私たちのアプリでこれを処理する方法はありますか?
現在、ストアからSKUの詳細を受け取らない場合、発売時に購入を無効にします。ただし、起動後に接続が変更される可能性があります。GooglePlayサービスが利用可能かどうかを知る方法が見つかりませんでした。
ご協力いただきありがとうございます!
In-App-Billing v3は、ヘルパーとともに私のAndroidアプリに実装されています。
ネットワークがない場合、購入を開始した後、醜い灰色の画面で立ち往生しています。
私たちのアプリでこれを処理する方法はありますか?
現在、ストアからSKUの詳細を受け取らない場合、発売時に購入を無効にします。ただし、起動後に接続が変更される可能性があります。GooglePlayサービスが利用可能かどうかを知る方法が見つかりませんでした。
ご協力いただきありがとうございます!
NIkolayが提案したように、回避策は、リクエストを開始する前に接続をチェックすることです。
それを試してみたい場合は、次のコードが役立ちます。
まず、AndroidManifest.xmlファイルにいくつかの権限を追加する必要があります。具体的には、android.permission.ACCESS_NETWORK_STATEまたはandroid.permission.ACCESS_WIFI_STATEです。
ACCESS_NETWORK_STATEはConnectivityManager(一般的なネットワーク接続用)にアクセスするために必要であり、 ACCESS_WIFI_STATEはWifiManager(Wi-Fi接続を管理するため)へのアクセスを許可します。
<!-- Needed for Reachability testing / wifi vs 3g uploading --> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
次に、このメソッドをチェックして、ネットワークステータスを確認します
public static boolean isNetworkAvailable(Context context) {
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo netInfo = cm.getActiveNetworkInfo();
if (null == netInfo || !netInfo.isConnected()) {
return false;
}
return true;
}
残念ながら、これまでに提案されたすべてのソリューションは、支払い要求を開始する前にネットワーク接続を確認する必要があり、ユーザーが接続されている場合は不要な遅延が大幅に発生し、ユーザーが接続されていない場合はさらに長い遅延 (タイムアウトの待機) が発生します。 、または、そうでなければすべてのアプリが必要とするわけではないアクセス許可を必要とします。さらに、既に述べたように、ネットワーク接続の欠如 (または存在) を誤って識別する危険性があります。
また、Google Play の一部のバージョン (少なくとも Android の特定のバージョン用) では、既にネットワーク接続の欠如を正しく処理しています (たとえば、Nexus7 では、期待どおりに、「接続がありません」というテキストを含む「エラー」というタイトルのダイアログが表示されます)。 . また、Google Play アプリの更新プロセスは自動化されているため、Google が現在この問題を示しているアプリのバージョンについて最終的にこの問題に対処するという希望があります。ソリューションが削除され、削除されるまで不要なオーバーヘッドが発生します。
上記を考えると、最良の解決策は、ユーザーが購入を開始するために使用するボタンを保持するダイアログまたはビューに強調表示されたテキストを追加することである可能性があります。
「デバイスがインターネットに接続されていることを確認してください。問題が発生した場合は、戻るボタンをタップしてください。」
灰色の画面で戻るボタンをタップすると、画面が消えるように見え、ユーザーが支払いダイアログからキャンセルしたかのように、RESULT_CANCELED で onActivityResult() が呼び出されます。これにより、ユーザーは灰色の画面から抜け出すことができます。
このアプローチはローテクですが、私には、多くの選択肢の中で最良の方法のように思えます。