今天我的应用程序有一个经典的登录界面(用户名和密码),这个类扩展了一个常见的Activity . 我最初的活动是登录(如果已登录用户,则重定向到主页) .
我的android清单:
<!-- Start Activity -->
<activity
android:name=".activity.LoginActivity"
android:label="@string/app_name"
android:theme="@style/AppTheme.NoActionBar"
android:windowSoftInputMode="adjustPan">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
现在我正在尝试部署Android的客户经理,阅读文档并实施 . 功能还可以 . 如果您输入Android帐户设置,则可以登录应用程序并创建帐户 . 但我的问题是如何保持两种方式 .
作为Facebook,如果用户打开应用程序,它将登录并自动在AccountManager上创建一个帐户,并在设置中的帐户中获取它也会记录在应用程序中 . 在服务器上请求用户验证和密码(使用排球)之后,我应该知道要完成哪一步?将数据返回到AccountManager或添加帐户?
登录经典,在服务器验证后使用“addAccountExplicitly”添加帐户:
private void finishLogin(final String email, final String authToken) {
Account account = new Account(email, AccountGeneral.ACCOUNT_TYPE);
boolean success = mAccountManager.addAccountExplicitly(account, "", null);
if (success) {
Log.d(TAG, "Account created");
mAccountManager.setAuthToken(account, mAuthTokenType, authToken);
} else {
Log.d(TAG, "Account creation failed. Look at previous logs to investigate");
}
}
并登录帐户设置:
Bundle data = new Bundle();
data.putString(AccountManager.KEY_ACCOUNT_NAME, email);
data.putString(AccountManager.KEY_ACCOUNT_TYPE, accountType);
data.putString(AccountManager.KEY_AUTHTOKEN, authToken);
data.putString(PARAM_USER_PASS, password);
final Intent intent = new Intent();
intent.putExtras(data);
final Account account = new Account(email, accountType);
if (getIntent().getBooleanExtra(ARG_IS_ADDING_NEW_ACCOUNT, false)) {
Log.d(TAG, " finishLogin > addAccountExplicitly");
// Creating the account on the device and setting the auth token we got
// (Not setting the auth token will cause another call to the server to authenticate the user)
mAccountManager.addAccountExplicitly(account, password, null);
mAccountManager.setAuthToken(account, mAuthTokenType, authToken);
} else {
Log.d(TAG, " finishLogin > setPassword");
mAccountManager.setPassword(account, password);
}
setAccountAuthenticatorResult(intent.getExtras());
setResult(RESULT_OK, intent);
finish();
1 回答
为了保持两种方式,您不需要有两个活动并处理两个方案 . 只需集成所有登录流程,设置帐户数据并在帐户管理器包中明确添加帐户即可 . (可以到达的那个抛出设置 - >添加帐户) .
然后在您的应用程序中,您有
AccountManager
类的不同选项 .您可以通过拨打getAccountsByType()来检查是否已有帐户 .
您可以致电AddAccount()在应用中添加帐户 . 它会自动显示您从“设置”中获得的相同活动 . 它还具有返回所选帐户名和authToken的回调 .
你也可以拨打newChooseAccountIntent() . 这是一个非常好的选择,因为如果没有帐户,此方法会自动显示登录活动,如果已经添加了帐户,则将其显示为列表,用户可以选择帐户 .