软件开发工具:第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

提交评论