Facebook UNITY SDK 登录问题

Posted

技术标签:

【中文标题】Facebook UNITY SDK 登录问题【英文标题】:Facebook UNITY SDK login issue 【发布时间】:2013-11-15 10:17:32 【问题描述】:

我刚刚安装了新版本的 Unity 4.3 和新的 facebook sdk,但无法正常工作。

我在 facebook 上创建了应用程序,根据需要将应用程序 ID 复制到统一 facebook 设置,并将包名称和类名称复制回 facebook。

因为 android Key Hash 是空的(即使它不应该是),我使用其他人发布的方法使用 openssl 创建一个。我创建了它并根据需要复制到 facebook。

在此之后,我创建了一个能够登录的小脚本。

// Use this for initialization
void Start () 
    enabled = false;                  
    FB.Init(SetInit, OnHideUnity);  


// Update is called once per frame
void Update () 



private void SetInit()                                                                       
                                                                                            
    FbDebug.Log("SetInit");                                                                  
    enabled = true; // "enabled" is a property inherited from MonoBehaviour                  
    if (FB.IsLoggedIn)                                                                       
                                                                                            
        FbDebug.Log("Already logged in");                                                    
        OnLoggedIn();                                                                        
                                                                                            
                                                                                            

private void OnHideUnity(bool isGameShown)                                                   
                                                                                            
    FbDebug.Log("OnHideUnity");                                                              
    if (!isGameShown)                                                                        
                                                                                            
        // pause the game - we will need to hide                                             
        Time.timeScale = 0;                                                                  
                                                                                            
    else                                                                                     
                                                                                            
        // start the game back up - we're getting focus again                                
        Time.timeScale = 1;                                                                  
                                                                                            
    

void OnGUI()
    if (!FB.IsLoggedIn)                                                                                              
                                                                                                                             
        if (GUI.Button(new Rect(179 , 11, 287, 160), "Login to Facebook"))                                      
                                                                                                                    
            FB.Login("email", LoginCallback);                                                        
                                                                                                                    
        


void LoginCallback(FBResult result)                                                        
                                                                                          
    FbDebug.Log("LoginCallback");                                                          
    Debug.Log("LoginCallback");
    if (FB.IsLoggedIn)                                                                     
                                                                                          
        OnLoggedIn();                                                                      
                                                                                          
                                                                                          

void OnLoggedIn()                                                                          
                                                                                          
    FbDebug.Log("Logged in. ID: " + FB.UserId);                                            
 

现在,当我单击登录按钮时,会出现一个 Facebook 窗口,请求权限,按确定后,它会返回,但我仍然没有登录... 谁能帮忙,这是为什么? 我观察到的另一件奇怪的事情是,只要我单击登录按钮,就会调用 LoginCallback,尽管我认为只有在我给予许可时才会调用它。无论如何,当我给予许可时,它会返回我的应用程序,但什么也没有发生。我可以再次单击登录按钮并发生同样的事情,调用登录回调,它要求权限,我给予权限并返回,没有发生任何事情。有人可以帮忙吗?

【问题讨论】:

请注意来自 Brian 的三张图片:answers.unity3d.com/questions/543540/… 对于 5/2014,问题仍然是 100% 的问题,特别是如果您使用 Mac 进行统一开发。这是整体解决方案,“Rafael 解决方案”:answers.unity3d.com/questions/609810/… 在 AndroidFacebook.cs 中修改 public void OnLoginComplete(string message) 并显示您自己的 keyhash。太棒了! 【参考方案1】:

4.3.6 版的 sdk 应该可以解决这个问题。可在此处获得:https://developers.facebook.com/ 我们仍在等待它在资产商店获得批准,因此目前唯一可以从 Facebook 网站获得它。


注意 - 如果您使用 Mac,它仍然损坏 (5/2014)。只需按照“Rafael 解决方案”,从 public void OnLoginComplete(string message) 中正确发现您的哈希。干杯

【讨论】:

我相信 4.3.6 版本不适用于 unity 4.3,它在为 android 构建时会留下 Win32 异常。我安装了 jdk v1.7 和 android rev 22 .. 你能帮我解决这个问题吗? 如果您碰巧使用 PC 进行 Unity 开发,该问题已部分修复。唯一真正的 100% 解决方案在这里:ttp://answers.unity3d.com/questions/609810/using-facebook-api-with-android-says-login-is-canc.html【参考方案2】:

因此,在不得不追查我手机的钥匙而沮丧了几天之后,我决定调查一下它在做什么。

经过研究发现,当您发布到 android 设备时,facebook 将使用您发布设置中定义的密钥库,而不是您的 .android/debug.keystore 文件。所以我进去并更改了 sdk 以使其以正确的方式工作。本质上,我更改了 SDK 以查看 ProjectSettings 而不是调试目录来获取密钥哈希。在 FacebookAndroidUtils.cs 我添加了以下内容。

// Using the user defined keystore values instead of the debug one.
degbugKeyHash = GetKeyHash( PlayerSettings.Android.keyaliasName, PlayerSettings.Android.keystoreName, PlayerSettings.Android.keyaliasPass, PlayerSettings.Android.keystorePass );

我创建了一个小型 repo,它提供了修复以及一些 gui 更改,以便更轻松地更新密钥哈希。

Github Facebook Unity SDK 6.1 Fix

更新 - 修复了与在字符串路径上转义空格相关的 OS X 错误

希望这会有所帮助!

【讨论】:

【参考方案3】:

把登录功能中的“邮箱”权限去掉试试看。糟糕,我以为我在那里也看到了“publish_actions”权限。

确保清单中的登录活动是纵向的。

【讨论】:

嗨,我发现我只在 Unity 4.3 中遇到问题如果我在 Unity 4.2.2 中重新创建相同的项目,它工作得很好......(唯一奇怪的是它需要两个倍许可) 我们在 unity 4.3 中发现了一些错误。我们现在正在修复它们,并希望尽快准备好新版本。 @benp 是的,它只发生在 unity 4.3 中。 Sdk(v4.2.4) 适用于 unity 4.2 但不适用于 Unity 4.3。我想知道问题出在哪里。此外,Sdk v 4.3.6 甚至没有编译并为 android 构建并在 javac.exe 留下 Win32 异常。你能为我提供关于这个问题的任何帮助吗?我也做了清单部分,但它留下了一个错误并且没有构建。 @user1683989,你用的是什么版本的java? (你的目标是什么?) @benp 感谢您的关注。 JDK 7 64 位。问题已解决。查看链接。 ***.com/questions/21251565/…【参考方案4】:

与其自己实现一切,不如尝试使用免费和开源的 SOOMLA 个人资料插件来满足您的所有社交网络需求: https://github.com/soomla/unity3d-profile

也可以在资产商店下载: https://www.assetstore.unity3d.com/en/#!/content/24601

它涵盖了 Facebook、Twitter 和 Google+,并具有用于登录、发布雕像、上传图像和获取好友列表的统一 API。为了正确披露,我是创始人之一。

【讨论】:

以上是关于Facebook UNITY SDK 登录问题的主要内容,如果未能解决你的问题,请参考以下文章

Android上的Unity Facebook SDK登录错误

使用适用于 Android 的 Facebook Unity SDK 登录 facebook 时应用程序强制关闭

Facebook Unity SDK iOS 登录不使用系统级登录,而是使用浏览器或 Facebook 应用程序

无法登录 / Facebook Unity SDK & Android

Facebook通过iOS中的Facebook SDK通过应用程序登录?

是否可以在不使用 iOS SDK 的情况下集成 Facebook 登录?