Google Access Tokenを取得して、Google RESTなどのAPI YouTube Data API などの認証済みユーザーから(Firebase Authenticationを使用)にアクセスしようとしています。
Firebase-UI for Android-Auth library。]の助けを借りて、アプリにGoogleサインインを正常に統合しました。FirebaseUser.getToken()
から取得したトークンmethodはREST APIの有効なGoogleアクセストークンではありません。
user.getToken(true).addOnCompleteListener(new OnCompleteListener<GetTokenResult>() {
public void onComplete(@NonNull Task<GetTokenResult> task) {
if (task.isSuccessful()) {
String token = task.getResult().getToken();
// 'token' is not a Google Access Token
}
}
});
Web用Googleサインインガイド では、var token = result.credential.accessToken;
を呼び出すことでアクセストークンを取得できますが、Androidで同様の方法を見つけることができません。
入力はありますか?十分な情報を提供していない場合は、ここにコメントしてください。ありがとうございました :)
GoogleAuthUtil.getToken を試してください scope は「oauth2:scope1 scope2 scope3」のようなものです
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestIdToken(getString(R.string.default_web_client_id))
.requestEmail()
.build();
mGoogleApiClient = new GoogleApiClient.Builder(this)
.enableAutoManage(this, this)
.addApi(Auth.GOOGLE_SIGN_IN_API, gso)
.build();
}
private void signIn() {
Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient);
startActivityForResult(signInIntent, RC_SIGN_IN);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == RC_SIGN_IN) {
GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
if (result.isSuccess()) {
final GoogleSignInAccount account = result.getSignInAccount();
Runnable runnable = new Runnable() {
@Override
public void run() {
try {
String scope = "oauth2:"+Scopes.EMAIL+" "+ Scopes.PROFILE;
String accessToken = GoogleAuthUtil.getToken(getApplicationContext(), account.getAccount(), scope, new Bundle());
Log.d(TAG, "accessToken:"+accessToken); //accessToken:ya29.Gl...
} catch (IOException e) {
e.printStackTrace();
} catch (GoogleAuthException e) {
e.printStackTrace();
}
}
};
AsyncTask.execute(runnable);
} else {
}
}
}
私は@vovkasソリューションをフォローしていますが、最後のアップデート_11.6.0
_を使用すると、Account
をより簡単に取得できるため、すべてをhandy dandyAsyncTask
はいつでも再利用できます:
_public class GetToken extends AsyncTask<Void, Void, String> {
private final Context context;
public GetToken(Context context) {
this.context = context;
}
@Override
protected String doInBackground(Void... voids) {
try {
String scope = "oauth2:" + Scopes.EMAIL + " " + Scopes.PROFILE;
GoogleSignInAccount account = GoogleSignIn.getLastSignedInAccount(context);
return GoogleAuthUtil.getToken(context, account.getAccount(), scope, new Bundle());
} catch (IOException e) {
e.printStackTrace();
} catch (GoogleAuthException e) {
e.printStackTrace();
}
return null;
}
}
_
キーはGoogleSignIn.getLastSignedInAccount(context)
を使用することです。