Facebook UNITY SDK登录问题

时间:2013-11-15 10:17:33

标签: unity3d facebook-login facebook-sdk-3.0 facebook-unity-sdk

我刚刚安装了新版本的Unity 4.3和新的facebook sdk,但我无法使用它。

我在facebook上创建了应用程序,根据需要将app id复制到unity facebook设置,并将Package Name和Class名称复制回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,即使我认为只有在我允许的情况下才应该这样做。无论如何,当我给予许可它返回我的应用程序,没有任何反应。我可以再次单击登录按钮,同样的事情发生,登录回调呼叫,它要求permisions,我给permision并返回,没有任何反应。有人可以帮忙吗?

4 个答案:

答案 0 :(得分:2)

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


注意 - 如果您使用的是Mac,它仍然会损坏(2014年5月)。只需按照“Rafael解决方案”,从public void OnLoginComplete(字符串消息)中正确发现您的哈希。干杯

答案 1 :(得分: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 );

我创建了一个小型仓库,提供修复以及一些gui更改,以便更新密钥哈希更容易。

  

Github Facebook Unity SDK 6.1 Fix

     

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

希望这有帮助!

答案 2 :(得分:0)

从登录功能中取出“电子邮件”权限并尝试使用。哎呀我以为我也看到了“publish_actions”的许可。

确保清单中的loginactivity是纵向的。

答案 3 :(得分:0)

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

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

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