统一Facebook集成不使用iOS Facebook应用登录

问题描述:

根据iOS SDK文档,Facebook上的IOS登录应首先尝试Facebook应用程序(如果已安装),并且只有在未安装时才回退到Web视图。但是,对于我们的Unity应用程序,它直接打开了Web视图。虽然不重要,但这肯定会伤害用户体验(要求他提供他可能不记得的电子邮件/密码),所以我们调查了它并修复了Unity SDK中的两个错误。统一Facebook集成不使用iOS Facebook应用登录

我在这里分享它,以帮助任何具有同样问题的开发人员,也因为这是Facebook Unity SDK团队的唯一反馈渠道(请纠正我,如果我错了)。

+0

虽然我很欣赏,分享答案的努力。请使用正确的格式。如果你有他们,请使用单独的问题。将答案作为实际答案,并在可以时接受答案,以便人们可以看到问题得到解答。不要将问题嵌入问题的答案或答案中,这使得使用该网站变得更加困难。 – EWit 2014-09-26 08:16:08

这是第一个问题:

症状: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); 
          } 
         } 
        }