简体   繁体   English

OneSignal SDK和Facebook SDK和Unity3D

[英]OneSignal SDK & Facebook SDK & Unity3D

I added to my unity project facebook unity sdk and onesignal unity sdk. 我在我的统一项目中添加了Facebook unity sdk和onesignal unity sdk。 I configured facebook and onesignal. 我配置了facebook和onesignal。

First time, on building, showed such an errors: 第一次在建筑物上显示了这样的错误:

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

In console: 在控制台中:

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()

After this error, I added to AndroidManifest.xml file xmlns:tools="http://schemas.android.com/tools" and I created APK without any errors. 发生此错误后,我将AndroidManifest.xml文件xmlns:tools =“ http://schemas.android.com/tools”添加到Android,并且没有任何错误地创建了APK。 But on device showed such as error! 但是在设备上显示如错误!

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"],

If I remove OneSingal SDK all works correctly! 如果我删除OneSingal SDK,一切正常!

AndroidManifest.xml 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 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 script: 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 version: 2017.1.1f1 Unity3D版本: 2017.1.1f1
OS: MacOS 10.12.6 作业系统: MacOS 10.12.6
Facebook SDK: 7.10.0 Facebook SDK: 7.10.0
OneSignal SDK: 2.4.0 OneSignal SDK: 2.4.0
Android min SDK: 16 Android分钟SDK: 16
Android target SDK: 25 Android目标SDK: 25

Yeah. 是啊。 As @shranet said, Onesignal 2.3.3 works perfectly. 正如@shranet所说,Onesignal 2.3.3可以完美运行。 Latest onesignal uses a new PlayServiceResolver version which isn't used in fb sdk for unity3d 最新的onesignal使用了新的PlayServiceResolver版本,该版本未在unity3d的FB sdk中使用

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM