Android-AccountManager和登录经典



今天我的应用程序有一个经典的登录屏幕(用户名和密码),这个类扩展了一个通用的"活动"。我的初始活动是登录(如果已经登录的用户重定向到主页)。

我的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();

为了保持这两种方式,您不需要有两个活动和处理两个场景。只需集成所有登录过程,设置帐户数据并在您的帐户管理器包中显式添加帐户。(抛出设置-->添加帐户即可到达的)。

然后在您的应用程序中,您可以从AccountManager类获得不同的选项。

您可以通过调用getAccountsByType()来检查是否已经有帐户。

您可以通过调用AddAccount()在应用程序中添加帐户。它将自动显示您从"设置"中访问的相同活动。它还具有返回所选帐户名和authToken的回调。

您也可以调用newChooseAccountIntent()。这是一个非常好的选项,因为如果没有帐户,此方法会自动显示登录活动,如果已经添加了帐户,则会将其显示为列表,用户可以选择一个帐户。

相关内容

  • 没有找到相关文章

最新更新