Fel*_*ipe 64 android facebook login facebook-graph-api
几天前我实现了FB登录到我的APP,今天我发现我已经实现的大部分内容现已弃用.
之前,我正在使用Session以查看用户是否已登录.但是,这不适用于新的SDK.
根据他们的文档,我们可以使用AccessToken.getCurrentAccessToken()和Profile.getCurrentProfile()检查用户是否已经登录,但我无法使用它们.
我试过这样的事情:
if(AccessToken.getCurrentAccessToken() == null)
Run Code Online (Sandbox Code Playgroud)
我想知道如果我可以在其中使用它(这也是由FB提供),这是否会起作用:
LoginManager.getInstance().registerCallback(callbackManager, new LoginManager.Callback() {...});
Run Code Online (Sandbox Code Playgroud)
但是,我得到了"无法解析符号'回调'".
编辑!!!!!!
好的,所以我能够通过使用以下内容检查用户是否已登录:
on onCreate:
accessTokenTracker = new AccessTokenTracker() {
@Override
protected void onCurrentAccessTokenChanged(AccessToken oldAccessToken, AccessToken newAccessToken) {
updateWithToken(newAccessToken);
}
};
Run Code Online (Sandbox Code Playgroud)
然后,这会调用我的updateWithToken方法:
private void updateWithToken(AccessToken currentAccessToken) {
if (currentAccessToken != null) {
LOAD ACTIVITY A!
} else {
LOAD ACTIVITY B!
}
}
Run Code Online (Sandbox Code Playgroud)
现在,问题是:如果用户使用过该应用程序并且之前没有登录,我可以检查一下!但如果这是用户第一次使用该应用程序,updateWithToken则我的AccessTokenTracker永远不会调用它.
如果有人可以提供帮助,我真的很感激.
谢谢!
Fel*_*sso 137
一个更简单的解决方案适用于我的情况(我不知道这是否是更优雅的方式):
public boolean isLoggedIn() {
AccessToken accessToken = AccessToken.getCurrentAccessToken();
return accessToken != null;
}
Run Code Online (Sandbox Code Playgroud)
Fel*_*ipe 35
我知道了!
首先,确保已初始化FB SDK.其次,添加以下内容:
accessTokenTracker = new AccessTokenTracker() {
@Override
protected void onCurrentAccessTokenChanged(AccessToken oldAccessToken, AccessToken newAccessToken) {
updateWithToken(newAccessToken);
}
};
Run Code Online (Sandbox Code Playgroud)
当当前访问令牌发生变化时,将调用此方法.这意味着,这只会在用户已登录时帮助您.
接下来,我们将此添加到我们的onCreate()方法:
updateWithToken(AccessToken.getCurrentAccessToken());
Run Code Online (Sandbox Code Playgroud)
当然,我们的updateWithToken()方法:
private void updateWithToken(AccessToken currentAccessToken) {
if (currentAccessToken != null) {
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
Intent i = new Intent(SplashScreen.this, GeekTrivia.class);
startActivity(i);
finish();
}
}, SPLASH_TIME_OUT);
} else {
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
Intent i = new Intent(SplashScreen.this, Login.class);
startActivity(i);
finish();
}
}, SPLASH_TIME_OUT);
}
}
Run Code Online (Sandbox Code Playgroud)
这样做对我来说!=]
我使用AccessToken和AccessTokenTracker检查登录状态的困境是,当AccessToken准备好并且跟踪器的回调函数被调用但配置文件可能还没有准备好时,因此我无法在此时获取或显示Facebooker的名称.
我的解决方案是检查当前配置文件!= null并使用其跟踪器同时拥有Facebooker的名称:
ProfileTracker fbProfileTracker = new ProfileTracker() {
@Override
protected void onCurrentProfileChanged(Profile oldProfile, Profile currentProfile) {
// User logged in or changed profile
}
};
Run Code Online (Sandbox Code Playgroud)
检查登录状态,然后获取用户名:
Profile profile = Profile.getCurrentProfile();
if (profile != null) {
Log.v(TAG, "Logged, user name=" + profile.getFirstName() + " " + profile.getLastName());
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
70648 次 |
| 最近记录: |