Unity Facebook SDK не сохраняет предыдущий сеанс входа в систему

Я разрабатываю поддержку «Войти через Facebook» в своей игре с официальным SDK Unity Facebook. На самом деле я использую бета-версию 6.1 (но эта проблема присутствует и в стабильной версии 6.0).

Пользователь может успешно войти в систему, а затем я могу делать запросы FB API. Проблема в том, что FB SDK не сохраняет сеанс, так как когда вы закрываете приложение и запускаете его снова, значение FB.IsLoggedIn равно false.

Он не работает ни на одной платформе: Editor, iOS и Android.

Примечание. Свойство Status в настройках Facebook уже отмечено.

Вот как я это реализовал:

FacebookController.cs

void Awake()
{
    if (instance == null)
    {
        DontDestroyOnLoad(gameObject);
        instance = this;

        FB.Init(OnFacebookInit);
    } else if (instance != this)
    {
        Destroy(gameObject);
    }
}

void OnFacebookInit()
{
    if (FB.IsLoggedIn)
    {
        FBIsLoggedIn();
    }
}

public void LoginWithFacebook(OnUserAuthenticated _userAuthCallback)
{
    userAuthCallback = _userAuthCallback;
    FB.Login("email, user_friends", AuthCallback);
}

void AuthCallback(FBResult result)
{
    if (FB.IsLoggedIn)
    {
        FBIsLoggedIn();
    } else
    {
        Debug.Log("User cancelled login");
    }
}

void FBIsLoggedIn()
{
    FB.API("me", Facebook.HttpMethod.GET, UserCallBack);
    FB.API("me/friends", Facebook.HttpMethod.GET, FriendsCallback);
}

Нужно ли мне добавить какой-то код, чтобы FB сохранил действительный сеанс?

Заранее спасибо!


person Arol    schedule 03.12.2014    source источник
comment
Есть успехи в этом? У меня такая же проблема.   -  person Ryan H.    schedule 11.12.2014
comment
Привет, Райан, да! Моя проблема заключалась в том, что я ожидал, что facebook сохранит сеанс в редакторе, когда это не так. Попробуйте протестировать его на конкретной платформе и убедитесь, что вы получаете визуальную обратную связь, если пользователь вошел в систему. В моем предыдущем примере, т.е. попробуйте отключить кнопку входа через fb в методе UserCallback.   -  person Arol    schedule 12.12.2014
comment
Спасибо Арол. Я развернул на iPad, и он работает, как и ожидалось. Жаль, что в редакторе тоже не работает.   -  person Ryan H.    schedule 13.12.2014


Ответы (2)


Моя проблема заключалась в том, что я ожидал, что facebook сохранит сеанс в редакторе, когда это не так.

Когда вы встраиваете его в устройство, FB SDK успешно запоминает последний действительный сеанс. В моем примере моя ошибка заключалась в том, что я не давал обратную связь пользовательскому интерфейсу. FB.IsLoggedIn вернул true, но я решил эту проблему, изменив состояние кнопки входа в FB в моем методе UserCallBack.

Надеюсь, это поможет вам!

person Arol    schedule 13.12.2014

У меня такая же проблема с моей системой входа. Однако‹ я решил, что это вызывает ту же функцию, когда пользователь нажимает «войти через Facebook». Затем я сохранил переменную в словаре редактора Unity, чтобы знать, что это вход в Facebook:

PlayerPrefs.SetString("ISFACEBOOK", true);

Наконец, я добавил небольшую проверку в FB.Init(), чтобы проверить, есть ли у редактора этот ключ.

private void InitCallback () { if (FB.IsInitialized) { FB.ActivateApp(); Debug.Log("[Initcallback]activateApp");

        if (true == PlayerPrefs.HasKey("ISFACEBOOK") {
            //normal login
            FacebookLoginButton();
        }
    } 
    else 
    {
        SetMessage("Failed to Initialize the Facebook SDK");
    }

Если пользователь выходит из системы, я удаляю переменную из редактора.

Я знаю, что это дешевый способ решить проблему, но API Facebbok требует вызова либо FB.LogInWithPublishPermissions, либо FB.LogInWithReadPermissions.

Надеюсь, это поможет вам.

person Cabrra    schedule 07.04.2016