Facebook帐户套件与Google Play服务的冲突

Gir*_*hai 10 android facebook-android-sdk facebook-account-kit

将帐户工具包sdk配置为

  compile 'com.facebook.android:account-kit-sdk:4.+'
Run Code Online (Sandbox Code Playgroud)

和gradle这个同步将其与冲突com.google.android.gms gradle混合版本可能会导致运行时崩溃,我的应用程序崩溃的

Firebase API初始化失败.来自com.google.firebase.FirebaseApp.zza(未知来源)的java.lang.reflect.Method.invoke(Native Method)的java.lang.reflect.InvocationTargetException ...

上述错误是由于谷歌播放服务混合(我认为谷歌播放服务gradle可能会被Facebook帐户套件SDK使用),因为我对所有谷歌播放服务的评分都有相同的版本.

还有一个崩溃来自Facebook Account Kit SDK

 java.lang.RuntimeException: Unable to get provider com.facebook.accountkit.internal.AccountKitInitProvider: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.pm.PackageManager android.content.Context.getPackageManager()' on a null object reference
                                                       at android.app.ActivityThread.installProvider(ActivityThread.java:5260)
                                                       at android.app.ActivityThread.installContentProviders(ActivityThread.java:4808)
                                                       at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4748)
                                                       at android.app.ActivityThread.access$1700(ActivityThread.java:153)
                                                       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1436)
                                                       at android.os.Handler.dispatchMessage(Handler.java:102)
                                                       at android.os.Looper.loop(Looper.java:154)
                                                       at android.app.ActivityThread.main(ActivityThread.java:5529)
                                                       at java.lang.reflect.Method.invoke(Native Method)
                                                       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:739)
                                                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:629)
                                                    Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.pm.PackageManager android.content.Context.getPackageManager()' on a null object reference
                                                       at com.facebook.accountkit.internal.Initializer.initialize(Initializer.java:99)
                                                       at com.facebook.accountkit.internal.AccountKitController.initialize(AccountKitController.java:592)
                                                       at com.facebook.accountkit.internal.AccountKitInitProvider.onCreate(AccountKitInitProvider.java:31)
                                                       at android.content.ContentProvider.attachInfo(ContentProvider.java:1758)
                                                       at android.content.ContentProvider.attachInfo(ContentProvider.java:1733)
                                                       at android.app.ActivityThread.installProvider(ActivityThread.java:5257)
                                                       at android.app.ActivityThread.installContentProviders(ActivityThread.java:4808) 
                                                       at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4748) 
                                                       at android.app.ActivityThread.access$1700(ActivityThread.java:153) 
                                                       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1436) 
                                                       at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                       at android.os.Looper.loop(Looper.java:154) 
                                                       at android.app.ActivityThread.main(ActivityThread.java:5529) 
                                                       at java.lang.reflect.Method.invoke(Native Method) 
                                                       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:739) 
                                                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:629) 
Run Code Online (Sandbox Code Playgroud)

但删除后

  compile 'com.facebook.android:account-kit-sdk:4.+'
Run Code Online (Sandbox Code Playgroud)

我的应用程序没有任何问题.但要在我的应用程序中集成Facebook帐户工具包,我必须包括与谷歌游戏服务冲突的gradle.

完全失望,请帮忙.


将Firebase Gradle升级为

compile 'com.google.firebase:firebase-messaging:11.6.0'
Run Code Online (Sandbox Code Playgroud)

它没有碰撞,但仍然RuntimeException从Account Kit SDK 上面给出.

ast*_*ryk 11

要解决此问题,您可以执行以下操作

compile ('com.facebook.android:account-kit-sdk:4.27.0') {
        exclude group: 'com.google.android.gms', module: 'play-services-auth-api-phone'
        exclude group: 'com.google.android.gms', module: 'play-services-auth'
    }
    compile 'com.google.android.gms:play-services-auth:11.6.0'
    compile 'com.google.firebase:firebase-messaging:11.6.0'
Run Code Online (Sandbox Code Playgroud)

这将从Facebook的SDK中删除陈旧的支持gms库,然后交换Firebase使用的相同版本的lib.


Gir*_*hai 2

对于Unable to getprovider RuntimeException异常,似乎应用程序没有首先初始化,Content Providers在它之前初始化。在 Facebook 帐户工具包 SDK 的代码中,它试图获取我的应用程序上下文。

现在的问题是,我确实getApplicationContext()在应用程序类中实现了获取应用程序共享变量的方法,但该变量是全局设置的,并且 Facebook Account Kit sdk 代码获取 Null 应用程序上下文。

解决方案:在onCreate方法中设置共享变量而不是全局设置它解决了无法获取提供程序的问题。

对于混合问题,Account Kit SDK 使用11.0.1版本来播放服务 gradle,在我的项目中,我使用的是11.0.4,这实际上不是问题,因为在编译时 gradle 采用最新的 gradle,但在我的项目中,我没有在下面提及Facebook Account Kit SDK 正在使用的 gradle。

compile 'com.google.android.gms:play-services-auth-api-phone:11.0.1'
Run Code Online (Sandbox Code Playgroud)

解决方案:我已在11.0.4版本中添加了上述 gradle ,并且混合 gradle 问题已得到解决。

compile 'com.google.android.gms:play-services-auth-api-phone:11.0.4'
Run Code Online (Sandbox Code Playgroud)

正如@astryk 所建议的,如果我排除play-services-auth-api-phone模块,则不会显示 gradle 混合错误,但它不包括该模块,因为在AccountKitActivity中的下一个按钮上单击我的应用程序崩溃为

Crash Report Thread:main Exception:java.lang.NoClassDefFoundError: Failed resolution of: Lcom/google/android/gms/auth/api/phone/SmsRetriever;
at com.facebook.accountkit.internal.PhoneLoginController.createSmsToken(PhoneLoginController.java:250)
at com.facebook.accountkit.internal.PhoneLoginController.logIn(PhoneLoginController.java:188)
at com.facebook.accountkit.internal.LoginManager.logInWithPhoneNumber(LoginManager.java:372)
at com.facebook.accountkit.internal.AccountKitController.logInWithPhoneNumber(AccountKitController.java:631)
at com.facebook.accountkit.ui.PhoneLoginFlowManager.logInWithPhoneNumber(PhoneLoginFlowManager.java:57)
at com.facebook.accountkit.ui.ActivityPhoneHandler.onPhoneLoginComplete(ActivityPhoneHandler.java:189)
at com.facebook.accountkit.ui.AccountKitActivity$1.onReceive(AccountKitActivity.java:176)
at android.support.v4.content.LocalBroadcastManager.executePendingBroadcasts(LocalBroadcastManager.java:297)
at android.support.v4.content.LocalBroadcastManager.access$000(LocalBroadcastManager.java:46)
at android.support.v4.content.LocalBroadcastManager$1.handleMessage(LocalBroadcastManager.java:116)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:5529)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:739)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:629)
Caused by: java.lang.ClassNotFoundException: Didn't find class "com.google.android.gms.auth.api.phone.SmsRetriever" on path: DexPathList[[zip file "/data/app/com.myapp-1/base.apk"],nativeLibraryDirectories=[/data/app/com.myappList item -1/lib/arm64, /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)
... 16 more
Suppressed: java.lang.ClassNotFoundException: com.google.android.gms.auth.api.phone.SmsRetriever
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)
... 17 more
Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack trace available`
Run Code Online (Sandbox Code Playgroud)