Facebook仅在编辑器或开发构建(Unity 3D)中登录

时间:2018-03-19 12:36:14

标签: android facebook unity3d facebook-unity-sdk

我对Facebook SDK有疑问。它在编辑器和apk中工作正常(如果我检查Unity中的开发构建选项),但在发布版本中它不起作用。

这是我的代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Facebook.Unity;
using UnityEngine.UI;
using Facebook.MiniJSON;

public class FBManager : MonoBehaviour {

    [SerializeField]private Text FBErrorText;

    public RawImage FBProfilePicture;
    public Image DefaultAvatar;

    public Text UsernameText;
    public Text WelcomeMessage;

    public Button FacebookButton;

    private Color fbProfilePictureColor;
    private Color defaultAvatarColor;

    private string getData;
    private string FBUserName;

    void Awake()
    {
        if (!FB.IsInitialized) 
        {   FBErrorText.text = "fb not ini, initializing";
            FB.Init(InitCallBack, OnHideUnity);
            FBErrorText.text = "called fb.init";
        }
        else
        {   FBErrorText.text += "initialized";
            FB.ActivateApp();
            FBErrorText.text += "called fb.activateApp";
        }

        fbProfilePictureColor = FBProfilePicture.color;
        defaultAvatarColor = DefaultAvatar.color;

        fbProfilePictureColor.a = 0f;
        FBProfilePicture.color = fbProfilePictureColor;
    }

    void Start()
    {
        //StartCoroutine (FbLoginWait ());
    }

    IEnumerator FbLoginWait()
    {
        yield return new WaitUntil (()=> FB.IsInitialized);

        FBLogin ();
    }
    //auto logare

    private void InitCallBack()
    {
        if (FB.IsInitialized) 
        {
            //UsernameText.text = "Initialized FB SDK";
            FBErrorText.text = "fb is initialized";
            FB.ActivateApp ();
            FBErrorText.text = "fb activated app";
        } 
        else 
        {
            FBErrorText.text = "Failed to initialize the Facebook SDK";
            Debug.Log ("Failed to initialize the Facebook SDK");
        }
    }

    private void OnHideUnity(bool isGameShown)
    {
        if (!isGameShown) 
        {
            Time.timeScale = 0;     
        } 
        else 
        {
            Time.timeScale = 1;
        }
    }

    private void HandleLoginFB(bool IsLogged)
    {
        if (IsLogged) 
        {
            FBErrorText.text = "user logged in";
            Debug.Log ("User logged in");
        }
        else 
        {
            FBErrorText.text = "user cancelled login";
            Debug.Log ("User cancelled login");
        }
    }

    private void AuthCallback(IResult result)
    {
        FBErrorText.text = "called authcallback";
        HandleLoginFB (FB.IsLoggedIn);
        FBErrorText.text = "handling fb";

        if (FB.IsLoggedIn) 
        {
            var aToken = Facebook.Unity.AccessToken.CurrentAccessToken;
            Debug.Log (aToken.UserId);
            foreach (string perm in aToken.Permissions) {
                Debug.Log (perm);
            }

            FB.API ("/me/picture?type=square&height=50&width=50", HttpMethod.GET, UpdateProfileImage);
            FB.API ("me?fields=name", HttpMethod.GET, GetUsername);

            FBErrorText.text = "fb is logged in";
        } 
        else 
        {
            FBErrorText.text = "fb is not logged in";
        }
    }

    public void FBLogin()
    {
        FBErrorText.text = "called fblogin";
        List<string> perms = new List<string> () { "public_profile, email", "user_friends" };
        FBErrorText.text = "created perms";
        FB.LogInWithReadPermissions (perms, AuthCallback);
        FBErrorText.text = "ended fblogin";
    }

    private void UpdateProfileImage(IGraphResult result) 
    {
        if(result.Texture != null) 
        {
            FBProfilePicture.texture = result.Texture;

            defaultAvatarColor.a = 0f;
            fbProfilePictureColor.a = 255f;

            DefaultAvatar.color = defaultAvatarColor;
            FBProfilePicture.color = fbProfilePictureColor;
        }
    }

    private void GetUsername(IGraphResult result)
    {
        FBUserName = result.ResultDictionary ["name"].ToString ();
        UsernameText.text = FBUserName;

        WelcomeMessage.text = FBUserName + "'s NET WORTH";
    }
}

(或此处的代码https://hastebin.com/osatiketij.cs

屏幕上显示的最后一个错误文本是:“created perms”,因此在调用FB.LogInWithReadPermissions方法之前,之后不会出现错误文本,但也没有登录。

知道它可能是什么吗?

1 个答案:

答案 0 :(得分:1)

对于每个人来到这个主题:我是如何设法解决这个问题的方法是使用Android Studio来查看Logcat为什么它不起作用,而且它是&#34;缺少&#34;一类。对于来这里的人,我通过添加&#34; -keep class com.facebook来修复它。** {*;}&#34;到我的proguard用户文件。