授权登录设置
目前支持第三方授权登录的平台包括:
国内平台:
微信、新浪微博、QQ、企业微信、抖音、荣耀
国外平台:Facebook、Twitter、linkedIn、kakao、VKontakte、Dropbox用户进行第三方平台授权登录时,平台提供了获取用户资料的授权接口,使用该接口可以获取该三方平台返回的所有资料(包括姓名,性别,头像等)
获取用户资料接口
获取用户资料可以使用如下接口:
mShareAPI.getPlatformInfo(UserinfoActivity.this, SHARE_MEDIA.SINA, umAuthListener);SHARE_MEDIA.SINA是指新浪平台,更多社交平台的枚举变量具体指请参考文档
其中umAuthListener为授权回调,构建如下:
UMAuthListener authListener = new UMAuthListener() {
/**
* @desc 授权开始的回调
* @param platform 平台名称
*/
@Override
public void onStart(SHARE_MEDIA platform) {
}
/**
* @desc 授权成功的回调
* @param platform 平台名称
* @param action 行为序号,开发者用不上
* @param data 用户资料返回
*/
@Override
public void onComplete(SHARE_MEDIA platform, int action, Map<String, String> data) {
Toast.makeText(mContext, "成功了", Toast.LENGTH_LONG).show();
}
/**
* @desc 授权失败的回调
* @param platform 平台名称
* @param action 行为序号,开发者用不上
* @param t 错误原因
*/
@Override
public void onError(SHARE_MEDIA platform, int action, Throwable t) {
Toast.makeText(mContext, "失败:" + t.getMessage(), Toast.LENGTH_LONG).show();
}
/**
* @desc 授权取消的回调
* @param platform 平台名称
* @param action 行为序号,开发者用不上
*/
@Override
public void onCancel(SHARE_MEDIA platform, int action) {
Toast.makeText(mContext, "取消了", Toast.LENGTH_LONG).show();
}
};注:微信授权支持本地授权(本地设置appSecret)或通过服务器授权(在服务器配置appSecret)。服务器配置微信的appSecret具体操作参照以下文档:https://developer.umeng.com/docs/143070/detail/143586如果应用程序设置了微信的appSecret,则优先使用本地授权。如果应用程序设置微信的appSecret为空字符串””,并且在服务器端配置了微信的appSecret,则使用远程服务器授权。
如您使用了U-Share的授权登录功能,欢迎尝试使用友盟+智能认证的一键登录功能。一键登录搭配授权登录,登录方式用户可选,一秒认证体验升级,优化注册率和登录率。
U-Share封装字段含义
用户授权登录成功后,第三方平台会将用户资料传回, 全部会在Map data中返回 ,由于各个平台对于用户资料的标识不同,因此为了便于开发者使用,我们将一些常用的字段做了统一封装,开发者可以直接获取,不再需要对不同平台的不同字段名做转换,这里列出我们部分平台封装的字段及含义。
UShare封装后字段名 | QQ原始字段名 | 微信原始字段名 | 新浪原始字段名 | 字段含义 | 备注 |
uid | openid | openid | id | 用户唯一标识 | uid能否实现Android与iOS平台打通,目前QQ只能实现同APPID下用户ID匹配 |
name | screen_name | nickname | screen_name | 用户昵称 | 无 |
iconurl | profile_image_url | headimgurl | profile_image_url | 用户头像 | 无 |
相关阅读:授权失败相关问题【SQ10003】QQ的unionID为空
各平台用户信息解析
在返回的map中部分平台返回的用户信息对应的key值如下
微信
微信返回的openID和unionID都可以实现用户标识的需求,二者的区别在于,unionID可以实现同一个开发者账号下的应用之间账号打通的需求
openid:uid
unionid:unionid
accesstoken: accessToken (6.2以前用access_token)
refreshtoken: refreshtoken: (6.2以前用refresh_token)
过期时间:expiration (6.2以前用expires_in)
name:name(6.2以前用screen_name)
城市:city
省份:province
国家:country
头像:iconurl(6.2以前用profile_image_url)
QQ目前uid暂时无法实现多个应用间打通操作,如需打通请使用unionID字段,该字段需要向QQ平台申请name:name(6.2以前用screen_name)
用户id(openid):uid
accesstoken: accessToken (6.2以前用access_token)
过期时间:expiration (6.2以前用expires_in)
性别:gender头像:iconurl(6.2以前用profile_image_url)
是否黄钻:is_yellow_year_vip黄钻等级:yellow_vip_level
城市:city
省份:province
新浪微博
用户id:uidaccesstoken: accessToken (6.2以前用access_token)
refreshtoken: (6.2以前用refresh_token)
过期时间:expiration (6.2以前用expires_in)
用户名:name(6.2以前用screen_name)
位置:location
头像:iconurl(6.2以前用profile_image_url)
性别:gender
关注数:followers_count
好友数:friends_count
企业微信
企业微信仅支持返回userId一个字段。userId:userId
抖音
open_id
union_id
头像:avatar
国家:country
城市:city
性别:gender
账号名称:nickname
手机号:encrypt_mobile(注:此字段需要在抖音开放平台申请权限,否则不能获取。并且返回的手机号是加密的,开发者可以调取以下解密接口获取原文手机号)
UMDYUtils.decryptMobileNumber(String encryptedMobileNumber);荣耀
用户标识:openID
头像:headPictureURL
昵称:displayName
地区编码:nationalCode
手机号:mobileNumber(注:此字段需要在荣耀开放平台申请权限,否则不能获取。并且返回的手机号是加密的,开发者可以调取以下解密接口获取原文手机号)
UMHonorUtils.decryptMobileNumber(String encryptedMobileNumber);用户id:uid(6.2以前用id)first_name:first_namelast_name:last_namemiddle_name:middle_namename:namelinkUri:linkUri头像:iconurl(6.2以前用profilePictureUri)
领英
名:firstName姓:lastName头像:iconurl(6.2以前用profile_image_url)名字:name(6.2以前用screen_name)头衔:headline国家代码:location_country_codeuid:uid所在地:location_name
授权登录高级功能
删除授权
对于退出登录,想要删除授权的用户可以使用如下接口:
UMShareAPI.get(mContext).deleteOauth(Activity, Platform, authListener);其中第一个参数为Context,第二个参数为平台,第三个参数为删除授权的回调。
判断客户端安装
如想判断出客户端是否安装,使用如下接口
mShareAPI.isInstall(this, SHARE_MEDIA.WEIXIN)设置每次登录拉取确认界面
UMShareConfig config = new UMShareConfig();
config.isNeedAuthOnGetUserInfo(true);
UMShareAPI.get(InfoDetailActivity.this).setShareConfig(config);目前SDK默认设置为在Token有效期内登录不进行二次授权,如果有需要每次登录都弹出授权页面,便于切换账号的开发者可以添加上述代码