1

我刚刚安装了新版本的 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,尽管我认为只有在我给予许可时才会调用它。无论如何,当我给予许可时,它会返回我的应用程序,但什么也没有发生。我可以再次单击登录按钮并发生同样的事情,调用登录回调,它要求权限,我给予权限并返回,没有发生任何事情。有人可以帮忙吗?

4

4 回答 4

2

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


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

于 2013-12-04T23:38:33.480 回答
1

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

经过一些研究发现,当您发布到 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 修复

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

希望这可以帮助!

于 2014-05-22T13:43:35.337 回答
0

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

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

于 2013-11-15T17:12:59.660 回答
0

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

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

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

于 2015-02-22T18:24:35.210 回答