我的朋友和我正在尝试通过Facebook登录。我们从Facebook开发者页面获取代码: https://developers.facebook.com/docs/android/login-with-facebook
问题是如何在授权成功后立即调用另一个活动并删除注销按钮。我们一直在阅读其他帖子,但没有解决方案可以帮助我们。
答案 0 :(得分:4)
我将展示这个解决方案,因为将来也许有人像我一样在同样的问题上挣扎。
为了删除注销/登录按钮并在单击后退按钮或完全关闭活动时阻止它们出现(但用户仍然因为其凭据已保存而仍然登录)。
要解决此问题,您必须调用finish()
函数并关闭LoginActivity。
例如,将LoginActivity视为我的应用程序的启动器。它扩展了Activity,因此它有onCreate()
和onActivityResult()
:
public class LoginActivity extends HelpBaseActivity {
private LoginButton loginButton;
private CallbackManager callbackManager;
private AccessToken accessToken;
private AccessTokenTracker accessTokenTracker;
//Intent Actions
private static final String HOME_ACTIVITIES = "com.example.mydomain.myappname.HOME_ACTIVITY";
// Request Code
private static final int HOME_ACTIVITIES_REQUEST_CODE = 10;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
FacebookSdk.sdkInitialize(this);
setContentView(R.layout.activity_login);
loginButton = (LoginButton) findViewById(R.id.login_button);
callbackManager = CallbackManager.Factory.create();
// Callback registration
loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
Log.d("LOGIN_SUCCESS", "Success");
loginButton.setVisibility(View.INVISIBLE); //<- IMPORTANT
Intent intent = new Intent(HOME_ACTIVITIES);
startActivity(intent);
finish();//<- IMPORTANT
}
@Override
public void onCancel() {
Log.d("LOGIN_CANCEL", "Cancel");
}
@Override
public void onError(FacebookException exception) {
Log.d("LOGIN_ERROR", "Error");
}
});
accessTokenTracker = new AccessTokenTracker() {
@Override
protected void onCurrentAccessTokenChanged(
AccessToken oldAccessToken,
AccessToken currentAccessToken) {
// Set the access token using
// currentAccessToken when it's loaded or set.
}
};
// If the access token is available already assign it.
accessToken = AccessToken.getCurrentAccessToken();
// If already logged in show the home view
if (accessToken != null) {//<- IMPORTANT
Intent intent = new Intent(HOME_ACTIVITIES);
startActivity(intent);
finish();//<- IMPORTANT
}
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data){
super.onActivityResult(requestCode, resultCode, data);
callbackManager.onActivityResult(requestCode, resultCode, data);
}
}
如果您想控制“HomeActivity”,则可以使用startActivityForResult()
(而不是startActivity()
)将活动称为:
Intent intent = new Intent(HOME_ACTIVITIES);
startActivityForResult(intent, HOME_ACTIVITIES_REQUEST_CODE);
然后在onActivityResult()
上进行检查:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
callbackManager.onActivityResult(requestCode, resultCode, data);
if (requestCode == HOME_ACTIVITIES_REQUEST_CODE) {
finish();
}
}
我是Android编程的新手,所以我相信可能有许多其他解决方案比这更好,但我发现直到现在才提供给我的互联网有用,所以我想展示那个为我工作。
答案 1 :(得分:3)
你实现了这个吗?
private void onSessionStateChange(Session session, SessionState state, Exception exception) {
if (state.isOpened()) {
Log.i(TAG, "Logged in...");
} else if (state.isClosed()) {
Log.i(TAG, "Logged out...");
}
}
如果是,您可以轻松猜出每次用户登录时都会执行if(state.isOpened())
块中的代码。所以,添加以下行:
startActivity(new Intent(MainActicity.this, NewActivity.class));
编辑:
如果用户已登录,则 facebook.isSessionValid()
返回true,否则返回false。这种方法似乎已被弃用,但应继续使用。 Source
所以,在onCreate()
方法中添加:
if (facebook.isSessionValid())
startActivity(new Intent(MainActicity.this, NewActivity.class));
答案 2 :(得分:0)
您还可以在提供的onSuccess方法中启动新活动 @覆盖 protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); FacebookSdk.sdkInitialize(getApplicationContext()); AppEventsLogger.activateApp(本); 的setContentView(R.layout.activity_main);
callbackManager = CallbackManager.Factory.create();
LoginManager.getInstance().registerCallback(callbackManager,
new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
// App code
}
@Override
public void onCancel() {
// App code
}
@Override
public void onError(FacebookException exception) {
// App code
}
});