軟件開發工具:第15章 Android賬戶管理_第1頁
軟件開發工具:第15章 Android賬戶管理_第2頁
軟件開發工具:第15章 Android賬戶管理_第3頁
軟件開發工具:第15章 Android賬戶管理_第4頁
軟件開發工具:第15章 Android賬戶管理_第5頁
已閱讀5頁,還剩58頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、鄭州大學信息工程學院第15章 Android賬戶管理點擊添加文本鄭州大學信息工程學院15.1 賬戶管理相關類15.2 使用OAuth2.0來進行鑒定15.3 應用程序將帳號注冊到系統中15.4 創建自定義賬戶示例15.5 本章小結本章導讀本章導讀:使用過Android版的Facebook、Lastfm的同學是否對于這些應用的功能感到驚喜,它們可以定期更新朋友的最新信息,將最新近況和心情短語集成入聯系人中。這些應用全部是以Android 2.0后的賬戶和同步機制為基礎的。本章主要知識點有:(1)Android賬戶管理相關類簡介;(2)使用OAuth2.0來進行鑒定;(3)應用程序如何將一個帳號注

2、冊到系統中;(4)創建自定義賬戶示例。重點介紹基于OAuth2.0的第三方登錄SDK。15.1 賬戶管理相關類1Account簡介android中的android.accounts.Account代表的是手機的基本賬號信息(name和type)。 我們可以通過AccountManager取得Android手機的所有賬號。比如:AccountManager am = AccountManager.get(context);Account accounts = am.getAccounts();15.1 賬戶管理相關類2AbstractAccountAuthenticator簡介android.a

3、ccounts.AbstractAccountAuthenticator是一個抽象類。它定義處理Android系統賬戶的添加和驗證等功能的基本接口,并實現了一些基本功能。15.1 賬戶管理相關類3AccountAuthenticatorActivity簡介android.accounts.AccountAuthenticatorActivity是AbstractAccountAuthenticator的幫助類的一個基本實現。當AbstractAccountAuthenticator需要一個Activity來讓用戶輸入一些數據的時候,可以新建一個指向某個Activity的Intent,并把傳進來

4、的AccountAuthenticatorResponse 參數以 KEY_ACCOUNT_MANAGER_RESPONSE 為鍵放在Intent對象中,也可以把啟動Activity的相關參數亦放入Intent對象中,再把Intent對象封裝到Bundle中,并返回該Bundle。15.1 賬戶管理相關類4AccountManager和AccountManagerService簡介AccountManager是一個面向應用程序開發的組件。它提供一組對應于IAccountManager協議的應用程序接口。這組接口通過Binder機制與系統服務AccountManagerService進行通信,協

5、作完成帳戶相關的操作。AccountManagerService是Android的系統服務。它實現了接口IAccountManager定義的這一組行為。這些行為的實現依賴應用程序中定義的Authenticator。應用程序開發者并不直接請求AccountManagerService服務。賬戶管理相關的處理,由AccountManager提供接口。15.1 賬戶管理相關類可以按如下的方式獲得AccountManager實例: AccountManager accountManager = AccountManager.get(context);實際上get()方法中,調用了Context.get

6、SystemService()來創建實例:public static AccountManager get(Context context) if (context = null) throw new IllegalArgumentException(context is null); return (AccountManager) context.getSystemService(Context.ACCOUNT_SERVICE);15.1 賬戶管理相關類Account Manager允許你獲取存儲在用戶設備上的賬戶信息。Android設備可以根據許多不同的提供者來存儲多個不同類型的賬戶。當為

7、了某個賬戶名而使用AcccountManager進行查詢的時候,可以選擇使用Account Type來filter。賬戶類型是一個唯一標識已經發布賬戶的String。例如,Google賬戶使用“com.google”,Twitter使用“com.twitter.android.auth.login”。為了獲得在設備上所有的賬戶列表,App需要有GET_ACCOUNTS權限,可使用標簽在manifest文件中來添加請求權限。 一旦決定需要查詢哪些賬戶了,可以像下面的例子一樣來獲得一個Account的數組,里面均是與類型符合的賬戶信息。/ this references the current C

8、ontext AccountManager am = AccountManager.get(this); Account accounts = am.getAccountsByType(com.google); 15.1 賬戶管理相關類5AbstractThreadedSyncAdapter簡介android.content.AbstractThreadedSyncAdapter是一個抽象類,它主要用于執行Account相關內容(比如Contact)的同步操作。它是對Account的內容(比如contact)進行同步操作的適配器。AbstractThreadedSyncAdapter收到同步請

9、求后,將產生一個線程來進行Account指定內容的同步處理。15.2 使用OAuth2來進行身份鑒定1簡介為了安全的訪問線上服務,用戶需要在service上進行鑒定,他們需要提供身份的證明。對于一個程序來說,如果是訪問第三方的服務,那么這個安全問題就更加復雜。目前行業內解決這種第三方服務身份鑒定的方法是使用OAuth2協議。OAuth2提供了auth token,它代表用戶身份與用戶對于程序的授權。前言首要問題 信息安全第三方登錄-OAUTH協議OAUTH協議:為用戶資源的授權提供了一個安全的、開放而又簡易的標準,OAUTH的授權不會使第三方觸及到用戶的帳號信息(如用戶名與密碼)。第三方無需使

10、用用戶的用戶名與密碼就可以申請獲得該用戶資源的授權,因此OAUTH是安全的。第三方登錄-OAUTH協議英文名 : OAuth本 質 :一種開放的協議對 象 :第三方可以使用OAUTH認證服務歷史事件:OAuth開始于2006年11月, Twitter的OpenID實現。2007年4月,成立了OAuth討論組。OAuth Core 1.0 版本發布于2007年12月4日2009年6月24日發布了OAuth Core 1.0 Revision A 版本。OAuth 2.0的草案是在2010年5月初在IETF發布的。OAuth 2.0是OAuth協議的下一版本,但不向后兼容OAuth 1.0。第三方

11、登錄-三方描述在認證和授權的過程中涉及的三方包括:服務提供方,用戶使用服務提供方來存儲受保護的資源,如照片,視頻,聯系人列表。用戶 ,存放在服務提供方的受保護的資源的擁有者。客戶端 ,要訪問服務提供方資源的第三方應用。在認證過程之前,客戶端要向服務提供者申請客戶端標識。協議特點和原理協議特點(1). 簡單:不管是OAUTH服務提供者還是應用開發者,都很易于理解與使用;(2). 安全:沒有涉及到用戶密鑰等信息,更安全更靈活;(3). 開放:任何服務提供商都可以實現OAUTH,任何軟件開發商都可以使用OAUTH;OAUTH1.0-認證流程第一步:用戶訪問第三方網站,比如:需要使用QQ進行登錄的網站

12、;第二步:你點擊QQ登錄后,第三方網站將會連接并進行請求,比如:點擊登錄后,第三方網站會跳轉到QQ平臺,提示用戶進行登錄;第三步:用戶進行授權第三方網站對該用戶的信息訪問的一個權限,比如:當QQ登錄成功后,QQ會提示是否授權第三方Web訪問用戶基本信息或其他的資源信息,這時用戶可以選擇點擊授權即可;第四步:授權后,第三方Web即可訪問剛才授權的資源信息,比如:QQ基本信息-頭像、昵稱、性別等。1、oauth1.0對手機客戶端,移動設備等非server第三方的支持不好。是因為oauth1.0將多種流程合并成了一種,而事實證明,這種合并的流程體驗性非常差。2、oauth1.0的三步認證過程比較繁瑣

13、和復雜,對第三方開發者增加了極大的開發難度。3、oauth1.0的加密需求過于復雜,第三方開發者使用oauth之前需要花費精力先實現oauth1.0的加密算法。4、oauth1.0生成的access_token要求是永久有效的,這導致的問題是網站的安全性和破壞網站的架構。1.0缺陷15.2 使用OAuth2來進行鑒定使用OAuth2有利于:(1)從用戶那得到授權,使用賬戶信息來訪問online service;(2)對online service進行鑒定,保護用戶利益;(3)處理認證錯誤。Facebook的新的Graph API只支持OAuth2,Google在2011年3月亦宣布Google

14、 API對OAuth 2.0的支持。OAuth在認證和授權的過程中涉及的三方包括:(1)服務提供方:用戶使用服務提供方來存儲受保護的資源,如照片,視頻,聯系人列表。(2)用戶:存放在服務提供方的受保護的資源的擁有者。(3)客戶端,要訪問服務提供方資源的第三方應用,通常是網站,如提供照片打印服務的網站。在 認證過程之前,客戶端要向服務提供者申請客戶端標識。15.2 使用OAuth2來進行鑒定使用OAuth進行認證和授權的過程如下所示:(1)用戶想操作存放在服務提供方的資源;(2)用戶登錄客戶端向服務提供方請求一個臨時令牌;(3)服務提供方驗證客戶端的身份后,授予一個臨時令牌;(4)客戶端獲得臨時

15、令牌后,將用戶引導至服務提供方的授權頁面請求用戶授權;在這個過程中,將臨時令牌和客戶端的回調連接發送給服務提供方;(5)用戶在服務提供方的網頁上輸入用戶名和密碼,然后授權該客戶端訪問所請求的資源;(6)授權成功后,服務提供方引導用戶返回客戶端的網頁;(7)客戶端根據臨時令牌從服務提供方那里獲取訪問令牌;(8)服務提供方根據臨時令牌和用戶的授權情況授予客戶端訪問令牌;(9)客戶端使用獲取的訪問令牌訪問存放在服務提供方上的受保護的資源。OAUTH2.0-認證流程15.2 使用OAuth2來進行鑒定2收集信息在開始使用OAuth2之前,你需要獲取到下面一些信息:(1)你想訪問的服務地址。(2)aut

16、h scope。App獲取到用來表示操作的權限范圍的字串。例如,Google Tasks的read-only的auth scope是 “View your tasks”, 但是read-write的auth scope是 “Manage Your Tasks”。(3)client id與client secret。用來表示身份的字串。你需要直接從Service提供者那邊獲取那些字串。/apis/tasks/articles/oauth-and-tasks-on-android.html解釋了如何使用Google Tasks API來獲取那些需要的字串。15.2 使用OAuth2來進行鑒定3請求

17、一個授權口令為了獲取到auth token,首先需要在manifest文件中增加ACCOUNT_MANAGER與INTERNET的權限。 15.2 使用OAuth2來進行鑒定一旦設置好了上面的permissions,就可以使用AccountManager.getAuthToken() 來獲取到token。值得注意的是:AccountManager里對Account的操作可能包括了網絡通信,大多數方法是asynchronous,這意味著不應該把所有的auth操作放在一個方法里面,需要使用callback機制來實現它。例如:AccountManager am = AccountManager.ge

18、t(this); Bundle options = new Bundle(); am.getAuthToken( myAccount_, / Account retrieved using getAccountsByType() Manage your tasks, / Auth scope options, / Authenticator-specific options this, / Your activity new OnTokenAcquired(), / Callback called when a token is successfully acquired new Handle

19、r(new OnError(); / Callback called if an error occurs 15.2 使用OAuth2來進行鑒定在上面的例子中,OnTokenAcquired是AccountManagerCallback的子類。在OnTokenAcquired類里面AccountManager會執行run(AccountManagerFuture arg0)方法。如果獲取成功,那么token就在Bundle里面。下面是如何從Bundle中獲取token的示例:private class OnTokenAcquired implements AccountManagerCallb

20、ack Override public void run(AccountManagerFuture result) / Get the result of the operation from the AccountManagerFuture. Bundle bundle = result.getResult(); / The token is a named value in the bundle. The name of the value / is stored in the constant AccountManager.KEY_AUTHTOKEN. token = bundle.ge

21、tString(AccountManager.KEY_AUTHTOKEN); . 如果一切正常,那么Bundle里面會包含KEY_AUTHTOKEN的字段,但是通常事情沒有那么順利。15.2 使用OAuth2來進行鑒定4再次請求Auth Token你的第一次有可能由于下面的某個原因而導致失敗: (1)設備上的某個錯誤或者是網絡錯誤導致AccountManager操作失敗;(2)用戶不授權你的App訪問Account;(3)存儲的Account證書信息不足以讓你訪問Account;(4)在Cache里面的auth token已經過期。程序能簡單地處理前兩種情況,通常僅僅是顯示一個錯誤信息給用戶。

22、如果網絡異常或者用戶不授權,程序就沒有必要接下去操作了。對于后面兩種情況稍微有點復雜,通常對于好的程序都應該自動處理那些錯誤。第三種情況,沒有足夠的證書,這些證書是通過前面提到的回調函數返回在Bundle里面,是一個使用KEY_INTENT關鍵字的Intent。這是獲取token的前提。 15.2 使用OAuth2來進行鑒定之所以鑒定者返回一個Intent是有很多原因的。也許是用戶的Account過期或者他們存儲的證書出錯,這個時候可以使用Intent來讓用戶重新登入。也許Account需要兩個證書,或者他需要激活Camera來做某個掃描的動作進而驗證。不管到底是因為什么,如果想要一個有效的t

23、oken,你需要啟動Intent來獲取token。private class OnTokenAcquired implements AccountManagerCallback Override public void run(AccountManagerFuture result) . Intent launch = (Intent) result.get(AccountManager.KEY_INTENT); if (launch != null) startActivityForResult(launch, 0); return; 15.2 使用OAuth2來進行鑒定請注意例子中使用的是

24、startActivityForResult(),這樣我們可以在自己的Activity里面通過實現onActivityResult()的方法來獲取返回的結果。這是非常重要的,如果你沒有獲取返回的結果,那么就無法區分出用戶是否成功獲得了鑒定。如果result是RRSULT_OK,然后認證者就會更新存儲的證書,這樣就可以獲取到足夠的證書,你也可以再次執行AccountManage.getAuthToken()方法來請求新的token。最后一種情況,token過期,實際上這不是AccountManager的錯誤。唯一判斷token是否過期的方法是把token告訴Server,通過Server來告知已

25、經過期,但是不斷地去線上檢查是否過期明顯是比較浪費資源的。15.2 使用OAuth2來進行鑒定5連接到Online Service下面的例子顯示了如何連接到Google server。因為Google使用了行業標準的OAuth2協議,所以這個例子很具有代表性。請記住,盡管每一個Server是不一樣的,你仍然可以對特殊的情形進行調整。Google APIs需要你為每個請求提供4個值,分別是API key、client ID、client secret與auth key。前面三個可以從Google API的網站上找到,最后一個字段需要你通過執行AccountManager.getAuthToken

26、()方法來獲取。當都拿到之后,通過HTTP request來傳遞那些值給Google Server。15.2 使用OAuth2來進行鑒定URL url = new URL(/tasks/v1/users/me/lists?key=+your_api_key); URLConnection conn = (HttpURLConnection) url.openConnection(); conn.addRequestProperty(client_id, your client id); conn.addRequestProperty(client_secret, your client sec

27、ret); conn.setRequestProperty(Authorization, OAuth + token); 如果上面的請求返回HTTP錯誤代碼401,表明你的token被否定了。在最后一部分我們有提到,最通常的錯誤原因是token過期了,解決這個問題的方法很簡單,執行AccountManager.invalidateAuthToken()方法并且在需要的時候重復執行token的請求操作。因為token過期是如此的常見,并且修復它是那么的簡單,許多程序甚至在獲取token之前就假定它是過期的,如果Server重新生成一個token的花費并不大,我們可以直接剛開始就執行Account

28、Manager.invalidateAuthToken(),這樣就省得剛開始需要請求兩次。15.3 應用程序如何將一個帳號注冊到系統中(不講)獲取系統中注冊的帳號類型列表是一個典型的用例。比如,在手機“設置”界面中選擇“添加帳戶”,這時系統顯示一個所有支持的帳戶類型的列表界面(ChooseAccountActivity)供用戶點選。另外,在Contacts/Calendar等應用程序中,也會向系統請求創建帳戶或者顯示帳戶列表。背后的操作是統一由Android Framework提供的。應用程序只要將設置好的Intent發送出去即可。1實現自定義的賬戶密鑰首先需要做的是從用戶那獲取證書(輸入賬戶

29、與密碼后進行驗證),這個過程也許只是簡單的顯示一個對話框來輸入用戶名與密碼,或者是比較復雜的操作來獲取證書。需要實現下面的操作: (1)從用戶那收集賬戶與密碼;(2)連接到Server進行驗證;(3)把獲得的證書存儲到設備上。15.3 應用程序如何將一個帳號注冊到系統中上面三個請求通常能夠在一個Activity上實現,我們把這個Acitivity稱為Authenticator Activity。因為需要與AccountManager系統進行交互,Authenticator Activity需要比通常的Activity多做一些特定的請求。為了使得這個過程簡單化,Android Framework

30、提供了一個AccountAuthenticatorActivity來給用戶進行擴展并創建自定義的Authenticator。前面兩個操作,需要用戶輸入信息并進行驗證,第三個步驟通常像下面一樣。final Account account = new Account(mUsername, your_account_type); mAccountManager.addAccountExplicitly(account, mPassword, null); 15.3 應用程序如何將一個帳號注冊到系統中2注意安全性需要注意的是,AccountManager里面的賬戶信息是沒有加密的,它僅僅是使用plai

31、n text的方式(明文方式)來存儲那些賬戶信息。在大多數設備上,情況不是特別嚴重,因為它存儲那些信息在數據庫中,而這些數據只能是有ROOT權限的才能訪問。但是在已經有ROOT權限的設備上,證書信息可以通過adb來被任何人進行訪問。(一般來說,不應該使用AccountManager.addAccountExplicitly()方法來傳遞真實的密碼,而是使用暗文加密的方式來存儲賬戶信息。)15.3 應用程序如何將一個帳號注冊到系統中3繼承AbstractAccountAuthenticatorAbstractAccountAuthenticator的內部類Transport是IAccountAu

32、thenticator接口的一個實現。后者規定了Authenticator的一組行為。以添加帳號的操作為例,作為接口實現的Transport的addAccount()方法調用了AbstractAccountAuthenticator類的addAccount()抽象方法,這個方法的具體實現,則由應用程序中定義的Authenticator子類來完成。所以我們還需要創建一個Authenticator類去繼承AbstractAccountAuthenticator,并且實現它的抽象方法。具體有:(1)需要重寫AbstractAccountAuthenticator的7個抽象方法。(2)需要為“andr

33、oid.accounts.AccountAuthenticator”在Manifest.xml文件中增加一個intent filiter。(3)需要有兩套資源文件,自定義的賬戶名與圖標。如果查閱Android Sample中自帶的SampleSyncAdapter代碼,會發現示例中類Authenticator的addAccount方法返回的是帶有Bundle的Intent。這個Intent是用來啟動你自定義的AuthenticationActivity的。如果AuthenticationActivity需要任何特定初始化的參數,可以使用intent.putExtra()方法來附帶參數。15.3

34、 應用程序如何將一個帳號注冊到系統中4創建一個AuthenticationServiceAuthenticator需要在多個程序中可用,并且在后臺程序中運行。因此它需要在運行在一個Service里面。我們稱這個Authenticator Service,它需要具備以下設定:(1)持有一個Authenticator實例;(2)onBind()方法返回Authenticator對應的IBinder;(3)包含Authenticator的XML描述文件; (4)Manifest.xml中對應的Service聲明中包含處理“android.accounts.AccountAuthenticator”的

35、intent filter,以及指向Authenticator描述文件的標記。15.3 應用程序如何將一個帳號注冊到系統中5AccountManager的addAccount()簡要工作流程在程序中創建指定類型的系統帳號,需要提供一個ccountManagerCallback類型的回調,后面會講到其作用。本方法要求用戶添加指定類型的帳號。此種帳號類型對應的Authenticator將加載對應的UI來處理這個請求。方法返回一個AccountManagerFuture對象,可解析出一個Bundle,包含以下信息:KEY_ACCOUNT_NAME:創建的帳號的名稱。KEY_ACCOUNT_TYPE:

36、帳號類型。15.3 應用程序如何將一個帳號注冊到系統中AccountManager.addAccount()具體過程如下:(1)AccountManager初始化一個匿名的AmsTask子類實例。AmsTask是AccountManager的內部類。private abstract class AmsTask extends FutureTask implements AccountManagerFuture final IAccountManagerResponse mResponse; final Handler mHandler; final AccountManagerCallback

37、 mCallback; final Activity mActivity; public AmsTask(Activity activity, Handler handler, AccountManagerCallback callback) mHandler = handler; mCallback = callback; mActivity = activity; mResponse = new Response(); .15.3 應用程序如何將一個帳號注冊到系統中它是一個FutureTask子類,執行異步的任務,并返回結果。addAccount()中的匿名子類實現了AmsTask.doW

38、ork()方法: public AccountManagerFuture addAccount(final String accountType, final String authTokenType, final String requiredFeatures, final Bundle addAccountOptions, final Activity activity, AccountManagerCallback callback, Handler handler) . return new AmsTask(activity, handler, callback) public voi

39、d doWork() throws RemoteException mService.addAcount(mResponse, accountType, authTokenType, requiredFeatures, activity != null, optionsIn); .start(); 在doWork()方法的實現中,調用AccountManager持有的AccountManagerService的代理對象(mService)向AccountManagerService發起IPC(進程通信)。15.3 應用程序如何將一個帳號注冊到系統中(2)AccountManger調用AmsTa

40、sk匿名子類的start()方法啟動任務。(3)start()方法會調用本類的doWork()方法,在這里就是執行AccountManagerService的addAccount()操作。(4)在AccountManagerService的addAccount()這個方法中,創建一個Session類型的匿名實例,并調用其bind()方法,最終捆綁到應用程序提供的AuthenticationService。15.3 應用程序如何將一個帳號注冊到系統中(5)根據FutureTask的實現機制,在任務執行的結束時期,會調用本類的done()方法。AmsTask類覆蓋了這個方法: protected

41、void done() if (mCallback != null) postToHandler(mHandler, mCallback, this); 這里的實現調用了AccountManager.postHandler()方法。看名字就可以猜到,這里將mCallback回調對象里面的run()方法傳送給主線程的handler進行調用: private void postToHandler(Handler handler, final AccountManagerCallback callback, final AccountManagerFuture future) handler = h

42、andler = null ? mMainHandler : handler; handler.post(new Runnable() public void run() callback.run(future); ); 15.3 應用程序如何將一個帳號注冊到系統中在這一次調用中,三個參數的來源分別是:(1)handler:mHandler,即當前應用的主線程。(2)callback:這個由調用AccountManager的應用程序提供。(3)future:this,即當前AmsTask實例,它實現了AccountManagerCallback接口,包含的是跨進程執行添加帳號操作的返回結果,是

43、一個Bundle對象。Bundle對象或者包含一個Intent實例,表明帳號創建需要啟動其指定的Activity來與用戶交互,用戶將提供驗證信息,如用戶名、密碼。Bundler對象或者包含已經創建的帳號的名稱和類型。而應用程序將根據這個Bundle里面封裝的實際內容采取下一步行動。這樣,在AccountManager的范圍內,帳號創建的過程就執行完畢了。(需要注意的是,這里涉及到IPC,應用程序是服務端,提供服務的實現,而AccountManagerService則是客戶端,負責通過代理對象發起調用。)15.4 創建自定義賬戶示例(不講)1創建工程palmsuda_demo1我們在Eclips

44、e ADT中創建Android項目:palmsuda_demo1工程。詳見教學資源光盤code文件夾下第15章palmsuda_demo1工程。palmsuda_demo1工程(源碼)目錄結構和運行界面如圖15-1和圖15-2所示。圖15-1 palmsuda_demo1工程(源碼)目錄 圖15-2 添加自定義賬戶運行效果:當我們單擊手機“設置”中的“添加賬戶”時,便會在如上圖所示的“添加賬戶”界面,看到在Android系統賬戶中添加了palmsuda_demo1工程的賬戶圖標和賬戶名稱“掌上蘇大_1”。單擊“掌上蘇大_1”,則彈出“自定義賬戶Demo”界面,允許我們填入個人信息,并提交遠程服

45、務器進行驗證,并返回token,同時存入個人賬戶信息。15.4 創建自定義賬戶示例2代碼實現(1)Authenticator.java主要代碼如下:public class Authenticator extends AbstractAccountAuthenticator private static final String TAG = Authenticator;private final Context mContext;Overridepublic Bundle addAccount(AccountAuthenticatorResponse response,String accou

46、ntType, String authTokenType,String requiredFeatures, Bundle options)throws NetworkErrorException final Intent intent = new Intent(mContext, NPersoncenterAvtivity.class);intent.putExtra(NPersoncenterAvtivity.PARAM_AUTHTOKEN_TYPE,authTokenType);intent.putExtra(AccountManager.KEY_ACCOUNT_AUTHENTICATOR

47、_RESPONSE,response);final Bundle bundle = new Bundle();bundle.putParcelable(AccountManager.KEY_INTENT, intent);return bundle;15.4 創建自定義賬戶示例(2)AuthenticationService .java主要代碼如下:public class AuthenticationService extends Service private static final String TAG = AuthenticationService; private Authenti

48、cator mAuthenticator; Override public void onCreate() mAuthenticator = new Authenticator(this); Override public IBinder onBind(Intent intent) return mAuthenticator.getIBinder(); 15.4 創建自定義賬戶示例(3)在Manifest.xml中對Service進行配置: (4)此外,/palmsuda_demo1/res/xml文件夾下還有authenticator.xml和account_preferences.xml。

49、而作為用戶輸入個人信息界面的是NPersoncenterAvtivity.java。詳見教學資源光盤code文件夾下第15章palmsuda_demo1工程。第三方授權登錄微博、QQ、微信、支付寶等第三方登錄第三方支付QQ開放平臺微博登錄介紹(一)微博登錄包括身份認證、用戶關系以及內容傳播。允許用戶使用微博帳號登錄訪問第三方網站,分享內容,同步信息。它有如下特點:直接用微博賬號登錄你的網站獲得高質量微博活躍用戶更便捷的分享到微博,提高網站信息傳播力。新浪開放平臺網站接入(為網站帶來流量,社交關系和流量)移動應用(手機客戶端)站內應用(微盤)網站接入微博登錄介紹-網站接入(二)系統分配作為應用憑證自己填寫,作為登陸地址和應用簡介提供各種語言實現的SDK第三方登錄-認證步驟OAUTHWeb應用的認證授權(/wiki/%E6%8E%88%E6%9D%83%E6%9C%BA%E5%88%B6%E8%AF%B4%E6%98%8E)code 用來換取accesstoken的授權碼請求獲取Grant Code

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論