web-dev-qa-db-ja.com

複数のアカウントでのアプリ内購入

アプリの購入/サブスクリプションで問題が発生しています:

デバイスに複数のアカウントがある場合、2番目のアカウントで行われた購入を取得できません。これは、Google Playウェブインターフェースからアプリをインストールすることで一時的に修正できる場合がありますが、しばらくすると、購入がクエリに表示されず、ユーザーに再インストールを強制します。

このサンプル のIabHelperクラスを使用しています。

いくつかのGoogle検索を行ったところ、このバグはしばらく前から存在していることがわかりましたが、残念ながら、エラーがIabHelperクラスにあるのか、Google側にあるのかわかりませんでした。

私はGoogleに注意を向けたいので、彼らはIabHelperクラスまたはPlay Servicesのいずれかでこれに対する適切な修正を提供するか、またはこれがどのように処理されるべきかについての情報を提供します。

(執筆時点で)900.000人のアクティブユーザーがインストールしているアプリでコードを使用しており、これが原因でかなりの払い戻しをトリガーする必要があります。

私がこれを逃した修正があった場合は、お知らせください。

編集:電話にアカウントが1つしかない場合でも、購入を取得できない場合があります。

64
stefple

これを解決するための片道がないようですが、これを試してみましょう。

  1. ユーザーが最初にアプリをインストールしたときに、デバイスにプライマリメールまたはすべてのアカウントを取得します

  2. 今後の支払いに使用するメールや、Google Playでアクティブなアカウントをユーザーに尋ねます。

    このコードを使用してアカウントを取得できます

    Pattern emailPattern = Patterns.EMAIL_ADDRESS; // API level 8+
    Account[] accounts = AccountManager.get(context).getAccounts();
    for (Account account : accounts) {
        if (emailPattern.matcher(account.name).matches()) {
            String possibleEmail = account.name;
            ...
        }
    }
    

    許可を求めることを忘れないでください

    <uses-permission Android:name="Android.permission.GET_ACCOUNTS" />
    

    ユーザーがメールを選択したら、メールでリンクを送信して、このメールアドレスを確認できます

  3. すべての支払いを特定のメールに誘導します。

方法2

新しい「Gmailを使用した送金と受け取り」の未来を利用する

  1. メールインテントを作成し、特定のデータをメールインテントに送信して支払いを行います。

  2. 成功したら、ユーザーのメールにコードを送信します

  3. コードを使用して、購入したものをアクティブ化します。

方法

アプリ内購入には、Google Playの代わりに別の支払いライブラリまたはゲートウェイを使用します。

1
Lucien Mendela

2つのアカウントを持っていますが、1つは機能しません。私がやったことは、Androidの設定に行ってから、アカウント設定に行ったことです。メインアカウントを、機能しないアカウントから機能するアカウントに変更しました。次に、Google Playを含むすべてのアプリケーションのメインアカウントに新しいアカウントを割り当てました。それでうまくいきました。場合によっては、それが何らかの理由で機能しない場合、インターネットにアクセスしてインターネットからGoogle Playストアにアクセスすることもできます。

ファイル署名が.apkまたは.xcodeで終わるdup ... duplicate dotを取得してみてください

0
Python Pro

数か月後、同じ問題に遭遇しました。何時間も解決策を見つけた後、私はこのようなものを回避するための作業を思いつきました、

OAuth 2.0を使用できます。

ただし、バックエンドから管理する必要もあります。私はバックエンドの開発者ではないので、それがバックエンドでどのように機能するのか正確にはわかりませんでしたが、アプリ側で次のようなことをしました、

サーバー側で認証を許可する最初のGoogleアカウントを使用できます。 OAuth 2.0は、ユーザーがアプリケーションにアクセスできるようにする簡単な方法を開発者に提供するツールです。OAuthHmacSignerクラスは認証を管理します。

signer = new OAuthHmacSigner();
signer.clientSharedSecret = Constants.CONSUMER_SECRET;

次に、Androidアクティビティは次のコードを使用してOAuthフローを起動します。

launchOauth.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
        startActivity(new Intent().setClass(v.getContext(),
            PrepareRequestTokenActivity.class));
    }
});

OAuth 2.0アクセストークンを取得するには、次のコードを呼び出すだけです。

AccountManager.getAuthToken()

これが役立つことを願っています:)

0
Hardik Chauhan