前提・実現したいこと
AndroidでGmailAPIを用いてメール送信をするためのアプリを作成しています。
そのための認証としてOauth2を用いたいと思っています。
発生している問題・エラーメッセージ
エラーメッセージ
該当のソースコード
Java
1public class ProfileActivity extends AppCompatActivity { 2 GoogleSignInClient googleSignInClient; 3 private GoogleSignInOptions gso; 4 private GoogleSignInAccount maccount; 5 private String idToken; 6 private Scope scope = new Scope("https://www.googleapis.com/auth/gmail.send"); 7 8 @Override 9 protected void onCreate(@Nullable Bundle savedInstanceState) { 10 super.onCreate(savedInstanceState); 11 setContentView(R.layout.activity_profile); 12 13 14 gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) 15 .requestIdToken("Googleconsoleで指定されたWEBクライアントID") 16 .requestScopes(scope) 17 .requestEmail() 18 .build(); 19 20 googleSignInClient = GoogleSignIn.getClient(this, gso); 21 GoogleSignInAccount alreadyloggedAccount = GoogleSignIn.getLastSignedInAccount(this); 22 if(alreadyloggedAccount != null){ 23 maccount = alreadyloggedAccount; 24 idToken = maccount.getIdToken(); 25 Log.d("token", idToken); 26 updateUI(maccount); 27 } 28 else{ 29 Intent signinintent = googleSignInClient.getSignInIntent(); 30 startActivityForResult(signinintent, 101); 31 } 32 33 34 } 35 protected void updateUI(GoogleSignInAccount maccount){ 36 Intent intent = new Intent(this, MainActivity.class); 37 intent.putExtra("account", maccount); 38 startActivity(intent); 39 } 40 41 protected void onActivityResult(int requestcode, int resultcode, Intent data){ 42 super.onActivityResult(requestcode, resultcode, data); 43 44 if(requestcode == 101 && resultcode == RESULT_OK){ 45 try{ 46 Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data); 47 maccount = task.getResult(ApiException.class); 48 idToken = maccount.getIdToken(); 49 Log.d("token", idToken); 50 updateUI(maccount); 51 } 52 catch(ApiException e){ 53 Log.w("test", "signInResult:failed code=" + e.getStatusCode()); 54 } 55 } 56 } 57} 58
試したこと
https://developers.google.com/identity/sign-in/android/sign-in を参考にして、ログインしたアカウントのGoogleSigninAccountインスタンスを取得しました。
そこからgetIdToken()メソッドを用いてtokenを取得できたのですが、APIを使用するためにこのtokenをどう使用するか分かりません。
調べるとbackendserverでの認証が出てくるのですが、これは自分でサーバーを立てて認証するということでしょうか?
基本的な質問で申し訳ないのですが、教えていただきたいです。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
あなたの回答
tips
プレビュー