使用 Android SDK 重新打开 facebook 会话
Reopen facebook session using Android SDK
我正在努力处理这种情况:
- 用户按下使用 Facebook 登录:
- 用户在 Facebook 登录页面中按下取消;
- 用户再次按下“使用 Facebook 登录”;
我遇到的问题是我无法将应用程序 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 应用程序 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 以便在尝试打开活动会话时不会出现该错误?
处理取消的异常时我应该做些什么特别的事情吗?我目前正在祝酒操作被取消。
因为我被要求 post 清单,所以我会提到我在里面有 facebook activity:
<activity
android:name="com.facebook.LoginActivity"
android:label="@string/app_name" >
</activity>
使用一年多前我自己的 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);
}
我正在努力处理这种情况:
- 用户按下使用 Facebook 登录:
- 用户在 Facebook 登录页面中按下取消;
- 用户再次按下“使用 Facebook 登录”;
我遇到的问题是我无法将应用程序 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 应用程序 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 以便在尝试打开活动会话时不会出现该错误? 处理取消的异常时我应该做些什么特别的事情吗?我目前正在祝酒操作被取消。
因为我被要求 post 清单,所以我会提到我在里面有 facebook activity:
<activity
android:name="com.facebook.LoginActivity"
android:label="@string/app_name" >
</activity>
使用一年多前我自己的 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);
}