facebook - OneSignal SDK & Facebook SDK & Unity3D

标签 facebook unity-game-engine onesignal

我在我的 Unity 项目中添加了 facebook unity sdk 和 onesignal unity sdk。 我配置了 facebook 和 onesignal。

第一次在构建时显示这样的错误:

Build failure
Unable to merge android manifests. See the Console for more details.

在控制台中:

Error: Error while saving blame file, build will continue
Error: The prefix "tools" for attribute "tools:overrideLibrary" associated with an element type "uses-sdk" is not bound.

UnityEditor.HostView:OnGUI()

出现此错误后,我将 xmlns:tools="http://schemas.android.com/tools"添加到 AndroidManifest.xml 文件中,并且创建了 APK,没有任何错误。但在设备上显示诸如错误!

09-21 17:36:32.321 25682 25702 V com.facebook.unity.FB: SetUserAgentSuffix(Unity.7.10.0)
09-21 17:36:32.391 25682 25702 E Unity   : AndroidJavaException: java.lang.NoClassDefFoundError: Failed resolution of: Lcom/facebook/FacebookActivity;
09-21 17:36:32.391 25682 25702 E Unity   : java.lang.NoClassDefFoundError: Failed resolution of: Lcom/facebook/FacebookActivity;
09-21 17:36:32.391 25682 25702 E Unity   :  at com.facebook.internal.Validate.hasFacebookActivity(Validate.java:216)
09-21 17:36:32.391 25682 25702 E Unity   :  at com.facebook.FacebookSdk.sdkInitialize(FacebookSdk.java:265)
09-21 17:36:32.391 25682 25702 E Unity   :  at com.facebook.unity.FB.Init(FB.java:86)
09-21 17:36:32.391 25682 25702 E Unity   :  at com.unity3d.player.UnityPlayer.nativeRender(Native Method)
09-21 17:36:32.391 25682 25702 E Unity   :  at com.unity3d.player.UnityPlayer.c(Unknown Source)
09-21 17:36:32.391 25682 25702 E Unity   :  at com.unity3d.player.UnityPlayer$c$1.handleMessage(Unknown Source)
09-21 17:36:32.391 25682 25702 E Unity   :  at android.os.Handler.dispatchMessage(Handler.java:98)
09-21 17:36:32.391 25682 25702 E Unity   :  at android.os.Looper.loop(Looper.java:148)
09-21 17:36:32.391 25682 25702 E Unity   :  at com.unity3d.player.UnityPlayer$c.run(Unknown Source)
09-21 17:36:32.391 25682 25702 E Unity   : Caused by: java.lang.ClassNotFoundException: Didn't find class "com.facebook.FacebookActivity" on path: DexPathList[[zip file "/data/app/.../base.apk"],

如果我删除 OneSingal SDK 一切正常!

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" package="com.unity3d.player" android:installLocation="preferExternal" android:versionCode="1" android:versionName="1.0">
<supports-screens android:smallScreens="true" android:normalScreens="true" android:largeScreens="true" android:xlargeScreens="true" android:anyDensity="true" />
<application android:theme="@android:style/Theme.NoTitleBar.Fullscreen" android:icon="@drawable/app_icon" android:label="@string/app_name" android:debuggable="true">
    <activity android:name="com.unity3d.player.UnityPlayerActivity" android:label="@string/app_name">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
    <meta-data android:name="unityplayer.UnityActivity" android:value="true" />
    </activity>
    <activity android:name="com.facebook.unity.FBUnityLoginActivity" android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen" android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen" />
    <activity android:name="com.facebook.unity.FBUnityDialogsActivity" android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen" android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen" />
    <activity android:name="com.facebook.unity.FBUnityAppLinkActivity" android:exported="true" />
    <activity android:name="com.facebook.unity.FBUnityDeepLinkingActivity" android:exported="true" />
    <activity android:name="com.facebook.unity.FBUnityGameRequestActivity" />
    <activity android:name="com.facebook.unity.FBUnityCreateGameGroupActivity" />
    <activity android:name="com.facebook.unity.FBUnityJoinGameGroupActivity" />
    <activity android:name="com.facebook.unity.AppInviteDialogActivity" />
    <meta-data android:name="com.facebook.sdk.ApplicationId" android:value="fb149293168895610" />
    <provider android:name="com.facebook.FacebookContentProvider" android:authorities="com.facebook.app.FacebookContentProvider149293168895610" android:exported="true" />
</application>
</manifest>

OneSignal/AndroidManifest.xml

<!--
WARNING: Do NOT Modify! Changes will be overwritten by the OneSignal plugin.
            Make your changes to Assets/Plugins/Android/AndroidManifest.xml instead.
-->

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.onesignal.onesignalsdk"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk android:minSdkVersion="9" />

    <permission android:name="com.challenges_inc.realmultiplayerracing.permission.C2D_MESSAGE" android:protectionLevel="signature" />
    <uses-permission android:name="com.challenges_inc.realmultiplayerracing.permission.C2D_MESSAGE" />
    <application>
    <receiver
            android:name="com.onesignal.GcmBroadcastReceiver"
            android:permission="com.google.android.c2dm.permission.SEND" >
            <intent-filter>
                <action android:name="com.google.android.c2dm.intent.RECEIVE" />
                <category android:name="com.challenges_inc.realmultiplayerracing" />
            </intent-filter>
        </receiver>
    </application>
</manifest>

Unity3d 脚本:

void Start() {
    FacebookInit ();
}

private void FacebookInit() {
    if (!FB.IsInitialized) {
        FB.Init (InitCallback, OnHideUnity);
    } else {
        InitCallback ();
    }
}

private void InitCallback () {
    if (FB.IsInitialized) {
        Debug.Log("Initialized the Facebook SDK");

        FB.ActivateApp ();

        if (FB.IsLoggedIn) {                
            OneSignalHandler();
        } else {
            Debug.Log("FB.IsLoggedIn is false");
        }
    } else {
        Debug.Log("Failed to Initialize the Facebook SDK");
    }
}

private void OnHideUnity (bool isGameShown) {
    //...
}

public void OnClickConnectToFacebook() {
    FB.LogInWithReadPermissions(new List<string>(){"public_profile", "email", "user_friends"}, AuthCallback);
}

private void AuthCallback (ILoginResult result) {
    if (FB.IsLoggedIn) {
        OneSignalHandler();
    } else {
        Debug.Log("FB.IsLoggedIn is false");
    }
}

void OneSignalHandler() {
    OneSignal.SetLogLevel(OneSignal.LOG_LEVEL.INFO, OneSignal.LOG_LEVEL.INFO);

    string user_id = Facebook.Unity.AccessToken.CurrentAccessToken.UserId;
    Debug.Log ("UserID: " + user_id);

    OneSignal.StartInit("ONE-SIGNAL-APP-ID")
        .EndInit();
    OneSignal.SendTag ("user_id", user_id);
    OneSignal.inFocusDisplayType = OneSignal.OSInFocusDisplayOption.Notification;
}

Unity3D版本:2017.1.1f1
操作系统:MacOS 10.12.6
Facebook SDK:7.10.0
OneSignal SDK:2.4.0
Android 最小 SDK:16
Android 目标 SDK:25

最佳答案

是的。正如@shranet 所说,Onesignal 2.3.3 运行完美。 最新的onesignal使用了新的PlayServiceResolver版本,该版本未在unity3d的fb sdk中使用

关于facebook - OneSignal SDK & Facebook SDK & Unity3D,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46344547/

相关文章:

javascript - AngularJS Controller 中的 OneSignal 推送通知句柄

ios - Swift onesignal 我可以让我的应用程序同时支持 ios 9 和 ios 10 通知吗

facebook - Firebase SSO 身份验证在应用程序浏览器中的 Facebook 中不起作用

django - Python-social-auth:禁用自动注册新用户

c# - 尝试使用在 Graph API Explorer 中生成的访问 token 会产生不正确的权限

unity-game-engine - 如何统一比较两个 Sprite 纹理

unity-game-engine - 使用 setPixel() 时出现错误结果

flutter - 如何在 onesignal 通知上打开特定页面单击 flutter?

Facebook Open Graph 多张图像不显示在 Feed 中

android - 即使有 Intent 过滤器,我的应用程序在共享对话框中也不可见