私は、サービスに加入するためのアプリ内課金を実装しました。すべてがうまくいくが、私はそれを安全にする必要がある時点にいる。私が遭遇した様々な提案は、ログインしたユーザーのアカウントIDをPlus API経由で使用することを提案しています。しかし、ユーザーが自分のGmailアカウントを使用してログインしていない場合はどうすればよいですか?私の考えは、ユーザーアカウントIDとスキューを組み合わせて作成したトークンを生成することでした。次に、購入を確認するためにサーバーに確認します。ユーザーのアカウントIDを取得する方法はありますか? 1回の購入で複数のデバイス間でアプリを使用できるようにしたいと考えています。ユーザーがソーシャルAPIを使用してログインしていない場合は、複数のデバイス間でユーザーを確認する方法はありますか?Androidでユーザーのログインなしでペイロードを確認する適切な方法は何ですか?
2
A
答えて
3
多くの試行錯誤や研究を経て、私は解決策を見出しました。だから、同じ必要性/問題があり、誰のために:あなたのbuild.gradleファイルにこれを追加し、
まず:
コンパイル「com.google.android.gms:PLAY-サービス-AUTHを: 10.2.0'
はその後、ユーザーはIDがこれを追加アカウントを取得する必要がある活動に:
public class MainActivity extends AppCompatActivity{
private static final int REQUEST_CODE_EMAIL = 1;
TextView email, mAcctId;
Button getID;
String accountName;
String TAG = "test";
private static final int REQ_SIGN_IN_REQUIRED = 55664;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
email = (TextView) findViewById(R.id.email);
mAcctId = (TextView)findViewById(R.id.accountID);
//Shows a popup allowing user to select email if more than one exists
try {
Intent intent = AccountPicker.newChooseAccountIntent(null, null,
new String[] { GoogleAuthUtil.GOOGLE_ACCOUNT_TYPE }, false, null, null, null, null);
startActivityForResult(intent, REQUEST_CODE_EMAIL);
} catch (ActivityNotFoundException e) {
// TODO
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_CODE_EMAIL && resultCode == RESULT_OK) {
accountName = data.getStringExtra(AccountManager.KEY_ACCOUNT_NAME);
email.setText(accountName);
//Call async task to get accountID for selected email
new RetrieveAccountID().execute(accountName);
}
}
private class RetrieveAccountID extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... params) {
String accountName = params[0];
String token = null;
try {
token = GoogleAuthUtil.getAccountId(getApplicationContext(), accountName);
} catch (IOException e) {
Log.e(TAG, e.getMessage());
} catch (UserRecoverableAuthException e) {
startActivityForResult(e.getIntent(), REQ_SIGN_IN_REQUIRED);
} catch (GoogleAuthException e) {
Log.e(TAG, e.getMessage());
}
return token;
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
((TextView) findViewById(R.id.accountID)).setText("AccountID: " + s);
}
}
}
あなたにユーザーを与える実行中は、1つのTextViewに電子メールを選択し、そのメールのaccountIDは別のTextViewにあります。ユーザーのメールに固有のアプリのトークン/キーを作成するために使用できるようになりました。これは、ユーザーが別のデバイス上でappを使用するときにトークン/キーを確認するためにも使用できます。
関連する問題
- 1. Genericオブジェクトのオブジェクトタイプを確認する適切な方法は何ですか?
- 2. Angularfire2:ユーザーがログインしているかどうかを確認する適切な方法はありますか?
- 3. ReactJSでシングルページアプリケーションのユーザをログインさせる適切な方法は何ですか?
- 4. GameCenter認証を行う適切な方法は何ですか?
- 5. カスタムユーザーモデル用に電子メールでログインする適切な方法は何ですか?
- 6. EmailMessageで正しい受信者の電子メールアドレスを確認する適切な方法は何ですか?
- 7. Androidでのスレッドの適切な使い方は何ですか?
- 8. イテレータが完了したかどうかを確認する適切な方法は何ですか?
- 9. DLLなしでlibcURLを使用する適切な方法は何ですか?
- 10. JSONにキーがあるかどうかを確認する適切な方法は何ですか?
- 11. ExpressJS + JWT。認証データを取得する適切な方法は何ですか?
- 12. ログインしているユーザーを確認する方法は、アクティブユーザーか、またはASP IDではないですか?
- 13. ジェネリックメソッドをオーバーライドする適切な方法は何ですか?
- 14. ジキルをインストールする適切な方法は何ですか?
- 15. GUIを作成する適切な方法は何ですか
- 16. ゲームデータを保存する適切な方法は何ですか?
- 17. jquery.inputmaskをインポートする適切な方法は何ですか?
- 18. constを追加する適切な方法は何ですか?
- 19. Django_comments:post_comment()をオーバーライドする適切な方法は何ですか?
- 20. 宝石をダウングレードする適切な方法は何ですか?
- 21. ユーザープロファイルを登録する適切な方法は何ですか?
- 22. デリゲートをサブクラス化する適切な方法は何ですか?
- 23. 壁をUVマップする適切な方法は何ですか?
- 24. AppBarを修正する適切な方法は何ですか?
- 25. Erlangをインデントする適切な方法は何ですか?
- 26. [NSString stringWithFormat:]をラップする適切な方法は何ですか?
- 27. 3ノードクラスタをシードする適切な方法は何ですか?
- 28. FB.Event.subscribeを処理する適切な方法は何ですか?
- 29. ダイナミックアレイを削除する適切な方法は何ですか?
- 30. ICpをシャットダウンする適切な方法は何ですか?