gpt4 book ai didi

android - 适用于 Unity Android 的 Facebook SDK - 生成的 list 文件不正确,无法登录

转载 作者:行者123 更新时间:2023-11-29 00:25:24 25 4
gpt4 key购买 nike

好的,这已经花了一个多星期,但我终于找到了为什么我似乎无法在我的安卓设备上使用带有 Unity3d (v4.3) 的 Facebook SDK (v4.3.4) 登录 facebook 的原因.现在想知道如何修复它...?

症状:我在 android 设备上运行该应用程序。当我按下登录按钮时,它会打开来自 facebook 的权限提示。然后……什么都没有。登录未完成,通过查看日志,很明显没有调用 LoginCallback。 (尽管 Facebook appcenter 确实记录了您已授予该应用程序权限)。如果我要求多个权限,它只会提示第一个。 (通常它会提示第一个,似乎瞬间返回到应用程序,然后再次提示第二个)。

原因: list 文件生成不正确。

这是正确生成 FriendSmash 的一个 list 文件的示例:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:theme="@android:style/Theme.NoTitleBar" android:versionCode="1" android:versionName="1.0" package="com.mycompany.mygame" android:installLocation="preferExternal">
<supports-screens android:anyDensity="true" android:largeScreens="true" android:normalScreens="true" android:smallScreens="true" android:xlargeScreens="true" />
<application android:icon="@drawable/app_icon" android:label="@string/app_name" android:debuggable="true">
<activity android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen" android:label="@string/app_name" android:launchMode="singleTask" android:name="com.facebook.unity.FBUnityPlayerActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen" android:label="@string/app_name" android:launchMode="singleTask" android:name="com.unity3d.player.UnityPlayerActivity">
</activity>
<activity android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen" android:label="@string/app_name" android:launchMode="singleTask" android:screenOrientation="reverseLandscape" android:name="com.mycompany.mygame.UnityPlayerNativeActivity">
<meta-data android:name="unityplayer.ForwardNativeEventsToDalvik" android:value="false" />
</activity>
<activity android:configChanges="keyboardHidden|orientation" android:name="com.facebook.LoginActivity" android:screenOrientation="portrait">
</activity>
<meta-data android:name="com.facebook.sdk.ApplicationId" android:value="\ 586438214724597" />
</application>
<uses-sdk android:minSdkVersion="9" android:targetSdkVersion="19" />
<uses-feature android:glEsVersion="0x00020000" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-feature android:name="android.hardware.touchscreen" />
<uses-feature android:name="android.hardware.touchscreen.multitouch" android:required="false" />
<uses-feature android:name="android.hardware.touchscreen.multitouch.distinct" android:required="false" />
</manifest>

这是 FriendSmash 生成错误时的 list 文件示例:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:theme="@android:style/Theme.NoTitleBar" android:versionCode="1" android:versionName="3.0" package="com.mycompany.mygame" android:installLocation="preferExternal">
<supports-screens android:anyDensity="true" android:largeScreens="true" android:normalScreens="true" android:smallScreens="true" android:xlargeScreens="true" />
<application android:icon="@drawable/app_icon" android:label="@string/app_name" android:debuggable="true">
<activity android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen" android:label="@string/app_name" android:launchMode="singleTask" android:screenOrientation="reverseLandscape" android:name="com.mycompany.mygame.UnityPlayerNativeActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<meta-data android:name="unityplayer.ForwardNativeEventsToDalvik" android:value="false" />
</activity>
<activity android:configChanges="keyboardHidden|orientation" android:name="com.facebook.LoginActivity" android:screenOrientation="portrait">
</activity>
<meta-data android:name="com.facebook.sdk.ApplicationId" android:value="\ 586438214724597" />
</application>
<uses-sdk android:minSdkVersion="9" android:targetSdkVersion="19" />
<uses-feature android:glEsVersion="0x00020000" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-feature android:name="android.hardware.touchscreen" />
<uses-feature android:name="android.hardware.touchscreen.multitouch" android:required="false" />
<uses-feature android:name="android.hardware.touchscreen.multitouch.distinct" android:required="false" />
</manifest>

两个主要区别:(1) 正确 list 文件的主要 Activity 命名为“com.facebook.unity.FBUnityPlayerActivity”,错误文件的主要 Activity 命名为“com.mycompany.mygame.UnityPlayerNativeActivity”,以及 (2)正确的文件也有一个“com.unity3d.player.UnityPlayerActivity”和“com.mycompany.mygame.UnityPlayerNativeActivity”出现在它后面。

但不幸的是,大多数时候,Unity 生成的文件版本不正确。我已经用 FriendSmash 游戏对其进行了测试,测试了一个添加了 facebook sdk 的自定义应用程序,并测试了另一个仅包含 facebook SDK 的示例应用程序(所有这些都在 windows 和 mac 上)。他们都生成了错误的版本,除了偶然,我第一次下载 FriendSmash 完整项目。当我下载新鲜的 FriendSmash 以在 mac 上进行测试时,它也开始错误地生成文件。

此外,如果您只是尝试统一构建 apk 文件而不创建 Google Android 项目,它会使用错误的 list 并构建损坏的应用。

解决方案:不知道。有人对如何解决这个问题有任何想法吗?

最佳答案

好的,看来新版本示例项目和新 SDK 统一包中提供的 list 文件用于构建 Google Android 项目使用的自定义 list 文件。它一定是更新不正确并且是导致问题的原因。

要修复,在导入 Facebook SDK 后,只需将 Assets/Plugins/Android/AndroidManifest.xml 中的文件替换为旧版本:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.unity3d.player" android:installLocation="preferExternal" android:theme="@android:style/Theme.NoTitleBar" 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:icon="@drawable/app_icon" android:label="@string/app_name" android:debuggable="true">
<activity android:name="com.facebook.unity.FBUnityPlayerActivity" android:launchMode="singleTask" android:label="@string/app_name" android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name="com.unity3d.player.UnityPlayerActivity" android:launchMode="singleTask" android:label="@string/app_name" android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen">
</activity>
<activity android:name="com.unity3d.player.UnityPlayerNativeActivity" android:launchMode="singleTask" android:label="@string/app_name" android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen">
<meta-data android:name="unityplayer.ForwardNativeEventsToDalvik" android:value="false" />
</activity>
<activity android:name="com.facebook.LoginActivity" android:screenOrientation="portrait" android:configChanges="keyboardHidden|orientation">
</activity>
<meta-data android:name="com.facebook.sdk.ApplicationId" android:value="\ 586438214724597" />
</application>
</manifest>

我还没有通过构建新的 Google Android 项目对此进行测试,但我能够直接构建 apk 文件并在手机上运行它。

关于android - 适用于 Unity Android 的 Facebook SDK - 生成的 list 文件不正确,无法登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20012728/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com