2016-08-17 12 views
2

AndroidアプリでGoogle+ OAuthとAWS Cognitoを設定しようとしていました。AWS Cognito、Google+ OAuth、AccountManagerを使用しているAndroidアプリ

GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data); 

その結果オブジェクトから、私は、特定のデータは以下の通り得ることができます:

if (result.isSuccess()) { 

    GoogleSignInAccount account = result.getSignInAccount(); 
    String authCode = account.getServerAuthCode(); //null 
    String displayName =account.getDisplayName(); //correct value 
    String email = account.getEmail(); //correct value 
    String id = account.getId(); //correct value 
    String idToken = account.getIdToken(); //null 
... 

今私は、Google + OAuthのは、私は以下の呼び出しをオフアカウントを取得することができるよので、私は、信じて働いていしかし、私がAWSのドキュメンテーションに従うと、私はエラーと廃止されたメソッドを取得します。ここで私はAWSのドキュメントから模倣しようとしているコード・ブロックです:

ドキュメンテーション:私が問題に実行しているよどこhttp://docs.aws.amazon.com/cognito/latest/developerguide/google.html#set-up-google-1.android#Android

//From Documentation^
GooglePlayServicesUtil.isGooglePlayServicesAvailable(getApplicationContext()); 
    AccountManager am = AccountManager.get(this); 
    Account[] accounts = am.getAccountsByType(GoogleAuthUtil.GOOGLE_ACCOUNT_TYPE); 
    String token = GoogleAuthUtil.getToken(getApplicationContext(), accounts[0].name, 
      "audience:server:client_id:YOUR_GOOGLE_CLIENT_ID"); 
    Map<String, String> logins = new HashMap<String, String>(); 
    logins.put("accounts.google.com", token); 
    credentialsProvider.setLogins(logins); 

ここでは、次のとおりです。

AccountManager am = AccountManager.get(context); 
      Account[] accounts = am.getAccountsByType(GoogleAuthUtil.GOOGLE_ACCOUNT_TYPE); 

この呼び出しが占めた後にされました空の配列 - OAuthプロセスがAccountManagerに情報を格納するために何かする必要がありますか?

*** AWSのドキュメント(上のリンクから)は、私が得ることができない次のステップを実行する必要があることをGoogleに設定するステップ#5と述べています右:「資格情報>資格の追加」で、サービスアカウントを作成します。新しい公開鍵/秘密鍵が作成されたことを通知するコンソールが表示されます。

GoogleのUIが変更され、カスタムサービスアカウントを作成し、2つのデフォルトアカウント(アプリエンジン/計算エンジン)のいずれかを使用する3つのオプションがあります。私はどちらをすべきですか?

答えて

1

わかりました。 Amazonのawsとgoogleのドキュメントからの主要な変更。

  1. GoogleSignInOptions IDトークンを依頼する必要があります。あなたはそうのようにこれを行う:あなたが得るとき

    googleSignInOptions = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) 
         .requestScopes(new Scope(Scopes.PLUS_LOGIN)) //<- this is optional 
         //requestIdToken takes the google cloud console's project's WEB (not Android) 
         .requestIdToken("in this string put your google web client id") 
         .requestEmail() 
         .build(); 
    
  2. は、その後の結果は、あなたが

    GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data); 
    GoogleSignInAccount account = result.getSignInAccount(); 
    String idToken = account.getIdToken(); 
    
  3. は今、あなたはcognitoを通じてAWSの資格を得るためにそのIDトークンを使用することができますトークンIDを持っていますバックします。

    map loginins = new HashMap(); logins.put( "accounts.google.com"、token); credentialsProvider.setLogins(ログイン); // credentialsProvider = CognitoCachingCredentialsProvider

今、あなたはすべてのセットでなければなりません。

関連する問題