- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 Facebook SDK 中提供的 LoginButton 类在我的 Android 应用程序中实现 Facebook 登录。按照说明进行操作后一切正常here .我在我的应用程序中做的唯一不同的事情是,我在 fragment 上添加了登录按钮而不是 Activity 本身,以避免用大量代码污染登录 Activity 。但这里有一个问题:我想获取用户的公开个人资料信息。我使用 Profile.getCurrentProfile()
调用来做到这一点。完整代码如下:
// Called in onCreate:
private void attemptLogin() {
mCallbackManager = CallbackManager.Factory.create();
FacebookCallback<LoginResult> mFacebookCallback = getFacebookCallback();
mLoginButton.registerCallback(mCallbackManager, mFacebookCallback);
}
mFacebookCallback 代码是这样的:
private FacebookCallback<LoginResult> getFacebookCallback() {
return new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
mProfileTracker = new ProfileTracker() {
@Override
protected void onCurrentProfileChanged(Profile oldProfile, Profile currentProfile) {
if (currentProfile != null && oldProfile != null) {
mProfile = currentProfile;
// Get the new email and fire the home page of the activity, when email is available
requestUserEmail();
}
mProfileTracker.stopTracking();
}
};
mProfileTracker.startTracking();
if (null != loginResult.getAccessToken()) {
String userId = loginResult.getAccessToken().getUserId();
Log.d(TAG, "Successfully Logged-In to Facebook");
Toast.makeText(getActivity(), "Logged-In to Facebook:" + userId, Toast.LENGTH_SHORT).show();
mProfile = Profile.getCurrentProfile();
// Now that login is successful, email can be requested
requestUserEmail();
}
}
@Override
public void onCancel() {
// App code
Log.d(TAG, "Cancelled Log-In to Facebook");
Toast.makeText(getActivity(), "Cancelled Log-In to Facebook", Toast.LENGTH_SHORT).show();
}
@Override
public void onError(FacebookException exception) {
// App code
Log.d(TAG, "Error while Logging-In to Facebook");
Toast.makeText(getActivity(), "Error while Logging-In to Facebook", Toast.LENGTH_SHORT).show();
}
};
}
我获得了 AccessToken,甚至电子邮件都很好。但对于应用程序的首次安装,Profile.getCurrentProfile() 始终返回 null。
我还观察到 onCurrentProfileChanged()
从未真正被调用,因为我期望它在第一次尝试登录时被调用。我不确定 onCurrentProfileChanged()
相关代码是否应该在 onSuccess()
中。但根据问题 here,人们似乎更幸运地这样做了.
我在这里做错了什么?我需要做什么才能确保在第一时间获得个人资料信息?
最佳答案
经过几分钟的调试,我发现了明显的问题。在下面的代码中:
if (currentProfile != null && oldProfile != null) {
mProfile = currentProfile;
// Get the new email and fire the home page of the activity, when email is available
requestUserEmail();
}
第一次,oldProfile 始终为空。因此,mProfile 永远不会设置为当前配置文件。
其次,我不确定它是否有任何不同,但改变
mLoginButton.setReadPermissions(Arrays.asList("user_friends", EMAIL));
到
mLoginButton.setReadPermissions(Arrays.asList("public_profile", "user_friends", EMAIL));
可能有帮助。
此外,为了完成,仅在 onCurrentProfileChanged
中请求电子邮件(在这种情况下调用 requestUserEmail()
函数)就足够了
关于android - Facebook SDK : Why does Profile. getCurrentProfile() 总是第一次返回 null?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30425442/
我是一名优秀的程序员,十分优秀!