2017-03-06 8 views
2

私は、サービスに加入するためのアプリ内課金を実装しました。すべてがうまくいくが、私はそれを安全にする必要がある時点にいる。私が遭遇した様々な提案は、ログインしたユーザーのアカウントIDをPlus API経由で使用することを提案しています。しかし、ユーザーが自分のGmailアカウントを使用してログインしていない場合はどうすればよいですか?私の考えは、ユーザーアカウントIDとスキューを組み合わせて作成したトークンを生成することでした。次に、購入を確認するためにサーバーに確認します。ユーザーのアカウントIDを取得する方法はありますか? 1回の購入で複数のデバイス間でアプリを使用できるようにしたいと考えています。ユーザーがソーシャルAPIを使用してログインしていない場合は、複数のデバイス間でユーザーを確認する方法はありますか?Androidでユーザーのログインなしでペイロードを確認する適切な方法は何ですか?

答えて

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を使用するときにトークン/キーを確認するためにも使用できます。

関連する問題