android - 谷歌登录不工作

标签 android android-intent google-signin

我正在关注 Google's documentation用于谷歌签名。打电话时遇到奇怪的问题

Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent (mGoogleApiClient);
        startActivityForResult (signInIntent, RC_SIGN_IN);

似乎 Intent 已被触发,但我看不到帐户选择器对话框。我正在使用

编译“com.google.android.gms:play-services-auth:9.6.1”

当我检查 googleclient 对象是否已连接时,它返回 true。

It's working in some of the devices, but not on every device(specially xiaomi)

实现

@OnClick (R.id.google_singin_button)
void signInButtonClicked () {

    HashMap<String, Object> map = new HashMap<> ();
    map.put (AllAnalytics.LABEL, AllAnalytics.Label.SIGN_IN_GOOGLE);
    map.put (AllAnalytics.ACTION, AllAnalytics.Action.CLICK);
    map.put (AllAnalytics.CATEGORY, AllAnalytics.Category.REGISTRATION_SCREEN);

    aa.analyticsEventOccur (map);

    if (null != mGoogleApiClient) {
       // Log.e(TAG,mGoogleApiClient.isConnected()+"");
        Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent (mGoogleApiClient);
        startActivityForResult (signInIntent, RC_SIGN_IN);
    }
}

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

    // Result returned from launching the Intent from GoogleSignInApi.getSignInIntent(...);
    if(Activity.RESULT_CANCELED != resultCode)
    if (requestCode == RC_SIGN_IN) {
        GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent (data);
        handleSignInResult (result);
    }
}

@Override
public void onCreate (Bundle savedInstanceState) {
    super.onCreate (savedInstanceState);
    mActivity = (RegisterActivity) getActivity ();
    GoogleSignInOptions gso
            = new GoogleSignInOptions.Builder (GoogleSignInOptions.DEFAULT_SIGN_IN)
            .requestServerAuthCode (getString (R.string.google_client_auth), false)
            .requestEmail ()
            .build ();

    mGoogleApiClient = new GoogleApiClient.Builder (getContext ())
            .enableAutoManage (mActivity , this)
            .addApi (Auth.GOOGLE_SIGN_IN_API, gso)
            .build ();

}

日志猫

Class not found when unmarshalling: com.google.android.gms.auth.api.signin.internal.SignInConfiguration
java.lang.ClassNotFoundException: com.google.android.gms.auth.api.signin.internal.SignInConfiguration
   at java.lang.Class.classForName(Native Method)
   at java.lang.Class.forName(Class.java:309)
   at java.lang.Class.forName(Class.java:273)
   at android.os.Parcel.readParcelableCreator(Parcel.java:2281)
   at android.os.Parcel.readParcelable(Parcel.java:2245)
   at android.os.Parcel.readValue(Parcel.java:2152)
   at android.os.Parcel.readArrayMapInternal(Parcel.java:2485)
   at android.os.BaseBundle.unparcel(BaseBundle.java:221)
   at android.os.BaseBundle.containsKey(BaseBundle.java:269)
   at android.content.Intent.hasExtra(Intent.java:4884)
   at com.miui.server.XSpaceManagerService.isPublicIntent(XSpaceManagerService.java:174)
   at com.android.server.am.ActivityStackSupervisorInjector.checkXSpaceControl(ActivityStackSupervisorInjector.java:56)
   at com.android.server.am.ActivityStackSupervisor.startActivityMayWait(ActivityStackSupervisor.java:897)
   at com.android.server.am.ActivityManagerService.startActivityAsUser(ActivityManagerService.java:3478)
   at com.android.server.am.ActivityManagerService.startActivity(ActivityManagerService.java:3465)
   at android.app.ActivityManagerNative.onTransact(ActivityManagerNative.java:140)
   at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:2245)
   at android.os.Binder.execTransact(Binder.java:446)
Caused by: java.lang.ClassNotFoundException: Didn't find class "com.google.android.gms.auth.api.signin.internal.SignInConfiguration" on path: DexPathList[[directory "."],nativeLibraryDirectories=[/vendor/lib64, /system/lib64]]
   at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
   at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
   at java.lang.ClassLoader.loadClass(ClassLoader.java:469)
   at java.lang.Class.classForName(Native Method) 
   at java.lang.Class.forName(Class.java:309) 
   at java.lang.Class.forName(Class.java:273) 
   at android.os.Parcel.readParcelableCreator(Parcel.java:2281) 
   at android.os.Parcel.readParcelable(Parcel.java:2245) 
   at android.os.Parcel.readValue(Parcel.java:2152) 
   at android.os.Parcel.readArrayMapInternal(Parcel.java:2485) 
   at android.os.BaseBundle.unparcel(BaseBundle.java:221) 
   at android.os.BaseBundle.containsKey(BaseBundle.java:269) 
   at android.content.Intent.hasExtra(Intent.java:4884) 
   at com.miui.server.XSpaceManagerService.isPublicIntent(XSpaceManagerService.java:174) 
   at com.android.server.am.ActivityStackSupervisorInjector.checkXSpaceControl(ActivityStackSupervisorInjector.java:56) 
   at com.android.server.am.ActivityStackSupervisor.startActivityMayWait(ActivityStackSupervisor.java:897) 
   at com.android.server.am.ActivityManagerService.startActivityAsUser(ActivityManagerService.java:3478) 
   at com.android.server.am.ActivityManagerService.startActivity(ActivityManagerService.java:3465) 
   at android.app.ActivityManagerNative.onTransact(ActivityManagerNative.java:140) 
   at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:2245) 
   at android.os.Binder.execTransact(Binder.java:446) 
    Suppressed: java.lang.ClassNotFoundException: com.google.android.gms.auth.api.signin.internal.SignInConfiguration
   at java.lang.Class.classForName(Native Method)
   at java.lang.BootClassLoader.findClass(ClassLoader.java:781)
   at java.lang.BootClassLoader.loadClass(ClassLoader.java:841)
   at java.lang.ClassLoader.loadClass(ClassLoader.java:504)
        ... 19 more
Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack available

10-11 23:46:17.873 1387-4537/? E/JavaBinder: *** Uncaught remote exception!  (Exceptions are not yet supported across processes.)
java.lang.RuntimeException: Parcel android.os.Parcel@33c1f490: Unmarshalling unknown type code 6684783 at offset 320
   at android.os.Parcel.readValue(Parcel.java:2228)
   at android.os.Parcel.readArrayMapInternal(Parcel.java:2485)
   at android.os.BaseBundle.unparcel(BaseBundle.java:221)
   at android.os.BaseBundle.containsKey(BaseBundle.java:269)
   at android.content.Intent.hasExtra(Intent.java:4884)
   at com.miui.server.XSpaceManagerService.shouldResolveAgain(XSpaceManagerService.java:145)
   at com.android.server.am.ActivityStackSupervisorInjector.resolveXSpaceIntent(ActivityStackSupervisorInjector.java:68)
   at com.android.server.am.ActivityStackSupervisor.startActivityMayWait(ActivityStackSupervisor.java:898)
   at com.android.server.am.ActivityManagerService.startActivityAsUser(ActivityManagerService.java:3478)
   at com.android.server.am.ActivityManagerService.startActivity(ActivityManagerService.java:3465)
   at android.app.ActivityManagerNative.onTransact(ActivityManagerNative.java:140)
   at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:2245)
   at android.os.Binder.execTransact(Binder.java:446)


10-11 23:46:17.873 1387-4537/? A/ActivityManager: Activity Manager Crash
java.lang.RuntimeException: Parcel android.os.Parcel@33c1f490: Unmarshalling unknown type code 6684783 at offset 320
    at android.os.Parcel.readValue(Parcel.java:2228)
    at android.os.Parcel.readArrayMapInternal(Parcel.java:2485)
    at android.os.BaseBundle.unparcel(BaseBundle.java:221)
    at android.os.BaseBundle.containsKey(BaseBundle.java:269)
    at android.content.Intent.hasExtra(Intent.java:4884)
    at com.miui.server.XSpaceManagerService.shouldResolveAgain(XSpaceManagerService.java:145)
    at com.android.server.am.ActivityStackSupervisorInjector.resolveXSpaceIntent(ActivityStackSupervisorInjector.java:68)
    at com.android.server.am.ActivityStackSupervisor.startActivityMayWait(ActivityStackSupervisor.java:898)
    at com.android.server.am.ActivityManagerService.startActivityAsUser(ActivityManagerService.java:3478)
    at com.android.server.am.ActivityManagerService.startActivity(ActivityManagerService.java:3465)
    at android.app.ActivityManagerNative.onTransact(ActivityManagerNative.java:140)
    at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:2245)
            at android.os.Binder.execTransact(Binder.java:446)

最佳答案

只需检查您的 onActivityResult() 是否被调用,因为您使用了 Fragment。因此,您必须将 Activity 的 Activity 结果传递给 fragment 。

在您的 RegisterActivity 中,您必须这样写

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.fragment_container);
    fragment.onActivityResult(requestCode, resultCode, data);
}

然后您将在您的 fragment 中收到结果。

希望对你有帮助。

关于android - 谷歌登录不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39790094/

相关文章:

java - 在 AsyncTask doInBackground 中创建 140,000 行 SQLite 数据库需要很多很多分钟

android - 应用关闭时推送通知

android - 如何限制从 IMAGE_CAPTURE Intent 中获取的图片大小

android - 从电子邮件中的链接启动我的应用程序,但链接被 gmail 过滤,我该怎么办?请求帮忙 !

android - 实现谷歌登录时,我的 flutter 项目出现错误

android - android camera2如何将预览帧数据馈送到OpenCV进行处理

java - onPause 调用后闹钟继续播放

android - android中 Activity 的单个实例

html - 如何从谷歌登录API中提取电子邮件ID?

android - firebase 升级到 9.2.0 后,google signin uid 和 firebase uid 不匹配