如何在 Android 上使用 Cognito/UserPool 登录后实施注销
How to implement signOut once signed in with Cognito/UserPool on Android
正在寻求有关实现 signOut() 函数以允许用户退出应用程序的帮助。
我已经实现了在这里找到的代码:
https://docs.aws.amazon.com/aws-mobile/latest/developerguide/add-aws-mobile-user-sign-in.html
我能够让 AWS 登录屏幕正常工作,我也可以看到在 Cognito 中创建的新用户,但是当我尝试实现一个注销按钮让我回到之前的意图时,它不断反弹。我四处阅读,发现用户将始终保持登录状态。
下面是我的验证器代码Activity:
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();
}
}
用户输入详细信息进行注册然后登录后,显示的下一个 activity/intent 还会显示下面的退出按钮。
下面的代码是我按下退出按钮时的代码(在另一个 Activity 中):
/** called when the user taps the send button */
public void signOutOfApp(View view) {
Intent intent = new Intent(this, AuthenticatorActivity.class);
startActivity(intent);
}
有人可以帮我建议如何让它工作吗?
AuthenticatorActivity 似乎没有任何东西可以表明它在哪里 passing/storing 新用户的详细信息,当我到达下一个 activity/intent 时,我不确定我该如何 call/get 将用户详细信息传递给注销方法。
请在这里帮助指导我!提前致谢!
注销方法可通过 IdentityManager class 使用。以下将让您调用 signOut。由于注销是异步的,您可能需要向 IdentityManager 注册一个回调,以便在用户成功注销时获得回调。
注册回调以获得 sign-in 状态变化的通知:
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");
}
});
调用注销:
IdentityManager.getDefaultIdentityManager().signOut();
AWSMobileClient
如何与 IdentityManager
互动?
AWSMobileClient
创建 IdentityManager
对象并将该对象设置为默认对象 IdentityManager
。由于 IdentityManager
是单例,因此您可以在应用程序的任何位置使用 IdentityManager.getDefaultIdentityManager()
。
至于 Kotlin,因为我可以使用 AWS 登录,我应该在我的 nextActivity 和注销中的什么地方添加它
IdentityManager.getDefaultIdentityManager().signOut();
IdentityManager.getDefaultIdentityManager().addSignInStateChangeListener(
object : SignInStateChangeListener() {
override fun onUserSignedIn() {
Log.d(TAG, "User signed in");
}
override fun onUserSignedOut() {
Log.d(TAG, "User signed out");
}
}
)
正在寻求有关实现 signOut() 函数以允许用户退出应用程序的帮助。
我已经实现了在这里找到的代码: https://docs.aws.amazon.com/aws-mobile/latest/developerguide/add-aws-mobile-user-sign-in.html
我能够让 AWS 登录屏幕正常工作,我也可以看到在 Cognito 中创建的新用户,但是当我尝试实现一个注销按钮让我回到之前的意图时,它不断反弹。我四处阅读,发现用户将始终保持登录状态。
下面是我的验证器代码Activity:
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();
}
}
用户输入详细信息进行注册然后登录后,显示的下一个 activity/intent 还会显示下面的退出按钮。
下面的代码是我按下退出按钮时的代码(在另一个 Activity 中):
/** called when the user taps the send button */
public void signOutOfApp(View view) {
Intent intent = new Intent(this, AuthenticatorActivity.class);
startActivity(intent);
}
有人可以帮我建议如何让它工作吗? AuthenticatorActivity 似乎没有任何东西可以表明它在哪里 passing/storing 新用户的详细信息,当我到达下一个 activity/intent 时,我不确定我该如何 call/get 将用户详细信息传递给注销方法。 请在这里帮助指导我!提前致谢!
注销方法可通过 IdentityManager class 使用。以下将让您调用 signOut。由于注销是异步的,您可能需要向 IdentityManager 注册一个回调,以便在用户成功注销时获得回调。
注册回调以获得 sign-in 状态变化的通知:
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");
}
});
调用注销:
IdentityManager.getDefaultIdentityManager().signOut();
AWSMobileClient
如何与 IdentityManager
互动?
AWSMobileClient
创建 IdentityManager
对象并将该对象设置为默认对象 IdentityManager
。由于 IdentityManager
是单例,因此您可以在应用程序的任何位置使用 IdentityManager.getDefaultIdentityManager()
。
至于 Kotlin,因为我可以使用 AWS 登录,我应该在我的 nextActivity 和注销中的什么地方添加它 IdentityManager.getDefaultIdentityManager().signOut();
IdentityManager.getDefaultIdentityManager().addSignInStateChangeListener(
object : SignInStateChangeListener() {
override fun onUserSignedIn() {
Log.d(TAG, "User signed in");
}
override fun onUserSignedOut() {
Log.d(TAG, "User signed out");
}
}
)