android开发之Oauth2.0

一、oauth2.0说明

由于项目需要,需要开发一个供第三方应用的sdk,主要功能就是第三方应用使用我们的A平台的用户登录,就像使用新浪微博登录第三方应用功能一样。

Oauth2.0其实是一个认证标准,主要流程是用户使用A平台的帐号登录授权B应用,这里主要有两个过程:

第一个过程是用户登录A平台之后,A平台返回一个token给B应用,这里包含有效期、刷新token等。

第二个过程是B应用根据第一步得到的token来换取有用的信息。


二、具体实现

首先考虑到sdk最终是集成在第三方应用中的,但是又要调用A平台的登录界面来登录授权,这里有两种方式实现:

1、直接弹出网页调用A平台的登录功能并返回。

参照一些大的开放平台的实现方式是,在sdk中直接弹出一个自定义的dialog,生成一个WebView添加到dialog,然后webview load A平台后台访问地址。

这里涉及到webview 中的js和android java类中的方法的相互访问问题,

webview.getSettings().setJavaScriptEnabled(true);

webview.addJavascriptInterfalse(java类实例,"向外抛给js访问的对象名 name");

假如类中有方法cancel();js中调用的结构为:window.name.cancel();即回调到java类中的cancel()。


2、是启用A平台的app,调用登录并返回结果。

这种实现是用户首先有安装A平台APP的情况下才能工作,在A的app中实现一个供第三方平台登录的activity,布局文件直接用webview,load后台界面即可。

这里涉及到android的跨app请求activity的问题。

Intent intent = new Intent();

ComponentName cn = new ComponentName(packagename, activityname);

intent.setComponent(cn);

这里注意一下,通过app的context可以判断activity是否可用:

context.getPackageManager().getpackageInfo(cn, 0);若需要访问的activity不可用会抛出NameNotFoundException。

这里被访问的activity若没有配置intent-filter的话要在manifest.xml中配置android:exported=true,否则报错。

app实现登录授权的时候涉及到了登录完成返回的一个问题,纠结了半天,参照了一下别人的是,在sdk中集成一个只处理数据的activity,oncreate方法中接收参数,然后调用监听,关闭此activity即可!


另外记录一下:

context.getPackageManager().getPackageInfo(packagename, 0);用包名可以判断一个应用是否已安装。

activity之间传递序列化的对象用Bundle。

自定义dialog,继承Dialog。


你可能感兴趣的:(android)