2017-10-18 73 views
0

我跟着關於Android設備上的google log-in官方指南。不能使用谷歌登錄

我成功獲得Account picker但是當我處理結果時,它總是不成功。

這是我做了什麼:

  • 我登錄我的控制檯上,我對與我曾經對我的創建APK密鑰庫的控制檯命令獲得這個項目成立了SHA-1。 (新創建)。
  • 然後我下載了google-services.json文件,我把它放到我的應用程序/文件夾中。
  • 最後我實現了登錄在導的建議(張貼下面的代碼)

片段與登錄按鈕

public class SigninMenuFragment extends Fragment implements GoogleApiClient.OnConnectionFailedListener, GoogleApiClient.ConnectionCallbacks { 

    private final static String TAG = "SigninMenuFragment"; 
    private Button btnFacebookLogin, btnSignin, btnSignup; 
    private Button btnGoogleLogin; 

    private static final int RC_SIGN_IN = 9001; 

    private GoogleApiClient mGoogleApiClient; 
    private ProgressDialog mProgressDialog; 

    public SigninMenuFragment() { 
     // Required empty public constructor 
    } 


    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     // Inflate the layout for this fragment 
     View view = inflater.inflate(R.layout.fragment_signin_menu, container, false); 

     btnFacebookLogin = (Button) view.findViewById(R.id.btnLoginFacebook); 
     btnGoogleLogin = (Button) view.findViewById(R.id.btnLoginGoogle); 
     btnSignin = (Button) view.findViewById(R.id.btnSignIn); 
     btnSignup = (Button) view.findViewById(R.id.btnSignUp); 

     btnGoogleLogin.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       googleLogin(); 
      } 
     }); 
     btnFacebookLogin.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       facebookLogin(); 
      } 
     }); 
     GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) 
       .requestEmail() 
       .build(); 
     mGoogleApiClient = new GoogleApiClient.Builder(getContext()) 
       .enableAutoManage(getActivity() /* FragmentActivity */, this /* OnConnectionFailedListener */) 
       .addApi(Auth.GOOGLE_SIGN_IN_API, gso) 
       .build(); 
     return view; 
    } 

    private void facebookLogin() { 
     //todo 
    } 


    private void googleLogin() { 
     Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient); 
     startActivityForResult(signInIntent, RC_SIGN_IN); 
    } 

    @Override 
    public void onConnectionFailed(@NonNull ConnectionResult connectionResult) { 

    } 

    @Override 
    public void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 

     if (requestCode == RC_SIGN_IN) { 
      GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data); 
      handleSignInResult(result); 
     } 
    } 

    private void handleSignInResult(GoogleSignInResult result) { 
     Log.d(TAG, "handleSignInResult:" + result.isSuccess()); 
     GoogleSignInAccount a = result.getSignInAccount(); 
     if(a == null){ 
      Log.d(TAG, "null"); 
     }else{ 
      Log.d(TAG, a.getDisplayName()); 
     } 
     if (result.isSuccess()) { 
      // Signed in successfully, show authenticated UI. 
      GoogleSignInAccount acct = result.getSignInAccount(); 
     } else { 
      // Signed out, show unauthenticated UI. 
     } 
    } 

    @Override 
    public void onStart() { 
     super.onStart(); 
    } 

    @Override 
    public void onStop() { 
     super.onStop(); 
     if (mProgressDialog != null) { 
      mProgressDialog.dismiss(); 
     } 
    } 

    private void showProgressDialog() { 
     if (mProgressDialog == null) { 
      mProgressDialog = new ProgressDialog(getActivity()); 
      mProgressDialog.setMessage("Loading"); 
      mProgressDialog.setIndeterminate(true); 
     } 

     mProgressDialog.show(); 
    } 

    private void hideProgressDialog() { 
     if (mProgressDialog != null && mProgressDialog.isShowing()) { 
      mProgressDialog.hide(); 
     } 
    } 

    @Override 
    public void onConnected(@Nullable Bundle bundle) { 
     Log.d(TAG, "Connected"); 
    } 

    @Override 
    public void onConnectionSuspended(int i) { 
     Log.d(TAG, "NOT Connected"); 

    } 
} 

我的清單

<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<uses-permission android:name="android.permission.GET_ACCOUNTS"/> 

<application 
    android:name=".other.MyCustomApplication" 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:roundIcon="@mipmap/ic_launcher_round" 
    android:supportsRtl="true" 
    android:theme="@style/AppTheme"> 
    <activity 
     android:name=".activities.SplashScreenActivity" 
     android:theme="@style/AppThemeNoActionBar"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
<!-- ... --> 
</application> 

Gradle

//... 
dependencies { 
    compile fileTree(dir: 'libs', include: ['*.jar']) 
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { 
     exclude group: 'com.android.support', module: 'support-annotations' 
    }) 
    compile 'com.android.support:appcompat-v7:25.3.1' 
    compile 'com.android.support:design:25.3.1' 
    compile 'com.android.support.constraint:constraint-layout:1.0.2' 
    compile 'com.google.code.gson:gson:2.7' 
    compile 'com.android.support:multidex:1.0.1' 
    compile 'com.squareup.okhttp3:okhttp:3.9.0' 
    compile 'com.android.support:cardview-v7:25.3.1' 
    compile 'com.android.support:recyclerview-v7:25.3.1' 
    compile 'com.google.android.gms:play-services-places:11.4.0' 
    compile 'com.google.android.gms:play-services-location:11.4.0' 
    compile 'com.google.android.gms:play-services-maps:11.4.0' 
    compile 'io.realm:android-adapters:2.1.0' 
    compile 'com.android.support:support-v4:25.3.1' 
    compile 'com.google.firebase:firebase-core:11.4.0' 
    compile 'com.google.firebase:firebase-messaging:11.4.0' 
    compile 'com.facebook.android:facebook-login:[4,5)' 
    compile 'com.google.android.gms:play-services-auth:11.4.0' 

    testCompile 'junit:junit:4.12' 
} 

apply plugin: 'com.google.gms.google-services' 

一些註釋:

  • activity擴展FragmentActivity
  • 登錄button是定製

我最大的疑問是關於SHA-1的產生,因爲其他文件是從谷歌開發控制檯複製粘貼。

我需要的帳戶擁有者的全名和基本用戶信息

我做錯了任何想法?

感謝所有

編輯

logcat的,當我按一下按鈕

9月10日至19日:32:40.974 23319-23319/utilitapps.prodottilastminute I/HwSecImmHelper :mSecurityInputMethodService爲空10-19 09:32:41.048 23319-23319/utilitapps.prodottilastminute V/AudioManager: playSoundEffect effectType:0 9月10日至19日:32:41.049 23319-23319/utilitapps.prodottilastminute V/AudioManager: querySoundEffectsEnabled ...

                  --------- beginning of system 10-19 09:32:41.068 23319-23483/utilitapps.prodottilastminute V/FA: Recording user 

接合,MS:15514 9月10日至19日:32:41.069 23319-23483/utilitapps。prodottilastminute V/FA:使用測量 服務10-19 09:32:41.070 23319-23483/utilitapps.prodottilastminute V/FA:連接到遠程服務10-19 09:32:41.082 23319-23483/utilitapps.prodottilastminute V/FA:活動暫停,時間: 144716338 10-19 09:32:41.086 23319-23319/utilitapps.prodottilastminute V/ActivityThread:ActivityThread,callActivityOnCreate 10-19 09:32:41.087 23319-23319/utilitapps.prodottilastminute V/FA: onActivityCreated 9月10日至19日:32:41.087 23319-23483/utilitapps.prodottilastminute d/FA:記錄事件(FE): user_engagement(_E),捆綁[{firebase_event_origin(_O)=汽車, engagement_time_msec( _et)= 15514, firebase_screen_clas (_sc)= SplashScreenActivity, firebase_screen_id(_si)= 2950491777079955672}] 10-19 09:32:41.122 23319-23483/utilitapps.prodottilastminute V/FA:Using measurement service 10-19 09:32:41.122 23319- 23483/utilitapps.prodottilastminute V/FA:正在進行連接嘗試10-19 09:32:41.124 23319-23483/utilitapps.prodottilastminute V/FA:使用測量 服務10-19 09:32:41.124 23319-23483 /utilitapps.prodottilastminute V/FA:已在進行連接嘗試9月10日至19日:32:41.124 23319-23483/utilitapps.prodottilastminute V/FA:活動恢復, 時間:144716382 9月10日至19日:32:41.128 23319-23483/utilitapps.prodottilastminute D/FA:記錄事件(FE): screen_view(_vs),捆綁[{firebase_event_origin(_O)=汽車, firebase_previous_class(_PC)= SplashScreenActivity, firebase_previous_id(_pi)= 2950491777079955672, firebase_screen_class(_sc)= SignInHubActivity, firebase_screen_id(_si)= 2950491777079955674}] 10 -19 09:32:41.163 23319-23483/utilitapps.prodottilastminute V/FA:使用測量 服務10-19 09:32:41.164 23319-23483/utilitapps.prodottilastminute V/FA:正在進行連接嘗試10- 19 09:32:41.169 23319-23483/utilitapps.prodottilastminute V/FA: 的曝光時間小於1000毫秒。事件未發送。時間:57 10-19 09:32:41.169 23319-23483/utilitapps.prodottilastminute V/FA:使用測量 服務10-19 09:32:41.169 23319-23483/utilitapps.prodottilastminute V/FA:已嘗試連接正在進行中10-19 09:32:41.169 23319-23483/utilitapps.prodottilastminute V/FA:活動暫停,時間: 10-19 09:32:41.196 23319-23483/utilitapps.prodottilastminute D/FA: 連接到遠程服務10-19 09:32:41.196 23319-23483/utilitapps.prodottilastminute V/FA:處理排隊 服務任務:5 10-19 09:32:46.263 23319-23483/utilitapps.prodottilastminute V/FA:不活躍, 斷開服務

的logcat當我選擇的帳戶:

10-19 09:34:49.570 23319-23319/utilitapps.prodottilastminute I/HwSecImmHelper:mSecurityInputMethodService爲null 10-19 09: 34:49.583 23319-23319/utilitapps.prodottilastminute D/SigninMenuFragment:handleSignInResult:false 10-19 09:34:49.583 23319-23319/utilitapps.prodottilastminute D/SigninMenuFragment:null 10-19 09:34:49.585 23319- 25806/utilitapps.prodottilastminute V/FA: Activ恢復時間:144844854 10-19 09:34:49.592 23319-25806/utilitapps。prodottilastminute d/FA:記錄事件(FE): screen_view(_vs),捆綁[{firebase_event_origin(_O)=汽車, firebase_previous_class(_PC)= SignInHubActivity, firebase_previous_id(_pi)= 2950491777079955675, firebase_screen_class(_sc)= SplashScreenActivity , firebase_screen_id(_si)= 2950491777079955672}] 9月10日至19日:34:49.598 23319-23319/utilitapps.prodottilastminute I/HwSecImmHelper: mSecurityInputMethodService是空

+0

https://developers.google.com/mobile/add?platform=android&cntapi=signin&cnturl=https:%2F%2Fdevelopers.google.com%2Fidentity%2Fsign-in%2Fandroid %2登錄%3F配置%3Dtrue&cntlbl =繼續%20添加%20登錄。請檢查包名,SHA-1代碼 –

+0

。任何logcat? –

+0

@IntelliJAmiya我試着用「mykeystone.jks」的路徑重新生成我的sha-1代碼,但沒有成功,我添加了我的logcat,即使我沒有看到任何有用的東西。感謝您的提示 –

回答

0

在GoogleSignInOptions您應該指定requestIdToken:

GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) 
       .requestIdToken(getString(R.string.default_web_client_id)) 
       .requestEmail() 
       .build(); 
+0

感謝您的回答!我嘗試過,但不幸的是沒有任何改變 –

0

好的,我發現問題在於我如何創建我的SHA-1。

This answer使我從最初創建的文件生成一個不同的SHA-1文件。用這個替換代碼解決了我的問題,現在我可以成功登錄。

我不完全知道我做錯了什麼,可能我是針對錯誤的keystore,但這種方式在我看來更容易。

感謝所有幫助