【发布时间】:2014-12-23 01:58:11
【问题描述】:
我想将 Facebook 登录功能添加到我的应用程序中。请注意:
- 我不想使用 Facebook 登录按钮小部件。
- 我将去年正常工作的代码(从我的其他项目)复制粘贴到我的新项目中。
- 我检查了Session页面,我想我没有问题。
唯一的区别是 Request.executeMeRequestAsync() hss 更改为 Request.newMeRequest()。我做了这个更改,但似乎我的会话总是关闭,尽管我可以看到 Session.setActiveSession(session); 方法通过项目调试运行。所以,真的不知道为什么session 在call() 方法中总是很接近。
任何想法将不胜感激。谢谢。
我的代码:
public class FacebookLogin extends FragmentActivity
{
private static final String TAG = "FacebookLogin";
private static final List<String> READ_PERMISSIONS =
Arrays.asList("email", "user_about_me", "user_photos");
// private static final List<String> WRITE_PERMISSIONS = Arrays.asList("");
private final Session.StatusCallback statusCallback = new Session.StatusCallback()
{
@Override
public void call(final Session session, SessionState state, Exception exception)
{
if (session.isOpened())
{
// make request to the /me API
Request request = Request.newMeRequest(session, new Request.GraphUserCallback()
{
// callback after Graph API response with user object
@Override
public void onCompleted(GraphUser user, Response response)
{
if (user != null)
{
MyLog.d(TAG, "User name: " + user.getName() + "!, Login successfully :)");
MyLog.d(TAG, "User id: " + user.getId());
MyLog.d(TAG, "Access token is: " + session.getAccessToken());
MyLog.d(TAG, "Application id: " + session.getApplicationId());
MyLog.d(TAG, "JSON Object: " + user.getInnerJSONObject());
SpStorage.setKeyFacebook(FacebookLogin.this, session.getAccessToken());
SpStorage.setFacebookUserId(FacebookLogin.this, user.getId());
// erson person = parseJSON(user.getInnerJSONObject().toString());
// registerUser();
// Close activity
FacebookLogin.this.finish();
}
}
});
request.executeAsync();
}
else if (state.isClosed()) {
MyLog.d(TAG, "Facebook session closed");
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
// Find device hash key (should not be used in production)
// printHashKey();
// start Facebook Login
openActiveSession(this, true, statusCallback, READ_PERMISSIONS);
}
private static Session openActiveSession(Activity activity, boolean allowLoginUI,
Session.StatusCallback callback, List<String> permissions)
{
Session.OpenRequest openRequest = new Session
.OpenRequest(activity)
.setPermissions(permissions)
.setCallback(callback);
Session session = new Session.Builder(activity).build();
if (SessionState.CREATED_TOKEN_LOADED.equals(session.getState()) || allowLoginUI)
{
Session.setActiveSession(session);
session.openForRead(openRequest);
return session;
}
return null;
}
}
我在 logcat 中得到的:
Facebook session closed
【问题讨论】:
-
这是你的完整片段课程吗?您似乎没有覆盖 onActivityResult 方法并将其传递给会话,这对于进行登录至关重要。
-
谢谢@MingLi。你是对的我忘了在我的活动中添加那个方法。请写下您的评论作为答案,然后我会接受它;)
标签: android facebook session facebook-graph-api