统一Facebook集成不使用iOS Facebook应用登录
问题描述:
根据iOS SDK文档,Facebook上的IOS登录应首先尝试Facebook应用程序(如果已安装),并且只有在未安装时才回退到Web视图。但是,对于我们的Unity应用程序,它直接打开了Web视图。虽然不重要,但这肯定会伤害用户体验(要求他提供他可能不记得的电子邮件/密码),所以我们调查了它并修复了Unity SDK中的两个错误。统一Facebook集成不使用iOS Facebook应用登录
我在这里分享它,以帮助任何具有同样问题的开发人员,也因为这是Facebook Unity SDK团队的唯一反馈渠道(请纠正我,如果我错了)。
答
这是第一个问题:
症状:Facebook的登录在Unity的iOS设备上的应用程序不使用安装Facebook应用程序的登录,无论“URL方案后缀”是否设置或不“脸谱设置”资产。
原因:FacebookProstprocessor在更新Info.plist时非常害羞,如果它已经存在(在我们的情况下Fiksu后处理器在FB之前放置自己的东西)将不会添加“CFBundleURLTypes”条目。
修复(用自己的路径):
diff --git a/prototype/Assets/Facebook/Editor/iOS/PlistMod.cs b/prototype/Assets/Facebook/Editor/iOS/PlistMod.cs
index 7cd6d38..b5e4876 100644
--- a/prototype/Assets/Facebook/Editor/iOS/PlistMod.cs
+++ b/prototype/Assets/Facebook/Editor/iOS/PlistMod.cs
@@ -89,8 +89,6 @@ namespace UnityEditor.FacebookEditor
*/
- if(!HasKey(dict, "CFBundleURLTypes"))
- {
AddChildElement(doc, dict, "key", "CFBundleURLTypes");
var urlSchemeTop = AddChildElement(doc, dict, "array");
{
@@ -115,7 +113,6 @@ namespace UnityEditor.FacebookEditor
}
}
}
- }
doc.Save(fullPath);
答
第二期
症状:Facebook的登录中,如果“URL方案后缀”设置为不使用安装Facebook应用程序的登录iOS设备上统一应用。
原因:FacebookProstprocessor不会将后缀写入“CFBundleURLTypes”条目。
修复(用自己的路径):
diff --git a/prototype/Assets/Facebook/Editor/FacebookPostprocess.cs b/prototype/Assets/Facebook/Editor/FacebookPostprocess.cs
index b69233f..b299905 100644
--- a/prototype/Assets/Facebook/Editor/FacebookPostprocess.cs
+++ b/prototype/Assets/Facebook/Editor/FacebookPostprocess.cs
@@ -34,7 +34,7 @@ namespace UnityEditor.FacebookEditor
}
project.Save();
- PlistMod.UpdatePlist(path, FBSettings.AppId, FBSettings.AllAppIds);
+ PlistMod.UpdatePlist(path, FBSettings.AppId, FBSettings.AllAppIds, FBSettings.IosURLSuffix);
FixupFiles.FixSimulator(path);
FixupFiles.AddVersionDefine(path);
FixupFiles.FixColdStart(path);
diff --git a/prototype/Assets/Facebook/Editor/iOS/PlistMod.cs b/prototype/Assets/Facebook/Editor/iOS/PlistMod.cs
index f5ca29a..7cd6d38 100644
--- a/prototype/Assets/Facebook/Editor/iOS/PlistMod.cs
+++ b/prototype/Assets/Facebook/Editor/iOS/PlistMod.cs
@@ -44,7 +44,7 @@ namespace UnityEditor.FacebookEditor
return false;
}
- public static void UpdatePlist(string path, string appId, string[] allPossibleAppIds)
+ public static void UpdatePlist(string path, string appId, string[] allPossibleAppIds, string iosUrlSuffix)
{
const string fileName = "Info.plist";
string fullPath = Path.Combine(path, fileName);
@@ -101,7 +101,16 @@ namespace UnityEditor.FacebookEditor
{
foreach(string currAppId in allPossibleAppIds)
{
- AddChildElement(doc, innerArray, "string", "fb" + currAppId);
+ string schema;
+ if (currAppId == appId && iosUrlSuffix != "")
+ {
+ schema = "fb" + currAppId + iosUrlSuffix;
+ }
+ else
+ {
+ schema = "fb" + currAppId;
+ }
+ AddChildElement(doc, innerArray, "string", schema);
}
}
}
虽然我很欣赏,分享答案的努力。请使用正确的格式。如果你有他们,请使用单独的问题。将答案作为实际答案,并在可以时接受答案,以便人们可以看到问题得到解答。不要将问题嵌入问题的答案或答案中,这使得使用该网站变得更加困难。 – EWit 2014-09-26 08:16:08