成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Android開發(fā):創(chuàng)建自定義帳戶類型

移動開發(fā) Android
首先你需要一種獲取用戶憑據(jù)的方法。這有可能像一個詢問用戶名和密碼的對話框一樣簡單?;蛘咚赡苁且粋€更奇特的程序,比如一次性密碼或生物識別掃描。無論哪種方法,你有責任去實現(xiàn)這些需求:收集用戶憑據(jù)、在服務(wù)器上驗證這些憑據(jù)、在設(shè)備商保存憑據(jù)。

到目前為止我們已經(jīng)討論了如何訪問Google API,它使用由谷歌定義的賬戶和用戶。如果你有自己的線上服務(wù),而它卻沒有谷歌賬戶或用戶,那么你將如何做?其實可以相對直接地在用戶設(shè)備上安裝一個新 的賬戶類型。這節(jié)課解釋如何創(chuàng)建一個和內(nèi)建賬戶一樣能工作的自定義帳戶類型。

實現(xiàn)你的自定義帳戶代碼

首先你需要一種獲取用戶憑據(jù)的方法。這有可能像一個詢問用戶名和密碼的對話框一樣簡單?;蛘咚赡苁且粋€更奇特的程序,比如一次性密碼或生物識別掃描。無論哪種方法,你有責任去實現(xiàn)這些需求:

  1. 收集用戶憑據(jù)
  2. 在服務(wù)器上驗證這些憑據(jù)
  3. 在設(shè)備商保存憑據(jù)

通常情況下,以上三個需求都可以在一個activity中處理。我們稱之為“驗證者activity”。

因為他們都需要和賬戶管理* ( AccountAuthenticatorActivity * ,通過它你可以專注去創(chuàng)建你自己的自定義身份驗證。

至于如何處理驗證者activity的前兩個需求,即憑證收集和驗證,這完全取決于你。(如果假定只有一種方法來實現(xiàn)它,那么很顯然我們就沒必要去做“自定義”賬戶類型。)第三個需求有一個典型的,而且頗為簡單的實現(xiàn)方式:

  1. final Account account = new Account(mUsername, your_account_type); 
  2. mAccountManager.addAccountExplicitly(account, mPassword, null); 

對安全更注意一些

理解* AccountManager *不是一種加密服務(wù)或者密鑰鏈這件事非常重要。它僅僅按照你傳遞的內(nèi)容用'''明文'''來存儲。在大部分設(shè)備上,這不是一個典型的顧慮,因為設(shè)備把他們存儲在只有根用戶才能訪問的數(shù)據(jù)庫中。但是在已經(jīng)被Root過的設(shè)備上,通過'_adb連接可以讓任何人讀取憑據(jù)信息。

因此,你不能直接傳遞用戶的真實密碼給* android.os.Bundle) AccountManager.addAccountExplicitly()* 。 相反,你應(yīng)該存儲加密的安全令牌來保障限制攻擊者的使用。如果你的用戶憑證需要保護一些敏感信息,你應(yīng)該謹慎考慮做出相似的事情。

** 記?。?* 當涉及到安全有關(guān)代碼,請按照“流言終結(jié)者(Mythbusters)”規(guī)則:不要在家里嘗試這個!在執(zhí)行任何自定義代碼之前請一定要咨詢安全專業(yè)人士。

既然安全免責聲明是不合適的,那么現(xiàn)在是時候回去工作了。你已經(jīng)理解了自定義帳戶代碼的核心,剩下的就是去實現(xiàn)它了。

繼承AbstractAccountAuthenticator

為了讓* AccountManager 能夠和你的自定義用戶賬戶代碼一起工作,你需要一個實現(xiàn)了 AccountManager * 所需要的接口的類。這個類就是''“驗證類”(authenticator class)_。

建立一個驗證類的最簡單的方法是繼承* AbstractAccountAuthenticator 并且實現(xiàn)其中的抽象方法。如果你已經(jīng)學習了之前的課程, AbstractAccountAuthenticator * 的抽象類方法可能看起來比較熟悉:他們的功能剛好與你在前一課中調(diào)用的賬戶信息和授權(quán)令牌的方法相反。

正確地實現(xiàn)一個驗證類要求一連串單獨的代碼段。首先,* AbstractAccountAuthenticator * 有七個你必須重寫的抽象方法。其次,你需要在你的application menifes(將在下一節(jié)講到)中為'''"android.accounts.AccountAuthenticator"'''添加一個* intent filter * 。最后,你必須提供兩個XML資源,其中包括你的自定義帳戶類型的名稱和系統(tǒng)將在這個類型賬戶后面顯示的圖標。

你可以查找一個“一對一向?qū)?rdquo;來實現(xiàn)一個成功的驗證類和在* AbstractAccountAuthenticator * 文檔中的XML文件。同樣在SampleSyncAdapter示例程序中有一個簡單的實現(xiàn)方法。

如果你已讀過SampleSyncAdapter的代碼,你就會發(fā)現(xiàn)有很多個方法在一個bundle鐘返回一個intent。而這個intent和 將被用于運行你的自定義的驗證activity的是同一個intent。如果你的驗證activity需要任何特殊的初始化參數(shù),你可以使用* Intent.putExtra()) * 來將他們添加進該intent中。

創(chuàng)建一個驗證服務(wù)

既然你已經(jīng)有了一個驗證類,你需要一個地方來讓它運行。賬戶驗證在多個應(yīng)用中必須是可用的,并且能夠在后臺運行,所以他們自然需要運行在一個* 服務(wù)Service * 中。我們稱之為驗證服務(wù)。

你的驗證服務(wù)一定要非常簡單。它需要做的僅僅是在* onCreate()) 方法中創(chuàng)建一個你的驗證類的實例,并且調(diào)用 getIBinder()) 和 onBind()) * 方法。* SampleSyncAdapter示例程序 *中有一個很好的驗證服務(wù)的例子。

不要忘記在你的manifest文件中添加一個* * 標簽和一個AccountAuthenticator intent的intent filter(過濾器),并且聲明這個賬戶驗證器:

  1. <service ...> 
  2.    <intent-filter> 
  3.       <action android:name="android.accounts.AccountAuthenticator" /> 
  4.    </intent-filter> 
  5.    <meta-data android:name="android.accounts.AccountAuthenticator" 
  6.              android:resource="@xml/authenticator" /></service> 

發(fā)布你的服務(wù)

你已經(jīng)完成了!系統(tǒng)現(xiàn)在可以在那些大牌賬戶類型比如"Google"和"Corporate"當中認出你的賬戶類型。你可以使用* Accounts & Sync(賬戶與同步)* 設(shè)置頁面來添加一個賬戶,而且那些需要你自定義類型的賬戶的軟件能夠像任何其他賬戶類型一樣美劇和驗證你的賬戶類型。

當然,這些全都是假設(shè)你的賬戶服務(wù)被正確的安裝在設(shè)備上的。如果只有一個程序需要訪問這個服務(wù),那么就這就會很簡單,只需要在應(yīng)用中捆綁這個服務(wù)就 可以了。但是如果你想讓你的賬戶服務(wù)被用于不止一個應(yīng)用,那么事情就會變得棘手了。因為你不想把服務(wù)綁定到每一個的應(yīng)用上,并且在設(shè)備上占用大量的空間來 保存多個副本。

一種解決方法把這個服務(wù)換成一個小的,有特殊目的的APK。當一個應(yīng)用想要使用你的自定義帳戶類型,它可以檢查這個設(shè)備看你的自定義帳戶類型有沒有 運行。如果沒有,它能夠帶領(lǐng)用戶到Google Play下載這個服務(wù)。這剛開始看起來似乎是一個大麻煩,但是同讓每一個應(yīng)用程序在使用自定義賬戶類型時重復輸入憑據(jù)的方案對比來看,這很顯然要簡單得多。

責任編輯:閆佳明 來源: eoe
相關(guān)推薦

2015-02-12 15:33:43

微信SDK

2016-11-16 21:55:55

源碼分析自定義view androi

2016-12-26 15:25:59

Android自定義View

2013-05-20 17:48:20

2009-06-08 20:13:36

Eclipse自定義控

2022-05-07 10:22:32

JavaScript自定義前端

2011-12-05 15:02:21

Knockout

2013-04-01 14:35:10

Android開發(fā)Android自定義x

2013-05-20 17:33:44

Android游戲開發(fā)自定義View

2011-05-05 13:30:17

GridViewListView布局

2012-05-18 10:52:20

TitaniumAndroid模塊自定義View模塊

2011-12-26 10:11:08

JSP

2009-06-24 15:13:36

自定義JSF組件

2010-10-20 16:07:48

SQL用戶自定義角色

2017-05-18 12:36:16

android萬能適配器列表視圖

2010-02-07 14:02:16

Android 界面

2017-05-19 10:03:31

AndroidBaseAdapter實踐

2016-04-12 10:07:55

AndroidViewList

2023-08-10 17:14:52

鴻蒙自定義彈窗

2011-08-02 11:17:13

iOS開發(fā) View
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 国产精品美女在线观看 | 精品国产一区二区三区免费 | 东京久久 | av一区二区三区四区 | 天天玩天天操天天干 | 精品久久久久久久 | 亚洲日本欧美日韩高观看 | 亚洲一区在线播放 | 久久久久久国产精品免费 | 久久精品久久久久久 | 免费a v网站 | 日韩精品视频一区二区三区 | 国产一区二区视频在线 | 久久久www成人免费无遮挡大片 | 亚洲网站在线观看 | 毛片免费观看 | 亚洲成人a v| av在线播放网址 | 午夜a√ | 久久久亚洲一区 | 黄色一级大片视频 | 中文字幕国 | 亚洲精品二区 | 欧美一级欧美三级在线观看 | 久久狠狠| 国产精品成人一区二区 | 99热首页 | 亚洲成人一区二区 | www.亚洲国产精品 | 午夜精品一区二区三区在线视频 | 亚洲综合首页 | 欧美一区二区在线 | 精品视频一区二区三区在线观看 | 色888www视频在线观看 | 亚洲一区二区三区免费视频 | 亚洲欧美日韩中文在线 | 欧美成人自拍视频 | 久久69精品久久久久久国产越南 | 天堂亚洲网 | 中国一级毛片免费 | 美日韩免费 |