Android開發(fā)(40) 使用Android系統(tǒng)的賬戶中心

概述

在android的系統(tǒng)設(shè)置頁,有個(gè)“賬戶”分組,里面有很多的賬戶,很多app都使用了這個(gè)賬戶系統(tǒng),比如“谷歌”,“淘寶”,“微信”,“華為”等。這些都是大公司呢,有沒有可能我們也使用這個(gè),讓我們的軟件的名稱也出現(xiàn)在這里呢,答應(yīng)是肯定的??纯葱Ч麍D:

加上這個(gè),我們的app立馬就高大上了,如何做到呢?

實(shí)現(xiàn)步驟

  1. 繼承 AbstractAccountAuthenticator 實(shí)現(xiàn) 一個(gè) 自己的 賬戶認(rèn)證器
  2. 繼承自 service,實(shí)現(xiàn)一個(gè)服務(wù),該服務(wù)使用上一步的 賬戶認(rèn)證器
  3. 繼承 AccountAuthenticatorActivity ,實(shí)現(xiàn) 自定義的 登錄頁面。

知識(shí)準(zhǔn)備

你需要了解 上面積個(gè)類的知識(shí),和accountManager,我翻譯了這幾個(gè)類的概述,參考我前幾篇文章。

http://www.lxweimin.com/p/82311e1ce09e
http://www.lxweimin.com/p/044c31c3f48d

實(shí)現(xiàn)

如果被系統(tǒng)發(fā)現(xiàn)?

自定義的服務(wù)代碼如下:

<service
        android:name=".MyAuthenticatorService"
        android:exported="true" >
        <intent-filter>
            <action android:name="android.accounts.AccountAuthenticator" />
        </intent-filter>

        <meta-data
            android:name="android.accounts.AccountAuthenticator"
            android:resource="@xml/authenticator" />
    </service>

我們看到,這個(gè)service 指定了過濾器為 android.accounts.AccountAuthenticator,這是個(gè)系統(tǒng)調(diào)用的 action。

自定義 認(rèn)證器 做了什么?

我們需要在定義認(rèn)證器里實(shí)現(xiàn) 它的 addAccount 和 getAuthToken 方法。

addAccount方法: 在api里解釋說,在 添加賬戶時(shí),需要從用戶收集認(rèn)證信息(賬戶名和密碼),需要返回一個(gè)intent,以打開一個(gè)activity,這個(gè)activity就是我們登陸頁了。我們需要在登錄頁里處理登錄的邏輯實(shí)現(xiàn),并使用AccountManager記錄下 登錄成功的用戶信息,并保存在賬戶中心。

getAuthToken方法: 獲得auth Token ,這是一個(gè)授權(quán)標(biāo)記,有些地方翻譯為“令牌”,就是從服務(wù)端返回的字符串,指示了登錄成功。很多系統(tǒng)不在本地(手機(jī))保存真實(shí)的密碼,配合auth token 來顯示一次登錄認(rèn)證,后續(xù)的操作請(qǐng)求都攜帶auth token作為身份令牌。

@Override
public Bundle addAccount(AccountAuthenticatorResponse response,
        String accountType, String authTokenType,
        String[] requiredFeatures, Bundle options)
        throws NetworkErrorException {
    // 需要實(shí)現(xiàn)
    Log.v(TAG, "addAccount()");
    final Intent intent = new Intent(mContext, LoginActivity.class);
    intent.putExtra(AccountManager.KEY_ACCOUNT_AUTHENTICATOR_RESPONSE, response);
    final Bundle bundle = new Bundle();
    bundle.putParcelable(AccountManager.KEY_INTENT, intent);
    return bundle;
}

@Override
public Bundle getAuthToken(AccountAuthenticatorResponse response,
        Account account, String authTokenType, Bundle options)
        throws NetworkErrorException {
    // 需要實(shí)現(xiàn)
    return null;
}

演示下載: http://yunpan.cn/cAIvcxDHZjrIS 訪問密碼 d8f7

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,837評(píng)論 18 139
  • 4 創(chuàng)建一個(gè)社交網(wǎng)站 在上一章中,你學(xué)習(xí)了如何創(chuàng)建站點(diǎn)地圖和訂閱,并且為博客應(yīng)用構(gòu)建了一個(gè)搜索引擎。在這一章中,你...
    lakerszhy閱讀 2,199評(píng)論 0 7
  • 構(gòu)建用戶管理微服務(wù)翻譯自:https://springuni.com 構(gòu)建用戶管理微服務(wù)(一):定義領(lǐng)域模型和 R...
    極樂君閱讀 1,557評(píng)論 0 10
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,814評(píng)論 25 708
  • toast效果圖 toast用法 toast實(shí)現(xiàn)思路 首先是文字的顯示,可以看出是一個(gè)label,但是文字還有背景...
    Jerry在種草閱讀 6,365評(píng)論 4 12