2017-10-18 135 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,但这种方式在我看来更容易。

感谢所有帮助