寻找有关实现signOut()函数的帮助,以允许用户退出应用程序。
我已经实现了在这里找到的代码:
https://docs.aws.amazon.com/aws-mobile/latest/developerguide/add-aws-mobile-user-sign-in.html
我可以使AWS登录屏幕正常工作,也可以看到在Cognito中创建的新用户,但是当我尝试实现退出按钮使我回到以前的意图时,它会不断跳回。我进行了一些阅读,发现用户将始终保持登录状态。
以下是我用于AuthenticatorActivity的代码:
import com.amazonaws.mobile.auth.ui.SignInUI;
import com.amazonaws.mobile.client.AWSMobileClient;
import com.amazonaws.mobile.client.AWSStartupHandler;
import com.amazonaws.mobile.client.AWSStartupResult;
public class AuthenticatorActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_authenticator);
// Add a call to initialize AWSMobileClient
AWSMobileClient.getInstance().initialize(this, new AWSStartupHandler() {
@Override
public void onComplete(AWSStartupResult awsStartupResult) {
SignInUI signin = (SignInUI) AWSMobileClient.getInstance().getClient(AuthenticatorActivity.this, SignInUI.class);
signin.login(AuthenticatorActivity.this, MainActivity.class).execute();
}
}).execute();
}
}
用户输入详细信息进行注册然后登录后,显示的下一个活动/意图也将显示以下退出按钮。
下面的代码是当我按下“退出”按钮(在另一个活动中)时所拥有的内容:
/** called when the user taps the send button */
public void signOutOfApp(View view) {
Intent intent = new Intent(this, AuthenticatorActivity.class);
startActivity(intent);
}
有人可以帮我建议如何使它起作用吗?
AuthenticatorActivity似乎没有任何内容可以指示它在哪里传递/存储新的用户详细信息,当我进入下一个活动/意图时,我不确定如何调用/获取用户详细信息以将其传递给登出方法。
请在这里帮助指导我!提前致谢!
最佳答案
可通过IdentityManager类使用signOut方法。下面将让您调用signOut。由于signOut是异步的,因此您可能需要向IdentityManager注册回调,以便在用户成功注销后获得回调。
注册回调以获取登录状态更改的通知:
IdentityManager.getDefaultIdentityManager().addSignInStateChangeListener(new SignInStateChangeListener() {
@Override
public void onUserSignedIn() {
Log.d(LOG_TAG, "User Signed In");
}
@Override
public void onUserSignedOut() {
Log.d(LOG_TAG, "User Signed Out");
}
});
调用signOut:
IdentityManager.getDefaultIdentityManager().signOut();
AWSMobileClient
如何与IdentityManager
交互?AWSMobileClient
创建IdentityManager
对象,并将该对象设置为默认的IdentityManager
。由于IdentityManager
是单例,因此您可以在应用程序的任何位置使用IdentityManager.getDefaultIdentityManager()
。