使用Android SDK重新打开Facebook会话

时间:2015-02-27 13:11:17

标签: android facebook-android-sdk

我正在努力处理这种情况:

  1. 用户按Facebook登录:
  2. 用户在Facebook登录页面按下取消;
  3. 用户再次按Facebook登录;
  4. 我遇到的问题是我无法将应用程序ID作为资源提供,因此我使用它来创建facebook会话:

    mFacebookSession = Session.getActiveSession();
    if (mFacebookSession == null)
    {
        mFacebookSession = new Session.Builder(m_activity).setApplicationId(fbAppId).build();
        Session.setActiveSession(mFacebookSession);
    
        mFacebookStatusCallback = new FacebookStatusCallback(mFacebookSession, mFacebookWrapper);
    }
    

    要打开会话,我使用:

    if (!mFacebookSession.isOpened() && !mFacebookSession.isClosed())
    {
        Session.OpenRequest openRequest = new Session.OpenRequest(mActivity).setCallback(mFacebookStatusCallback);
        openRequest.setPermissions(Arrays.asList("user_birthday", "email"));
        mFacebookSession.openForPublish(openRequest); //tried with openForRead too
    }
    else
    {
        Session.openActiveSession(mActivity, true, Arrays.asList("user_birthday", "email"), mFacebookStatusCallback);
    }
    

    一切都应该没问题,但因为我没有在资源中提供facebook app id,所以我明白了:

    02-27 14:53:55.011: E/AndroidRuntime(17294): java.lang.NullPointerException: Argument 'applicationId' cannot be null
    02-27 14:53:55.011: E/AndroidRuntime(17294):    at com.facebook.internal.Validate.notNull(Validate.java:29)
    02-27 14:53:55.011: E/AndroidRuntime(17294):    at com.facebook.Session.<init>(Session.java:281)
    02-27 14:53:55.011: E/AndroidRuntime(17294):    at com.facebook.Session.<init>(Session.java:270)
    02-27 14:53:55.011: E/AndroidRuntime(17294):    at com.facebook.Session$Builder.build(Session.java:1822)
    02-27 14:53:55.011: E/AndroidRuntime(17294):    at com.facebook.Session.openActiveSession(Session.java:1130)
    02-27 14:53:55.011: E/AndroidRuntime(17294):    at com.facebook.Session.openActiveSession(Session.java:1041)
    

    我需要提一下,在步骤3(第二次登录尝试)中抛出异常。第一次尝试登录有效。 任何人都可以告诉我如何提供applicationId,以便在尝试打开活动会话时不会出现错误? 处理取消的例外时我应该做些什么特别的事吗?我目前正在祝贺该行动被取消。

    因为我被要求发布清单,我会提到我在其中有facebook活动:

    <activity
        android:name="com.facebook.LoginActivity"
        android:label="@string/app_name" >
    </activity>
    

1 个答案:

答案 0 :(得分:0)

一年多前使用我自己的answers找到了问题和解决方案。

我改变了打开会话的方式:

if (!mFacebookSession.isOpened())
{
    if(mFacebookSession.isClosed())
    {
        mFacebookSession = new Session.Builder(m_activity).setApplicationId(fbAppId).build();
        Session.setActiveSession(mFacebookSession);
    }
    Session.OpenRequest openRequest = new Session.OpenRequest(mActivity).setCallback(mFacebookStatusCallback);
    openRequest.setPermissions(Arrays.asList("user_birthday", "email"));
    mFacebookSession.openForRead(openRequest);
}
else
{
    Session.openActiveSession(mActivity, true, Arrays.asList("user_birthday", "email"), mFacebookStatusCallback);
}