내 유니티 프로젝트 Facebook 유니티 SDK 및 시그널 유니티 SDK에 추가했습니다. 나는 facebook과 onesignal을 구성했다.OneSignal SDK 및 Facebook SDK 및 Unity3D
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()
, 나는의 AndroidManifest.xml 파일의 xmlns에 추가 : 도구 = "HTTP를 : //schemas.android.com/tools "와 오류없이 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
OS : 맥 OS 10.12.6
페이스 북 SDK : 7.10.0
OneSignal SDK : 2.4.0
안드로이드 분 SDK : 16
안드로이드 대상 SDK : 25
OneSignal 2.3.3으로 다운 그레이드되어 모든 것이 올바르게 작동합니다! – shranet
Windows 환경에서 구축 할 때와 동일한 환경 설정을 사용하여 문제를 재현하려고했지만 불가능했습니다. 나도'uses-sdk' 오류로 실행되지 않았습니다. 다른 플러그인에서 발생했을 수도 있습니다. facebook plugin (그냥 가져온 것)을 초기화하려고 시도하지 않았지만'com.facebook.FacebookActivity' 클래스는 APK의 classes.dex 파일에 존재했다. facebook 플러그인을 다시 가져온 다음 OneSignal 2.4.0 플러그인을 다시 가져 오는 것이 좋습니다. 여전히 문제가있는 경우 새로운 Unity 프로젝트를 작성하여 facebook 및 OneSignal로 문제를 재현하는 것이 좋습니다. – jkasten
Facebook SDK의 PlayServiceResolver를 사용하고 처음부터 OneSignler SKD의 PlayServiceResolver를 처음 사용합니다. – shranet