vivo 快游戏帐号接入文档 · vivo 接入文档 第4 页 ②...
TRANSCRIPT
vivo 接入文档
第 1 页
vivo 快游戏帐号接入文档
版本号100
修订记录
版本号 时间 变更内容
100 2018-9-12 新建
vivo 接入文档
第 2 页
目录
1 简介 3
11 缩略语和术语 3
2 接入前准备 3
21 创建 appidappsecret 和回调地址 3
22 SDK 导入 5
3 账户授权功能接入 6
31 简要说明 6
32 标准授权方式 6
321 客户端调用 SDK 获取授权码 Code【Client 对接】 7
322 应用业务服务器根据授权码获取 AccessToken【服务器对接】 8
323 根据 RefreshToken 获取新 AccessToken 【服务器对接】 9
33 简化授权方式【Client 对接】 11
34 通过 AccessToken 获取用户信息【Client 对接】 12
35 编译防混淆方法 12
4 附录-服务器签名算法 13
41 MD5 签名 13
42 MD5 签名工具 14
5 FAQ 14
vivo 接入文档
第 3 页
1 简介
本文档描述了 Vivo 授权接口的使用说明
11 缩略语和术语
缩略语术语 全称 说明
clientid 第三方服务 ID client_id 是 vivo 标识对第三
方的唯一性标识就是在接入
前申请的 appid 做为 clientid
clientsecret 第三方服务器密钥 第三方访问 vivo 的密钥用
于签名不能在公网中传输
在接入前申请的 appsecret 做
为 clientsecret
accesstoken 访问令牌 在用户授权许可下授权服务
器下发给客户端的一个授权
凭证可以用 access token 获
取用户授权的信息
refreshtoken 刷新令牌 刷新令牌的作用在于更新访
问令牌访问令牌的有效期一
般较短这样在访问令牌失效
时可以利用刷新令牌去授权
服务器换取新的访问令牌是
否需要该令牌是由第三方自
行选择
redirecturi 回调地址 应用申请后传给给 SDK 即可
接入 vivo 第三方授权之前通过 vivo 申请第三方服务 ID 和第三方服务密钥
2 接入前准备
21 创建 appidappsecret 和回调地址
您可以按照如下步骤接入 VIVO 帐号服务
① 登陆 vivo 开发者平台 devvivocomcn进入管理中心点击快游戏按钮
vivo 接入文档
第 4 页
② 点击创建快游戏并填写快游戏名称快游戏包名快游戏图标后点击立即创建
③ 在此页面中点击帐号服务即可查看 appidappsecret并点击立即启用来启用回调地址
回调地址需以 http 或 https 开头若有多个回调地址则使用半角符号 |分隔 如
httpwwwabccom|httpswwwabccom
vivo 接入文档
第 5 页
22 SDK 导入
将 BBKAccountSDK_aar 资源包拷贝到 libs 目录下aar 文件中只含有 armeabi 的 so如果应
用里面支持了多种 CPU 类型需要将其他 so 分别拷贝至对应文件下比如应用之前含有
armeabi-v7a 的 so那么需要将账户 armeabi-v7a 的 so 拷贝至原应用的 armeabi-v7a 目录中
注意如果应用是 Eclipse需要将 aar 文件解压将对应的资源文件拷贝至工程对应目录并
且需要申明授权 Activity
vivo 接入文档
第 6 页
ltactivity
androidname=combbkaccountoauthactivityAuthorizeActivity
androidtheme=androidstyleThemeNoTitleBargt
ltactivitygt
并且需要增加响应的权限说明
ltuses-permission androidname=androidpermissionGET_ACCOUNTS gt
ltuses-permission androidname=androidpermissionMANAGE_ACCOUNTS gt
ltuses-permission androidname=androidpermissionAUTHENTICATE_ACCOUNTS gt
ltuses-permission androidname=androidpermissionACCESS_NETWORK_STATE gt
ltuses-permission androidname=androidpermissionACCESS_WIFI_STATE gt
ltuses-permission androidname=androidpermissionINTERNET gt
注意Android 60以后权限需要应用去动态申请接入方需要动态申请上述权限之后才可
使用授权相关功能
3 账户授权功能接入
31 简要说明
说明使用授权功能应用首先需要创建一个 Oauth 对象创建方法如下
Oauth = new OauthBuilder(this)setAppID(APPID)setRedirectUrl(REDIRECT_URI)setSilentAuth (false)build()
其中 APPID 和 REDIRECT_URI 需要向账户平台申请setSilentAuth 设置是否静默授权【只对高版本系统账户
有效低版本使用的是 H5 登录此参数无效】如果设置为 true在授权还没有过期时不会再次弹出授权
页面
账户 SDK 提供了标准授权和简化授权两种方式
32 标准授权方式
标准授权方式授权 SDK 给应用返回授权 Code应用需要将 Code 传给应用自己的业务服务
器业务服务器再访问账户服务器获以获取 AccessToken 和 RefreshToken
标准授权方式流程图如下
vivo 接入文档
第 7 页
应用 账户SDK 应用服务器 账户服务器
1调用RequestCode
2返回code
3客户端请求业务服务器带上code
4业务服务器请求账户服务器
5账户服务器放回AccessToken和RefreshToken
6账户服务器放回AccessToken和RefreshToken
321 客户端调用 SDK 获取授权码 Code【Client 对接】
客户端代码示例
mOauthrequestCode(new OauthCallback()
Override
public void onStartLoading()
Override
public void onResult(OauthResult result)
Override
public void onEndLoading()
)
OauthResult 说明
参数 说明
statusCode 授权的结果
200授权成功
12用户取消授权
13授权失败-网络无法连接
14授权失败-其他错误
vivo 接入文档
第 8 页
code 授权码 Code
当应用接收回调或者退出当前页面时需要解注册 Listener方法如下
mOauthunRegisterOauthCallback()
322 应用业务服务器根据授权码获取 AccessToken【服务器对接】
用户在授权页同意授权后客户端会生成一个授权认证码 code应用需要将 code 传递给应用
自己的服务器由服务器获取 AccessToken 并返回给客户端
获取 AccessToken 接口说明
请求消息
协议类型HTTPS(POST请求)
数据格式Text
服务URL
httpspassportvivocomcnoauth20access_token
消息方向第三方服务-gt账户系统
请求参数
参数 参数名称 类型 必填 参数说明
基本参数
timestamp 时间戳
long 是
请求的当前时间戳时
间戳和服务器时间戳进
行校正过时间戳是自
1970 年 1 月 1 日
(000000 GMT)以来
的毫秒数
nonce 随机字符串 String 是 随机字符串
sign 签名 String 是
签名【附录有关于签名
的算法的详细说明】
业务参数
client_id 第三方服务唯一
标识 String 是
vivo 账户系统用来识别
第三服务由 vivo 分配
给第三方服务
code 授权认证码 String 是 授权认证码
grant_type 授权类型 String 是
固定值
authorization_code
redirect_uri 授权认证成功后
重定向第三方服
务 URL
String 否
授权认证成功后重定
向 URL 需要进行
UrlEncoder
scope 授权范围
String 否
scope 不填默认为
user_baseinfo表示静
默授权的用户无感
vivo 接入文档
第 9 页
知多个授权用ldquo|rdquo分
隔
示例
httpspassportvivocomcnoauth20
access_tokenclient_id=c1ebe4661cdc4bd3ab6977c3561b9deeampcode=369fb8c9b32010af974
763593f91d0afamptimestamp=1494637416356nonce=cd04cb5d00b34e16c377616cf6dd55f8
ampsign=6f4e44edd77420c67cea985d92d0f39a8ae604d2ampredirect_uri=https3a2f2fshop
vivocomcn2f3fcid3dgw_index_topbar
响应消息
expires_in3600access_token33145fb20aa24bbdd54a8ffeecc63130
state200
返回状态
状态码 提示信息
4000 无效的请求如签名不通过请求过期
4001 未授权
323 根据 RefreshToken 获取新 AccessToken 【服务器对接】
AccessToken 有效期是 24 小时当 AccessToken 过期后用 RefreshToken 获取新的
AccessTokent 和 RefreshToken原有的 AccessTokent 和 RefreshToken 会失效
刷新 AccessToken 流程图
应用 应用服务器 账户服务器
1利用RefreshToken获取新的AccessToken
3账户服务器返回RefreshTokenAccessToken
2利用RefreshToken获取新的AccessToken
4应用服务器返回AccessTokenRefreshToken
vivo 接入文档
第 10 页
接口说明
请求消息
协议类型HTTPS(POST请求)
数据格式Text
服务URL
httpspassportvivocomcnoauth20refresh_token
消息方向第三方服务-gt账户系统
请求参数
参数 参数名称 类型 必填 参数说明
基本参数
timestamp 时间戳
long 是
请求的当前时间戳时
间戳和服务器时间戳进
行校正过 时间戳是自
1970 年 1 月 1 日
(000000 GMT)以来
的毫秒数
nonce 随机字符串 String 是 随机字符串
sign 签名 String 是 签名
业务参数
client_id 第三方服务唯一
标识 String 是
vivo 账户系统用来识别
第三服务由 vivo 分配
给第三方服务
refresh_token 授权令牌 String 是 授权令牌
scope 授权范围
String 否
scope 不填默认为
user_baseinfo表示静
默授权的用户无感
知多个授权用ldquo|rdquo分
隔
示例
httpspassportvivocomcnoauth20refresh_tokenclient_id=c1ebe4661cdc4bd3ab6977c
3561b9deeamprefresht_token=eb6fc13d81331e01638eca34399f4d61amptimestamp=1502521720
086ampnonce=cd04cb5d00b34e16c377616cf6dd55f8ampsign=eee6985a0448cef2a06ace053b7e1
917
响应消息
accesstoken 18168060599
refreshtoken zhangwtest
expires_in3600
state 200
返回状态
vivo 接入文档
第 11 页
总结标准授权模式适用于有业务服务器的应用安全性
比较好
33 简化授权方式【Client 对接】
简化模式 SDK 直接返回 AccessToken 给应用不需要经过业务服务器
应用 账户SDK
1调用RequestAccessToken获取AccessToken
2SDK返回AccessToken
代码示例
mOauthrequestAccessToken(new OauthCallback()
Override
public void onStartLoading()
Override
public void onResult(OauthResult result)
Override
public void onEndLoading()
)
OauthResult 说明
参数 说明
状态码 提示信息
4000 请求无效
4001 Token 过期
vivo 接入文档
第 12 页
statusCode 授权的结果
200授权成功
12用户取消授权
13授权失败-网络无法连接
14授权失败-其他错误
accesstoken 授权 AccessToken
expireIn AccessToken 的有效期单位是秒
当应用接收回调或者退出当前页面时需要解注册 Listener方法如下
mOauthunRegisterOauthCallback()
总结简化授权模式流程简单适用于没有业务服务器的应用安全性比较弱
34 通过 AccessToken 获取用户信息【Client 对接】
无论是标准授权方式还是简化授权方式应用最后都会获得 AccessToken利用 AccessToken
可以获取用户信息
mOauthrequestUserInfo(mAccessToken new UserInfoCallback()
Override
public void onUseInfoResult(UserInfoResult data)
)
参数 说明
statusCode 授权的结果
200成功
4000请求无效
5001Token 过期
5002授权不足
5003Token 无效
openid 用户的唯一标识
nickname 用户的昵称
avatar 用户的头像地址
当应用接收到回调或者退出当前页面时需要解注册 Listener方法如下
mOauthunRegisterUserInfoCallback()
35 编译防混淆方法
添加混淆的应用需要添加以下方法防混淆sdk
vivo 接入文档
第 13 页
-keep class combbkaccount
-keep public class comvivoic
-dontwarn comvivoic
4 附录-服务器签名算法
41 MD5 签名
1生成待签名的字符串
在请求参数中除去签名参数(即 sign)把其它的参数按照字段的顺序排序排序完成
后再把所有的参数用amp符号连接起来这样就完成了待签名的字符串
2签名
目前暂只支持 MD5 签名
MD5 是一种摘要生成算法通过在签名原始串后加上第三方的 CientSecret(接入前申请的
APPSECRET)密钥的内容进行 MD5 运算形成的摘要字符串即为签名结果
第三方可以使用提供的工具类把所有请求所求参数放到 Map 中生成 paraMap用第三方服务
申请的 client_id(接入前申请的 APPID)对应的 client_secret(接入前申请的 APPSECRET)作为签
名密钥调用 PartnerSignUtil 的 sign 方法生成生成签名作为参数放在 url 后即可
如 client_secret 4e53b6bf60659b3547637247f3c2d1b9
sign=MD5(text+client_secret)=(client_id=c1ebe4661cdc4bd3ab6977c3561b9deeampcode=386cdb37
4a742522848d63fd05b2a22bampgrant_type=authorization_codeampnonce=08a36077414d5f076cd9a587
9fd741f5amptimestamp=1502855224 + 4e53b6bf60659b3547637247f3c2d1b9)
签名字符串
param paraMap 需要签名的参数Map
param key 签名的密钥
return 签名结果
public static String sign(MapltString Stringgt paraMap String key)
String saltValue = key
return MD5SignUtilsign(paraMap saltValue SIGNATURE)
vivo 接入文档
第 14 页
42 MD5 签名工具
MD5SignUtiljava PartnerSignUtiljava
5 FAQ
1 接入了 SDK为什么都是 H5 登录
答授权 SDK 会根据 vivo 手机内置的账户 apk 版本决定使用 H5 登录还是 Native 登录当
没有账户 apk 或者账户 apk 版本过低时采用 H5 登录
2 接入了 SDK但是一直无法调用器授权页面或者调用页面异常
(1) 请确认是否申请了 SDK 所需要的权限Android 60 以后权限需要应用去动态申请接
入方需要动态申请上述权限之后才可使用授权相关功能
(2) 请确认各 cpu 架构的 so 是否拷贝完全aar 文件中只有 armv6 的 so其他的 so 需要
手动拷贝
vivo 接入文档
第 2 页
目录
1 简介 3
11 缩略语和术语 3
2 接入前准备 3
21 创建 appidappsecret 和回调地址 3
22 SDK 导入 5
3 账户授权功能接入 6
31 简要说明 6
32 标准授权方式 6
321 客户端调用 SDK 获取授权码 Code【Client 对接】 7
322 应用业务服务器根据授权码获取 AccessToken【服务器对接】 8
323 根据 RefreshToken 获取新 AccessToken 【服务器对接】 9
33 简化授权方式【Client 对接】 11
34 通过 AccessToken 获取用户信息【Client 对接】 12
35 编译防混淆方法 12
4 附录-服务器签名算法 13
41 MD5 签名 13
42 MD5 签名工具 14
5 FAQ 14
vivo 接入文档
第 3 页
1 简介
本文档描述了 Vivo 授权接口的使用说明
11 缩略语和术语
缩略语术语 全称 说明
clientid 第三方服务 ID client_id 是 vivo 标识对第三
方的唯一性标识就是在接入
前申请的 appid 做为 clientid
clientsecret 第三方服务器密钥 第三方访问 vivo 的密钥用
于签名不能在公网中传输
在接入前申请的 appsecret 做
为 clientsecret
accesstoken 访问令牌 在用户授权许可下授权服务
器下发给客户端的一个授权
凭证可以用 access token 获
取用户授权的信息
refreshtoken 刷新令牌 刷新令牌的作用在于更新访
问令牌访问令牌的有效期一
般较短这样在访问令牌失效
时可以利用刷新令牌去授权
服务器换取新的访问令牌是
否需要该令牌是由第三方自
行选择
redirecturi 回调地址 应用申请后传给给 SDK 即可
接入 vivo 第三方授权之前通过 vivo 申请第三方服务 ID 和第三方服务密钥
2 接入前准备
21 创建 appidappsecret 和回调地址
您可以按照如下步骤接入 VIVO 帐号服务
① 登陆 vivo 开发者平台 devvivocomcn进入管理中心点击快游戏按钮
vivo 接入文档
第 4 页
② 点击创建快游戏并填写快游戏名称快游戏包名快游戏图标后点击立即创建
③ 在此页面中点击帐号服务即可查看 appidappsecret并点击立即启用来启用回调地址
回调地址需以 http 或 https 开头若有多个回调地址则使用半角符号 |分隔 如
httpwwwabccom|httpswwwabccom
vivo 接入文档
第 5 页
22 SDK 导入
将 BBKAccountSDK_aar 资源包拷贝到 libs 目录下aar 文件中只含有 armeabi 的 so如果应
用里面支持了多种 CPU 类型需要将其他 so 分别拷贝至对应文件下比如应用之前含有
armeabi-v7a 的 so那么需要将账户 armeabi-v7a 的 so 拷贝至原应用的 armeabi-v7a 目录中
注意如果应用是 Eclipse需要将 aar 文件解压将对应的资源文件拷贝至工程对应目录并
且需要申明授权 Activity
vivo 接入文档
第 6 页
ltactivity
androidname=combbkaccountoauthactivityAuthorizeActivity
androidtheme=androidstyleThemeNoTitleBargt
ltactivitygt
并且需要增加响应的权限说明
ltuses-permission androidname=androidpermissionGET_ACCOUNTS gt
ltuses-permission androidname=androidpermissionMANAGE_ACCOUNTS gt
ltuses-permission androidname=androidpermissionAUTHENTICATE_ACCOUNTS gt
ltuses-permission androidname=androidpermissionACCESS_NETWORK_STATE gt
ltuses-permission androidname=androidpermissionACCESS_WIFI_STATE gt
ltuses-permission androidname=androidpermissionINTERNET gt
注意Android 60以后权限需要应用去动态申请接入方需要动态申请上述权限之后才可
使用授权相关功能
3 账户授权功能接入
31 简要说明
说明使用授权功能应用首先需要创建一个 Oauth 对象创建方法如下
Oauth = new OauthBuilder(this)setAppID(APPID)setRedirectUrl(REDIRECT_URI)setSilentAuth (false)build()
其中 APPID 和 REDIRECT_URI 需要向账户平台申请setSilentAuth 设置是否静默授权【只对高版本系统账户
有效低版本使用的是 H5 登录此参数无效】如果设置为 true在授权还没有过期时不会再次弹出授权
页面
账户 SDK 提供了标准授权和简化授权两种方式
32 标准授权方式
标准授权方式授权 SDK 给应用返回授权 Code应用需要将 Code 传给应用自己的业务服务
器业务服务器再访问账户服务器获以获取 AccessToken 和 RefreshToken
标准授权方式流程图如下
vivo 接入文档
第 7 页
应用 账户SDK 应用服务器 账户服务器
1调用RequestCode
2返回code
3客户端请求业务服务器带上code
4业务服务器请求账户服务器
5账户服务器放回AccessToken和RefreshToken
6账户服务器放回AccessToken和RefreshToken
321 客户端调用 SDK 获取授权码 Code【Client 对接】
客户端代码示例
mOauthrequestCode(new OauthCallback()
Override
public void onStartLoading()
Override
public void onResult(OauthResult result)
Override
public void onEndLoading()
)
OauthResult 说明
参数 说明
statusCode 授权的结果
200授权成功
12用户取消授权
13授权失败-网络无法连接
14授权失败-其他错误
vivo 接入文档
第 8 页
code 授权码 Code
当应用接收回调或者退出当前页面时需要解注册 Listener方法如下
mOauthunRegisterOauthCallback()
322 应用业务服务器根据授权码获取 AccessToken【服务器对接】
用户在授权页同意授权后客户端会生成一个授权认证码 code应用需要将 code 传递给应用
自己的服务器由服务器获取 AccessToken 并返回给客户端
获取 AccessToken 接口说明
请求消息
协议类型HTTPS(POST请求)
数据格式Text
服务URL
httpspassportvivocomcnoauth20access_token
消息方向第三方服务-gt账户系统
请求参数
参数 参数名称 类型 必填 参数说明
基本参数
timestamp 时间戳
long 是
请求的当前时间戳时
间戳和服务器时间戳进
行校正过时间戳是自
1970 年 1 月 1 日
(000000 GMT)以来
的毫秒数
nonce 随机字符串 String 是 随机字符串
sign 签名 String 是
签名【附录有关于签名
的算法的详细说明】
业务参数
client_id 第三方服务唯一
标识 String 是
vivo 账户系统用来识别
第三服务由 vivo 分配
给第三方服务
code 授权认证码 String 是 授权认证码
grant_type 授权类型 String 是
固定值
authorization_code
redirect_uri 授权认证成功后
重定向第三方服
务 URL
String 否
授权认证成功后重定
向 URL 需要进行
UrlEncoder
scope 授权范围
String 否
scope 不填默认为
user_baseinfo表示静
默授权的用户无感
vivo 接入文档
第 9 页
知多个授权用ldquo|rdquo分
隔
示例
httpspassportvivocomcnoauth20
access_tokenclient_id=c1ebe4661cdc4bd3ab6977c3561b9deeampcode=369fb8c9b32010af974
763593f91d0afamptimestamp=1494637416356nonce=cd04cb5d00b34e16c377616cf6dd55f8
ampsign=6f4e44edd77420c67cea985d92d0f39a8ae604d2ampredirect_uri=https3a2f2fshop
vivocomcn2f3fcid3dgw_index_topbar
响应消息
expires_in3600access_token33145fb20aa24bbdd54a8ffeecc63130
state200
返回状态
状态码 提示信息
4000 无效的请求如签名不通过请求过期
4001 未授权
323 根据 RefreshToken 获取新 AccessToken 【服务器对接】
AccessToken 有效期是 24 小时当 AccessToken 过期后用 RefreshToken 获取新的
AccessTokent 和 RefreshToken原有的 AccessTokent 和 RefreshToken 会失效
刷新 AccessToken 流程图
应用 应用服务器 账户服务器
1利用RefreshToken获取新的AccessToken
3账户服务器返回RefreshTokenAccessToken
2利用RefreshToken获取新的AccessToken
4应用服务器返回AccessTokenRefreshToken
vivo 接入文档
第 10 页
接口说明
请求消息
协议类型HTTPS(POST请求)
数据格式Text
服务URL
httpspassportvivocomcnoauth20refresh_token
消息方向第三方服务-gt账户系统
请求参数
参数 参数名称 类型 必填 参数说明
基本参数
timestamp 时间戳
long 是
请求的当前时间戳时
间戳和服务器时间戳进
行校正过 时间戳是自
1970 年 1 月 1 日
(000000 GMT)以来
的毫秒数
nonce 随机字符串 String 是 随机字符串
sign 签名 String 是 签名
业务参数
client_id 第三方服务唯一
标识 String 是
vivo 账户系统用来识别
第三服务由 vivo 分配
给第三方服务
refresh_token 授权令牌 String 是 授权令牌
scope 授权范围
String 否
scope 不填默认为
user_baseinfo表示静
默授权的用户无感
知多个授权用ldquo|rdquo分
隔
示例
httpspassportvivocomcnoauth20refresh_tokenclient_id=c1ebe4661cdc4bd3ab6977c
3561b9deeamprefresht_token=eb6fc13d81331e01638eca34399f4d61amptimestamp=1502521720
086ampnonce=cd04cb5d00b34e16c377616cf6dd55f8ampsign=eee6985a0448cef2a06ace053b7e1
917
响应消息
accesstoken 18168060599
refreshtoken zhangwtest
expires_in3600
state 200
返回状态
vivo 接入文档
第 11 页
总结标准授权模式适用于有业务服务器的应用安全性
比较好
33 简化授权方式【Client 对接】
简化模式 SDK 直接返回 AccessToken 给应用不需要经过业务服务器
应用 账户SDK
1调用RequestAccessToken获取AccessToken
2SDK返回AccessToken
代码示例
mOauthrequestAccessToken(new OauthCallback()
Override
public void onStartLoading()
Override
public void onResult(OauthResult result)
Override
public void onEndLoading()
)
OauthResult 说明
参数 说明
状态码 提示信息
4000 请求无效
4001 Token 过期
vivo 接入文档
第 12 页
statusCode 授权的结果
200授权成功
12用户取消授权
13授权失败-网络无法连接
14授权失败-其他错误
accesstoken 授权 AccessToken
expireIn AccessToken 的有效期单位是秒
当应用接收回调或者退出当前页面时需要解注册 Listener方法如下
mOauthunRegisterOauthCallback()
总结简化授权模式流程简单适用于没有业务服务器的应用安全性比较弱
34 通过 AccessToken 获取用户信息【Client 对接】
无论是标准授权方式还是简化授权方式应用最后都会获得 AccessToken利用 AccessToken
可以获取用户信息
mOauthrequestUserInfo(mAccessToken new UserInfoCallback()
Override
public void onUseInfoResult(UserInfoResult data)
)
参数 说明
statusCode 授权的结果
200成功
4000请求无效
5001Token 过期
5002授权不足
5003Token 无效
openid 用户的唯一标识
nickname 用户的昵称
avatar 用户的头像地址
当应用接收到回调或者退出当前页面时需要解注册 Listener方法如下
mOauthunRegisterUserInfoCallback()
35 编译防混淆方法
添加混淆的应用需要添加以下方法防混淆sdk
vivo 接入文档
第 13 页
-keep class combbkaccount
-keep public class comvivoic
-dontwarn comvivoic
4 附录-服务器签名算法
41 MD5 签名
1生成待签名的字符串
在请求参数中除去签名参数(即 sign)把其它的参数按照字段的顺序排序排序完成
后再把所有的参数用amp符号连接起来这样就完成了待签名的字符串
2签名
目前暂只支持 MD5 签名
MD5 是一种摘要生成算法通过在签名原始串后加上第三方的 CientSecret(接入前申请的
APPSECRET)密钥的内容进行 MD5 运算形成的摘要字符串即为签名结果
第三方可以使用提供的工具类把所有请求所求参数放到 Map 中生成 paraMap用第三方服务
申请的 client_id(接入前申请的 APPID)对应的 client_secret(接入前申请的 APPSECRET)作为签
名密钥调用 PartnerSignUtil 的 sign 方法生成生成签名作为参数放在 url 后即可
如 client_secret 4e53b6bf60659b3547637247f3c2d1b9
sign=MD5(text+client_secret)=(client_id=c1ebe4661cdc4bd3ab6977c3561b9deeampcode=386cdb37
4a742522848d63fd05b2a22bampgrant_type=authorization_codeampnonce=08a36077414d5f076cd9a587
9fd741f5amptimestamp=1502855224 + 4e53b6bf60659b3547637247f3c2d1b9)
签名字符串
param paraMap 需要签名的参数Map
param key 签名的密钥
return 签名结果
public static String sign(MapltString Stringgt paraMap String key)
String saltValue = key
return MD5SignUtilsign(paraMap saltValue SIGNATURE)
vivo 接入文档
第 14 页
42 MD5 签名工具
MD5SignUtiljava PartnerSignUtiljava
5 FAQ
1 接入了 SDK为什么都是 H5 登录
答授权 SDK 会根据 vivo 手机内置的账户 apk 版本决定使用 H5 登录还是 Native 登录当
没有账户 apk 或者账户 apk 版本过低时采用 H5 登录
2 接入了 SDK但是一直无法调用器授权页面或者调用页面异常
(1) 请确认是否申请了 SDK 所需要的权限Android 60 以后权限需要应用去动态申请接
入方需要动态申请上述权限之后才可使用授权相关功能
(2) 请确认各 cpu 架构的 so 是否拷贝完全aar 文件中只有 armv6 的 so其他的 so 需要
手动拷贝
vivo 接入文档
第 3 页
1 简介
本文档描述了 Vivo 授权接口的使用说明
11 缩略语和术语
缩略语术语 全称 说明
clientid 第三方服务 ID client_id 是 vivo 标识对第三
方的唯一性标识就是在接入
前申请的 appid 做为 clientid
clientsecret 第三方服务器密钥 第三方访问 vivo 的密钥用
于签名不能在公网中传输
在接入前申请的 appsecret 做
为 clientsecret
accesstoken 访问令牌 在用户授权许可下授权服务
器下发给客户端的一个授权
凭证可以用 access token 获
取用户授权的信息
refreshtoken 刷新令牌 刷新令牌的作用在于更新访
问令牌访问令牌的有效期一
般较短这样在访问令牌失效
时可以利用刷新令牌去授权
服务器换取新的访问令牌是
否需要该令牌是由第三方自
行选择
redirecturi 回调地址 应用申请后传给给 SDK 即可
接入 vivo 第三方授权之前通过 vivo 申请第三方服务 ID 和第三方服务密钥
2 接入前准备
21 创建 appidappsecret 和回调地址
您可以按照如下步骤接入 VIVO 帐号服务
① 登陆 vivo 开发者平台 devvivocomcn进入管理中心点击快游戏按钮
vivo 接入文档
第 4 页
② 点击创建快游戏并填写快游戏名称快游戏包名快游戏图标后点击立即创建
③ 在此页面中点击帐号服务即可查看 appidappsecret并点击立即启用来启用回调地址
回调地址需以 http 或 https 开头若有多个回调地址则使用半角符号 |分隔 如
httpwwwabccom|httpswwwabccom
vivo 接入文档
第 5 页
22 SDK 导入
将 BBKAccountSDK_aar 资源包拷贝到 libs 目录下aar 文件中只含有 armeabi 的 so如果应
用里面支持了多种 CPU 类型需要将其他 so 分别拷贝至对应文件下比如应用之前含有
armeabi-v7a 的 so那么需要将账户 armeabi-v7a 的 so 拷贝至原应用的 armeabi-v7a 目录中
注意如果应用是 Eclipse需要将 aar 文件解压将对应的资源文件拷贝至工程对应目录并
且需要申明授权 Activity
vivo 接入文档
第 6 页
ltactivity
androidname=combbkaccountoauthactivityAuthorizeActivity
androidtheme=androidstyleThemeNoTitleBargt
ltactivitygt
并且需要增加响应的权限说明
ltuses-permission androidname=androidpermissionGET_ACCOUNTS gt
ltuses-permission androidname=androidpermissionMANAGE_ACCOUNTS gt
ltuses-permission androidname=androidpermissionAUTHENTICATE_ACCOUNTS gt
ltuses-permission androidname=androidpermissionACCESS_NETWORK_STATE gt
ltuses-permission androidname=androidpermissionACCESS_WIFI_STATE gt
ltuses-permission androidname=androidpermissionINTERNET gt
注意Android 60以后权限需要应用去动态申请接入方需要动态申请上述权限之后才可
使用授权相关功能
3 账户授权功能接入
31 简要说明
说明使用授权功能应用首先需要创建一个 Oauth 对象创建方法如下
Oauth = new OauthBuilder(this)setAppID(APPID)setRedirectUrl(REDIRECT_URI)setSilentAuth (false)build()
其中 APPID 和 REDIRECT_URI 需要向账户平台申请setSilentAuth 设置是否静默授权【只对高版本系统账户
有效低版本使用的是 H5 登录此参数无效】如果设置为 true在授权还没有过期时不会再次弹出授权
页面
账户 SDK 提供了标准授权和简化授权两种方式
32 标准授权方式
标准授权方式授权 SDK 给应用返回授权 Code应用需要将 Code 传给应用自己的业务服务
器业务服务器再访问账户服务器获以获取 AccessToken 和 RefreshToken
标准授权方式流程图如下
vivo 接入文档
第 7 页
应用 账户SDK 应用服务器 账户服务器
1调用RequestCode
2返回code
3客户端请求业务服务器带上code
4业务服务器请求账户服务器
5账户服务器放回AccessToken和RefreshToken
6账户服务器放回AccessToken和RefreshToken
321 客户端调用 SDK 获取授权码 Code【Client 对接】
客户端代码示例
mOauthrequestCode(new OauthCallback()
Override
public void onStartLoading()
Override
public void onResult(OauthResult result)
Override
public void onEndLoading()
)
OauthResult 说明
参数 说明
statusCode 授权的结果
200授权成功
12用户取消授权
13授权失败-网络无法连接
14授权失败-其他错误
vivo 接入文档
第 8 页
code 授权码 Code
当应用接收回调或者退出当前页面时需要解注册 Listener方法如下
mOauthunRegisterOauthCallback()
322 应用业务服务器根据授权码获取 AccessToken【服务器对接】
用户在授权页同意授权后客户端会生成一个授权认证码 code应用需要将 code 传递给应用
自己的服务器由服务器获取 AccessToken 并返回给客户端
获取 AccessToken 接口说明
请求消息
协议类型HTTPS(POST请求)
数据格式Text
服务URL
httpspassportvivocomcnoauth20access_token
消息方向第三方服务-gt账户系统
请求参数
参数 参数名称 类型 必填 参数说明
基本参数
timestamp 时间戳
long 是
请求的当前时间戳时
间戳和服务器时间戳进
行校正过时间戳是自
1970 年 1 月 1 日
(000000 GMT)以来
的毫秒数
nonce 随机字符串 String 是 随机字符串
sign 签名 String 是
签名【附录有关于签名
的算法的详细说明】
业务参数
client_id 第三方服务唯一
标识 String 是
vivo 账户系统用来识别
第三服务由 vivo 分配
给第三方服务
code 授权认证码 String 是 授权认证码
grant_type 授权类型 String 是
固定值
authorization_code
redirect_uri 授权认证成功后
重定向第三方服
务 URL
String 否
授权认证成功后重定
向 URL 需要进行
UrlEncoder
scope 授权范围
String 否
scope 不填默认为
user_baseinfo表示静
默授权的用户无感
vivo 接入文档
第 9 页
知多个授权用ldquo|rdquo分
隔
示例
httpspassportvivocomcnoauth20
access_tokenclient_id=c1ebe4661cdc4bd3ab6977c3561b9deeampcode=369fb8c9b32010af974
763593f91d0afamptimestamp=1494637416356nonce=cd04cb5d00b34e16c377616cf6dd55f8
ampsign=6f4e44edd77420c67cea985d92d0f39a8ae604d2ampredirect_uri=https3a2f2fshop
vivocomcn2f3fcid3dgw_index_topbar
响应消息
expires_in3600access_token33145fb20aa24bbdd54a8ffeecc63130
state200
返回状态
状态码 提示信息
4000 无效的请求如签名不通过请求过期
4001 未授权
323 根据 RefreshToken 获取新 AccessToken 【服务器对接】
AccessToken 有效期是 24 小时当 AccessToken 过期后用 RefreshToken 获取新的
AccessTokent 和 RefreshToken原有的 AccessTokent 和 RefreshToken 会失效
刷新 AccessToken 流程图
应用 应用服务器 账户服务器
1利用RefreshToken获取新的AccessToken
3账户服务器返回RefreshTokenAccessToken
2利用RefreshToken获取新的AccessToken
4应用服务器返回AccessTokenRefreshToken
vivo 接入文档
第 10 页
接口说明
请求消息
协议类型HTTPS(POST请求)
数据格式Text
服务URL
httpspassportvivocomcnoauth20refresh_token
消息方向第三方服务-gt账户系统
请求参数
参数 参数名称 类型 必填 参数说明
基本参数
timestamp 时间戳
long 是
请求的当前时间戳时
间戳和服务器时间戳进
行校正过 时间戳是自
1970 年 1 月 1 日
(000000 GMT)以来
的毫秒数
nonce 随机字符串 String 是 随机字符串
sign 签名 String 是 签名
业务参数
client_id 第三方服务唯一
标识 String 是
vivo 账户系统用来识别
第三服务由 vivo 分配
给第三方服务
refresh_token 授权令牌 String 是 授权令牌
scope 授权范围
String 否
scope 不填默认为
user_baseinfo表示静
默授权的用户无感
知多个授权用ldquo|rdquo分
隔
示例
httpspassportvivocomcnoauth20refresh_tokenclient_id=c1ebe4661cdc4bd3ab6977c
3561b9deeamprefresht_token=eb6fc13d81331e01638eca34399f4d61amptimestamp=1502521720
086ampnonce=cd04cb5d00b34e16c377616cf6dd55f8ampsign=eee6985a0448cef2a06ace053b7e1
917
响应消息
accesstoken 18168060599
refreshtoken zhangwtest
expires_in3600
state 200
返回状态
vivo 接入文档
第 11 页
总结标准授权模式适用于有业务服务器的应用安全性
比较好
33 简化授权方式【Client 对接】
简化模式 SDK 直接返回 AccessToken 给应用不需要经过业务服务器
应用 账户SDK
1调用RequestAccessToken获取AccessToken
2SDK返回AccessToken
代码示例
mOauthrequestAccessToken(new OauthCallback()
Override
public void onStartLoading()
Override
public void onResult(OauthResult result)
Override
public void onEndLoading()
)
OauthResult 说明
参数 说明
状态码 提示信息
4000 请求无效
4001 Token 过期
vivo 接入文档
第 12 页
statusCode 授权的结果
200授权成功
12用户取消授权
13授权失败-网络无法连接
14授权失败-其他错误
accesstoken 授权 AccessToken
expireIn AccessToken 的有效期单位是秒
当应用接收回调或者退出当前页面时需要解注册 Listener方法如下
mOauthunRegisterOauthCallback()
总结简化授权模式流程简单适用于没有业务服务器的应用安全性比较弱
34 通过 AccessToken 获取用户信息【Client 对接】
无论是标准授权方式还是简化授权方式应用最后都会获得 AccessToken利用 AccessToken
可以获取用户信息
mOauthrequestUserInfo(mAccessToken new UserInfoCallback()
Override
public void onUseInfoResult(UserInfoResult data)
)
参数 说明
statusCode 授权的结果
200成功
4000请求无效
5001Token 过期
5002授权不足
5003Token 无效
openid 用户的唯一标识
nickname 用户的昵称
avatar 用户的头像地址
当应用接收到回调或者退出当前页面时需要解注册 Listener方法如下
mOauthunRegisterUserInfoCallback()
35 编译防混淆方法
添加混淆的应用需要添加以下方法防混淆sdk
vivo 接入文档
第 13 页
-keep class combbkaccount
-keep public class comvivoic
-dontwarn comvivoic
4 附录-服务器签名算法
41 MD5 签名
1生成待签名的字符串
在请求参数中除去签名参数(即 sign)把其它的参数按照字段的顺序排序排序完成
后再把所有的参数用amp符号连接起来这样就完成了待签名的字符串
2签名
目前暂只支持 MD5 签名
MD5 是一种摘要生成算法通过在签名原始串后加上第三方的 CientSecret(接入前申请的
APPSECRET)密钥的内容进行 MD5 运算形成的摘要字符串即为签名结果
第三方可以使用提供的工具类把所有请求所求参数放到 Map 中生成 paraMap用第三方服务
申请的 client_id(接入前申请的 APPID)对应的 client_secret(接入前申请的 APPSECRET)作为签
名密钥调用 PartnerSignUtil 的 sign 方法生成生成签名作为参数放在 url 后即可
如 client_secret 4e53b6bf60659b3547637247f3c2d1b9
sign=MD5(text+client_secret)=(client_id=c1ebe4661cdc4bd3ab6977c3561b9deeampcode=386cdb37
4a742522848d63fd05b2a22bampgrant_type=authorization_codeampnonce=08a36077414d5f076cd9a587
9fd741f5amptimestamp=1502855224 + 4e53b6bf60659b3547637247f3c2d1b9)
签名字符串
param paraMap 需要签名的参数Map
param key 签名的密钥
return 签名结果
public static String sign(MapltString Stringgt paraMap String key)
String saltValue = key
return MD5SignUtilsign(paraMap saltValue SIGNATURE)
vivo 接入文档
第 14 页
42 MD5 签名工具
MD5SignUtiljava PartnerSignUtiljava
5 FAQ
1 接入了 SDK为什么都是 H5 登录
答授权 SDK 会根据 vivo 手机内置的账户 apk 版本决定使用 H5 登录还是 Native 登录当
没有账户 apk 或者账户 apk 版本过低时采用 H5 登录
2 接入了 SDK但是一直无法调用器授权页面或者调用页面异常
(1) 请确认是否申请了 SDK 所需要的权限Android 60 以后权限需要应用去动态申请接
入方需要动态申请上述权限之后才可使用授权相关功能
(2) 请确认各 cpu 架构的 so 是否拷贝完全aar 文件中只有 armv6 的 so其他的 so 需要
手动拷贝
vivo 接入文档
第 4 页
② 点击创建快游戏并填写快游戏名称快游戏包名快游戏图标后点击立即创建
③ 在此页面中点击帐号服务即可查看 appidappsecret并点击立即启用来启用回调地址
回调地址需以 http 或 https 开头若有多个回调地址则使用半角符号 |分隔 如
httpwwwabccom|httpswwwabccom
vivo 接入文档
第 5 页
22 SDK 导入
将 BBKAccountSDK_aar 资源包拷贝到 libs 目录下aar 文件中只含有 armeabi 的 so如果应
用里面支持了多种 CPU 类型需要将其他 so 分别拷贝至对应文件下比如应用之前含有
armeabi-v7a 的 so那么需要将账户 armeabi-v7a 的 so 拷贝至原应用的 armeabi-v7a 目录中
注意如果应用是 Eclipse需要将 aar 文件解压将对应的资源文件拷贝至工程对应目录并
且需要申明授权 Activity
vivo 接入文档
第 6 页
ltactivity
androidname=combbkaccountoauthactivityAuthorizeActivity
androidtheme=androidstyleThemeNoTitleBargt
ltactivitygt
并且需要增加响应的权限说明
ltuses-permission androidname=androidpermissionGET_ACCOUNTS gt
ltuses-permission androidname=androidpermissionMANAGE_ACCOUNTS gt
ltuses-permission androidname=androidpermissionAUTHENTICATE_ACCOUNTS gt
ltuses-permission androidname=androidpermissionACCESS_NETWORK_STATE gt
ltuses-permission androidname=androidpermissionACCESS_WIFI_STATE gt
ltuses-permission androidname=androidpermissionINTERNET gt
注意Android 60以后权限需要应用去动态申请接入方需要动态申请上述权限之后才可
使用授权相关功能
3 账户授权功能接入
31 简要说明
说明使用授权功能应用首先需要创建一个 Oauth 对象创建方法如下
Oauth = new OauthBuilder(this)setAppID(APPID)setRedirectUrl(REDIRECT_URI)setSilentAuth (false)build()
其中 APPID 和 REDIRECT_URI 需要向账户平台申请setSilentAuth 设置是否静默授权【只对高版本系统账户
有效低版本使用的是 H5 登录此参数无效】如果设置为 true在授权还没有过期时不会再次弹出授权
页面
账户 SDK 提供了标准授权和简化授权两种方式
32 标准授权方式
标准授权方式授权 SDK 给应用返回授权 Code应用需要将 Code 传给应用自己的业务服务
器业务服务器再访问账户服务器获以获取 AccessToken 和 RefreshToken
标准授权方式流程图如下
vivo 接入文档
第 7 页
应用 账户SDK 应用服务器 账户服务器
1调用RequestCode
2返回code
3客户端请求业务服务器带上code
4业务服务器请求账户服务器
5账户服务器放回AccessToken和RefreshToken
6账户服务器放回AccessToken和RefreshToken
321 客户端调用 SDK 获取授权码 Code【Client 对接】
客户端代码示例
mOauthrequestCode(new OauthCallback()
Override
public void onStartLoading()
Override
public void onResult(OauthResult result)
Override
public void onEndLoading()
)
OauthResult 说明
参数 说明
statusCode 授权的结果
200授权成功
12用户取消授权
13授权失败-网络无法连接
14授权失败-其他错误
vivo 接入文档
第 8 页
code 授权码 Code
当应用接收回调或者退出当前页面时需要解注册 Listener方法如下
mOauthunRegisterOauthCallback()
322 应用业务服务器根据授权码获取 AccessToken【服务器对接】
用户在授权页同意授权后客户端会生成一个授权认证码 code应用需要将 code 传递给应用
自己的服务器由服务器获取 AccessToken 并返回给客户端
获取 AccessToken 接口说明
请求消息
协议类型HTTPS(POST请求)
数据格式Text
服务URL
httpspassportvivocomcnoauth20access_token
消息方向第三方服务-gt账户系统
请求参数
参数 参数名称 类型 必填 参数说明
基本参数
timestamp 时间戳
long 是
请求的当前时间戳时
间戳和服务器时间戳进
行校正过时间戳是自
1970 年 1 月 1 日
(000000 GMT)以来
的毫秒数
nonce 随机字符串 String 是 随机字符串
sign 签名 String 是
签名【附录有关于签名
的算法的详细说明】
业务参数
client_id 第三方服务唯一
标识 String 是
vivo 账户系统用来识别
第三服务由 vivo 分配
给第三方服务
code 授权认证码 String 是 授权认证码
grant_type 授权类型 String 是
固定值
authorization_code
redirect_uri 授权认证成功后
重定向第三方服
务 URL
String 否
授权认证成功后重定
向 URL 需要进行
UrlEncoder
scope 授权范围
String 否
scope 不填默认为
user_baseinfo表示静
默授权的用户无感
vivo 接入文档
第 9 页
知多个授权用ldquo|rdquo分
隔
示例
httpspassportvivocomcnoauth20
access_tokenclient_id=c1ebe4661cdc4bd3ab6977c3561b9deeampcode=369fb8c9b32010af974
763593f91d0afamptimestamp=1494637416356nonce=cd04cb5d00b34e16c377616cf6dd55f8
ampsign=6f4e44edd77420c67cea985d92d0f39a8ae604d2ampredirect_uri=https3a2f2fshop
vivocomcn2f3fcid3dgw_index_topbar
响应消息
expires_in3600access_token33145fb20aa24bbdd54a8ffeecc63130
state200
返回状态
状态码 提示信息
4000 无效的请求如签名不通过请求过期
4001 未授权
323 根据 RefreshToken 获取新 AccessToken 【服务器对接】
AccessToken 有效期是 24 小时当 AccessToken 过期后用 RefreshToken 获取新的
AccessTokent 和 RefreshToken原有的 AccessTokent 和 RefreshToken 会失效
刷新 AccessToken 流程图
应用 应用服务器 账户服务器
1利用RefreshToken获取新的AccessToken
3账户服务器返回RefreshTokenAccessToken
2利用RefreshToken获取新的AccessToken
4应用服务器返回AccessTokenRefreshToken
vivo 接入文档
第 10 页
接口说明
请求消息
协议类型HTTPS(POST请求)
数据格式Text
服务URL
httpspassportvivocomcnoauth20refresh_token
消息方向第三方服务-gt账户系统
请求参数
参数 参数名称 类型 必填 参数说明
基本参数
timestamp 时间戳
long 是
请求的当前时间戳时
间戳和服务器时间戳进
行校正过 时间戳是自
1970 年 1 月 1 日
(000000 GMT)以来
的毫秒数
nonce 随机字符串 String 是 随机字符串
sign 签名 String 是 签名
业务参数
client_id 第三方服务唯一
标识 String 是
vivo 账户系统用来识别
第三服务由 vivo 分配
给第三方服务
refresh_token 授权令牌 String 是 授权令牌
scope 授权范围
String 否
scope 不填默认为
user_baseinfo表示静
默授权的用户无感
知多个授权用ldquo|rdquo分
隔
示例
httpspassportvivocomcnoauth20refresh_tokenclient_id=c1ebe4661cdc4bd3ab6977c
3561b9deeamprefresht_token=eb6fc13d81331e01638eca34399f4d61amptimestamp=1502521720
086ampnonce=cd04cb5d00b34e16c377616cf6dd55f8ampsign=eee6985a0448cef2a06ace053b7e1
917
响应消息
accesstoken 18168060599
refreshtoken zhangwtest
expires_in3600
state 200
返回状态
vivo 接入文档
第 11 页
总结标准授权模式适用于有业务服务器的应用安全性
比较好
33 简化授权方式【Client 对接】
简化模式 SDK 直接返回 AccessToken 给应用不需要经过业务服务器
应用 账户SDK
1调用RequestAccessToken获取AccessToken
2SDK返回AccessToken
代码示例
mOauthrequestAccessToken(new OauthCallback()
Override
public void onStartLoading()
Override
public void onResult(OauthResult result)
Override
public void onEndLoading()
)
OauthResult 说明
参数 说明
状态码 提示信息
4000 请求无效
4001 Token 过期
vivo 接入文档
第 12 页
statusCode 授权的结果
200授权成功
12用户取消授权
13授权失败-网络无法连接
14授权失败-其他错误
accesstoken 授权 AccessToken
expireIn AccessToken 的有效期单位是秒
当应用接收回调或者退出当前页面时需要解注册 Listener方法如下
mOauthunRegisterOauthCallback()
总结简化授权模式流程简单适用于没有业务服务器的应用安全性比较弱
34 通过 AccessToken 获取用户信息【Client 对接】
无论是标准授权方式还是简化授权方式应用最后都会获得 AccessToken利用 AccessToken
可以获取用户信息
mOauthrequestUserInfo(mAccessToken new UserInfoCallback()
Override
public void onUseInfoResult(UserInfoResult data)
)
参数 说明
statusCode 授权的结果
200成功
4000请求无效
5001Token 过期
5002授权不足
5003Token 无效
openid 用户的唯一标识
nickname 用户的昵称
avatar 用户的头像地址
当应用接收到回调或者退出当前页面时需要解注册 Listener方法如下
mOauthunRegisterUserInfoCallback()
35 编译防混淆方法
添加混淆的应用需要添加以下方法防混淆sdk
vivo 接入文档
第 13 页
-keep class combbkaccount
-keep public class comvivoic
-dontwarn comvivoic
4 附录-服务器签名算法
41 MD5 签名
1生成待签名的字符串
在请求参数中除去签名参数(即 sign)把其它的参数按照字段的顺序排序排序完成
后再把所有的参数用amp符号连接起来这样就完成了待签名的字符串
2签名
目前暂只支持 MD5 签名
MD5 是一种摘要生成算法通过在签名原始串后加上第三方的 CientSecret(接入前申请的
APPSECRET)密钥的内容进行 MD5 运算形成的摘要字符串即为签名结果
第三方可以使用提供的工具类把所有请求所求参数放到 Map 中生成 paraMap用第三方服务
申请的 client_id(接入前申请的 APPID)对应的 client_secret(接入前申请的 APPSECRET)作为签
名密钥调用 PartnerSignUtil 的 sign 方法生成生成签名作为参数放在 url 后即可
如 client_secret 4e53b6bf60659b3547637247f3c2d1b9
sign=MD5(text+client_secret)=(client_id=c1ebe4661cdc4bd3ab6977c3561b9deeampcode=386cdb37
4a742522848d63fd05b2a22bampgrant_type=authorization_codeampnonce=08a36077414d5f076cd9a587
9fd741f5amptimestamp=1502855224 + 4e53b6bf60659b3547637247f3c2d1b9)
签名字符串
param paraMap 需要签名的参数Map
param key 签名的密钥
return 签名结果
public static String sign(MapltString Stringgt paraMap String key)
String saltValue = key
return MD5SignUtilsign(paraMap saltValue SIGNATURE)
vivo 接入文档
第 14 页
42 MD5 签名工具
MD5SignUtiljava PartnerSignUtiljava
5 FAQ
1 接入了 SDK为什么都是 H5 登录
答授权 SDK 会根据 vivo 手机内置的账户 apk 版本决定使用 H5 登录还是 Native 登录当
没有账户 apk 或者账户 apk 版本过低时采用 H5 登录
2 接入了 SDK但是一直无法调用器授权页面或者调用页面异常
(1) 请确认是否申请了 SDK 所需要的权限Android 60 以后权限需要应用去动态申请接
入方需要动态申请上述权限之后才可使用授权相关功能
(2) 请确认各 cpu 架构的 so 是否拷贝完全aar 文件中只有 armv6 的 so其他的 so 需要
手动拷贝
vivo 接入文档
第 5 页
22 SDK 导入
将 BBKAccountSDK_aar 资源包拷贝到 libs 目录下aar 文件中只含有 armeabi 的 so如果应
用里面支持了多种 CPU 类型需要将其他 so 分别拷贝至对应文件下比如应用之前含有
armeabi-v7a 的 so那么需要将账户 armeabi-v7a 的 so 拷贝至原应用的 armeabi-v7a 目录中
注意如果应用是 Eclipse需要将 aar 文件解压将对应的资源文件拷贝至工程对应目录并
且需要申明授权 Activity
vivo 接入文档
第 6 页
ltactivity
androidname=combbkaccountoauthactivityAuthorizeActivity
androidtheme=androidstyleThemeNoTitleBargt
ltactivitygt
并且需要增加响应的权限说明
ltuses-permission androidname=androidpermissionGET_ACCOUNTS gt
ltuses-permission androidname=androidpermissionMANAGE_ACCOUNTS gt
ltuses-permission androidname=androidpermissionAUTHENTICATE_ACCOUNTS gt
ltuses-permission androidname=androidpermissionACCESS_NETWORK_STATE gt
ltuses-permission androidname=androidpermissionACCESS_WIFI_STATE gt
ltuses-permission androidname=androidpermissionINTERNET gt
注意Android 60以后权限需要应用去动态申请接入方需要动态申请上述权限之后才可
使用授权相关功能
3 账户授权功能接入
31 简要说明
说明使用授权功能应用首先需要创建一个 Oauth 对象创建方法如下
Oauth = new OauthBuilder(this)setAppID(APPID)setRedirectUrl(REDIRECT_URI)setSilentAuth (false)build()
其中 APPID 和 REDIRECT_URI 需要向账户平台申请setSilentAuth 设置是否静默授权【只对高版本系统账户
有效低版本使用的是 H5 登录此参数无效】如果设置为 true在授权还没有过期时不会再次弹出授权
页面
账户 SDK 提供了标准授权和简化授权两种方式
32 标准授权方式
标准授权方式授权 SDK 给应用返回授权 Code应用需要将 Code 传给应用自己的业务服务
器业务服务器再访问账户服务器获以获取 AccessToken 和 RefreshToken
标准授权方式流程图如下
vivo 接入文档
第 7 页
应用 账户SDK 应用服务器 账户服务器
1调用RequestCode
2返回code
3客户端请求业务服务器带上code
4业务服务器请求账户服务器
5账户服务器放回AccessToken和RefreshToken
6账户服务器放回AccessToken和RefreshToken
321 客户端调用 SDK 获取授权码 Code【Client 对接】
客户端代码示例
mOauthrequestCode(new OauthCallback()
Override
public void onStartLoading()
Override
public void onResult(OauthResult result)
Override
public void onEndLoading()
)
OauthResult 说明
参数 说明
statusCode 授权的结果
200授权成功
12用户取消授权
13授权失败-网络无法连接
14授权失败-其他错误
vivo 接入文档
第 8 页
code 授权码 Code
当应用接收回调或者退出当前页面时需要解注册 Listener方法如下
mOauthunRegisterOauthCallback()
322 应用业务服务器根据授权码获取 AccessToken【服务器对接】
用户在授权页同意授权后客户端会生成一个授权认证码 code应用需要将 code 传递给应用
自己的服务器由服务器获取 AccessToken 并返回给客户端
获取 AccessToken 接口说明
请求消息
协议类型HTTPS(POST请求)
数据格式Text
服务URL
httpspassportvivocomcnoauth20access_token
消息方向第三方服务-gt账户系统
请求参数
参数 参数名称 类型 必填 参数说明
基本参数
timestamp 时间戳
long 是
请求的当前时间戳时
间戳和服务器时间戳进
行校正过时间戳是自
1970 年 1 月 1 日
(000000 GMT)以来
的毫秒数
nonce 随机字符串 String 是 随机字符串
sign 签名 String 是
签名【附录有关于签名
的算法的详细说明】
业务参数
client_id 第三方服务唯一
标识 String 是
vivo 账户系统用来识别
第三服务由 vivo 分配
给第三方服务
code 授权认证码 String 是 授权认证码
grant_type 授权类型 String 是
固定值
authorization_code
redirect_uri 授权认证成功后
重定向第三方服
务 URL
String 否
授权认证成功后重定
向 URL 需要进行
UrlEncoder
scope 授权范围
String 否
scope 不填默认为
user_baseinfo表示静
默授权的用户无感
vivo 接入文档
第 9 页
知多个授权用ldquo|rdquo分
隔
示例
httpspassportvivocomcnoauth20
access_tokenclient_id=c1ebe4661cdc4bd3ab6977c3561b9deeampcode=369fb8c9b32010af974
763593f91d0afamptimestamp=1494637416356nonce=cd04cb5d00b34e16c377616cf6dd55f8
ampsign=6f4e44edd77420c67cea985d92d0f39a8ae604d2ampredirect_uri=https3a2f2fshop
vivocomcn2f3fcid3dgw_index_topbar
响应消息
expires_in3600access_token33145fb20aa24bbdd54a8ffeecc63130
state200
返回状态
状态码 提示信息
4000 无效的请求如签名不通过请求过期
4001 未授权
323 根据 RefreshToken 获取新 AccessToken 【服务器对接】
AccessToken 有效期是 24 小时当 AccessToken 过期后用 RefreshToken 获取新的
AccessTokent 和 RefreshToken原有的 AccessTokent 和 RefreshToken 会失效
刷新 AccessToken 流程图
应用 应用服务器 账户服务器
1利用RefreshToken获取新的AccessToken
3账户服务器返回RefreshTokenAccessToken
2利用RefreshToken获取新的AccessToken
4应用服务器返回AccessTokenRefreshToken
vivo 接入文档
第 10 页
接口说明
请求消息
协议类型HTTPS(POST请求)
数据格式Text
服务URL
httpspassportvivocomcnoauth20refresh_token
消息方向第三方服务-gt账户系统
请求参数
参数 参数名称 类型 必填 参数说明
基本参数
timestamp 时间戳
long 是
请求的当前时间戳时
间戳和服务器时间戳进
行校正过 时间戳是自
1970 年 1 月 1 日
(000000 GMT)以来
的毫秒数
nonce 随机字符串 String 是 随机字符串
sign 签名 String 是 签名
业务参数
client_id 第三方服务唯一
标识 String 是
vivo 账户系统用来识别
第三服务由 vivo 分配
给第三方服务
refresh_token 授权令牌 String 是 授权令牌
scope 授权范围
String 否
scope 不填默认为
user_baseinfo表示静
默授权的用户无感
知多个授权用ldquo|rdquo分
隔
示例
httpspassportvivocomcnoauth20refresh_tokenclient_id=c1ebe4661cdc4bd3ab6977c
3561b9deeamprefresht_token=eb6fc13d81331e01638eca34399f4d61amptimestamp=1502521720
086ampnonce=cd04cb5d00b34e16c377616cf6dd55f8ampsign=eee6985a0448cef2a06ace053b7e1
917
响应消息
accesstoken 18168060599
refreshtoken zhangwtest
expires_in3600
state 200
返回状态
vivo 接入文档
第 11 页
总结标准授权模式适用于有业务服务器的应用安全性
比较好
33 简化授权方式【Client 对接】
简化模式 SDK 直接返回 AccessToken 给应用不需要经过业务服务器
应用 账户SDK
1调用RequestAccessToken获取AccessToken
2SDK返回AccessToken
代码示例
mOauthrequestAccessToken(new OauthCallback()
Override
public void onStartLoading()
Override
public void onResult(OauthResult result)
Override
public void onEndLoading()
)
OauthResult 说明
参数 说明
状态码 提示信息
4000 请求无效
4001 Token 过期
vivo 接入文档
第 12 页
statusCode 授权的结果
200授权成功
12用户取消授权
13授权失败-网络无法连接
14授权失败-其他错误
accesstoken 授权 AccessToken
expireIn AccessToken 的有效期单位是秒
当应用接收回调或者退出当前页面时需要解注册 Listener方法如下
mOauthunRegisterOauthCallback()
总结简化授权模式流程简单适用于没有业务服务器的应用安全性比较弱
34 通过 AccessToken 获取用户信息【Client 对接】
无论是标准授权方式还是简化授权方式应用最后都会获得 AccessToken利用 AccessToken
可以获取用户信息
mOauthrequestUserInfo(mAccessToken new UserInfoCallback()
Override
public void onUseInfoResult(UserInfoResult data)
)
参数 说明
statusCode 授权的结果
200成功
4000请求无效
5001Token 过期
5002授权不足
5003Token 无效
openid 用户的唯一标识
nickname 用户的昵称
avatar 用户的头像地址
当应用接收到回调或者退出当前页面时需要解注册 Listener方法如下
mOauthunRegisterUserInfoCallback()
35 编译防混淆方法
添加混淆的应用需要添加以下方法防混淆sdk
vivo 接入文档
第 13 页
-keep class combbkaccount
-keep public class comvivoic
-dontwarn comvivoic
4 附录-服务器签名算法
41 MD5 签名
1生成待签名的字符串
在请求参数中除去签名参数(即 sign)把其它的参数按照字段的顺序排序排序完成
后再把所有的参数用amp符号连接起来这样就完成了待签名的字符串
2签名
目前暂只支持 MD5 签名
MD5 是一种摘要生成算法通过在签名原始串后加上第三方的 CientSecret(接入前申请的
APPSECRET)密钥的内容进行 MD5 运算形成的摘要字符串即为签名结果
第三方可以使用提供的工具类把所有请求所求参数放到 Map 中生成 paraMap用第三方服务
申请的 client_id(接入前申请的 APPID)对应的 client_secret(接入前申请的 APPSECRET)作为签
名密钥调用 PartnerSignUtil 的 sign 方法生成生成签名作为参数放在 url 后即可
如 client_secret 4e53b6bf60659b3547637247f3c2d1b9
sign=MD5(text+client_secret)=(client_id=c1ebe4661cdc4bd3ab6977c3561b9deeampcode=386cdb37
4a742522848d63fd05b2a22bampgrant_type=authorization_codeampnonce=08a36077414d5f076cd9a587
9fd741f5amptimestamp=1502855224 + 4e53b6bf60659b3547637247f3c2d1b9)
签名字符串
param paraMap 需要签名的参数Map
param key 签名的密钥
return 签名结果
public static String sign(MapltString Stringgt paraMap String key)
String saltValue = key
return MD5SignUtilsign(paraMap saltValue SIGNATURE)
vivo 接入文档
第 14 页
42 MD5 签名工具
MD5SignUtiljava PartnerSignUtiljava
5 FAQ
1 接入了 SDK为什么都是 H5 登录
答授权 SDK 会根据 vivo 手机内置的账户 apk 版本决定使用 H5 登录还是 Native 登录当
没有账户 apk 或者账户 apk 版本过低时采用 H5 登录
2 接入了 SDK但是一直无法调用器授权页面或者调用页面异常
(1) 请确认是否申请了 SDK 所需要的权限Android 60 以后权限需要应用去动态申请接
入方需要动态申请上述权限之后才可使用授权相关功能
(2) 请确认各 cpu 架构的 so 是否拷贝完全aar 文件中只有 armv6 的 so其他的 so 需要
手动拷贝
vivo 接入文档
第 6 页
ltactivity
androidname=combbkaccountoauthactivityAuthorizeActivity
androidtheme=androidstyleThemeNoTitleBargt
ltactivitygt
并且需要增加响应的权限说明
ltuses-permission androidname=androidpermissionGET_ACCOUNTS gt
ltuses-permission androidname=androidpermissionMANAGE_ACCOUNTS gt
ltuses-permission androidname=androidpermissionAUTHENTICATE_ACCOUNTS gt
ltuses-permission androidname=androidpermissionACCESS_NETWORK_STATE gt
ltuses-permission androidname=androidpermissionACCESS_WIFI_STATE gt
ltuses-permission androidname=androidpermissionINTERNET gt
注意Android 60以后权限需要应用去动态申请接入方需要动态申请上述权限之后才可
使用授权相关功能
3 账户授权功能接入
31 简要说明
说明使用授权功能应用首先需要创建一个 Oauth 对象创建方法如下
Oauth = new OauthBuilder(this)setAppID(APPID)setRedirectUrl(REDIRECT_URI)setSilentAuth (false)build()
其中 APPID 和 REDIRECT_URI 需要向账户平台申请setSilentAuth 设置是否静默授权【只对高版本系统账户
有效低版本使用的是 H5 登录此参数无效】如果设置为 true在授权还没有过期时不会再次弹出授权
页面
账户 SDK 提供了标准授权和简化授权两种方式
32 标准授权方式
标准授权方式授权 SDK 给应用返回授权 Code应用需要将 Code 传给应用自己的业务服务
器业务服务器再访问账户服务器获以获取 AccessToken 和 RefreshToken
标准授权方式流程图如下
vivo 接入文档
第 7 页
应用 账户SDK 应用服务器 账户服务器
1调用RequestCode
2返回code
3客户端请求业务服务器带上code
4业务服务器请求账户服务器
5账户服务器放回AccessToken和RefreshToken
6账户服务器放回AccessToken和RefreshToken
321 客户端调用 SDK 获取授权码 Code【Client 对接】
客户端代码示例
mOauthrequestCode(new OauthCallback()
Override
public void onStartLoading()
Override
public void onResult(OauthResult result)
Override
public void onEndLoading()
)
OauthResult 说明
参数 说明
statusCode 授权的结果
200授权成功
12用户取消授权
13授权失败-网络无法连接
14授权失败-其他错误
vivo 接入文档
第 8 页
code 授权码 Code
当应用接收回调或者退出当前页面时需要解注册 Listener方法如下
mOauthunRegisterOauthCallback()
322 应用业务服务器根据授权码获取 AccessToken【服务器对接】
用户在授权页同意授权后客户端会生成一个授权认证码 code应用需要将 code 传递给应用
自己的服务器由服务器获取 AccessToken 并返回给客户端
获取 AccessToken 接口说明
请求消息
协议类型HTTPS(POST请求)
数据格式Text
服务URL
httpspassportvivocomcnoauth20access_token
消息方向第三方服务-gt账户系统
请求参数
参数 参数名称 类型 必填 参数说明
基本参数
timestamp 时间戳
long 是
请求的当前时间戳时
间戳和服务器时间戳进
行校正过时间戳是自
1970 年 1 月 1 日
(000000 GMT)以来
的毫秒数
nonce 随机字符串 String 是 随机字符串
sign 签名 String 是
签名【附录有关于签名
的算法的详细说明】
业务参数
client_id 第三方服务唯一
标识 String 是
vivo 账户系统用来识别
第三服务由 vivo 分配
给第三方服务
code 授权认证码 String 是 授权认证码
grant_type 授权类型 String 是
固定值
authorization_code
redirect_uri 授权认证成功后
重定向第三方服
务 URL
String 否
授权认证成功后重定
向 URL 需要进行
UrlEncoder
scope 授权范围
String 否
scope 不填默认为
user_baseinfo表示静
默授权的用户无感
vivo 接入文档
第 9 页
知多个授权用ldquo|rdquo分
隔
示例
httpspassportvivocomcnoauth20
access_tokenclient_id=c1ebe4661cdc4bd3ab6977c3561b9deeampcode=369fb8c9b32010af974
763593f91d0afamptimestamp=1494637416356nonce=cd04cb5d00b34e16c377616cf6dd55f8
ampsign=6f4e44edd77420c67cea985d92d0f39a8ae604d2ampredirect_uri=https3a2f2fshop
vivocomcn2f3fcid3dgw_index_topbar
响应消息
expires_in3600access_token33145fb20aa24bbdd54a8ffeecc63130
state200
返回状态
状态码 提示信息
4000 无效的请求如签名不通过请求过期
4001 未授权
323 根据 RefreshToken 获取新 AccessToken 【服务器对接】
AccessToken 有效期是 24 小时当 AccessToken 过期后用 RefreshToken 获取新的
AccessTokent 和 RefreshToken原有的 AccessTokent 和 RefreshToken 会失效
刷新 AccessToken 流程图
应用 应用服务器 账户服务器
1利用RefreshToken获取新的AccessToken
3账户服务器返回RefreshTokenAccessToken
2利用RefreshToken获取新的AccessToken
4应用服务器返回AccessTokenRefreshToken
vivo 接入文档
第 10 页
接口说明
请求消息
协议类型HTTPS(POST请求)
数据格式Text
服务URL
httpspassportvivocomcnoauth20refresh_token
消息方向第三方服务-gt账户系统
请求参数
参数 参数名称 类型 必填 参数说明
基本参数
timestamp 时间戳
long 是
请求的当前时间戳时
间戳和服务器时间戳进
行校正过 时间戳是自
1970 年 1 月 1 日
(000000 GMT)以来
的毫秒数
nonce 随机字符串 String 是 随机字符串
sign 签名 String 是 签名
业务参数
client_id 第三方服务唯一
标识 String 是
vivo 账户系统用来识别
第三服务由 vivo 分配
给第三方服务
refresh_token 授权令牌 String 是 授权令牌
scope 授权范围
String 否
scope 不填默认为
user_baseinfo表示静
默授权的用户无感
知多个授权用ldquo|rdquo分
隔
示例
httpspassportvivocomcnoauth20refresh_tokenclient_id=c1ebe4661cdc4bd3ab6977c
3561b9deeamprefresht_token=eb6fc13d81331e01638eca34399f4d61amptimestamp=1502521720
086ampnonce=cd04cb5d00b34e16c377616cf6dd55f8ampsign=eee6985a0448cef2a06ace053b7e1
917
响应消息
accesstoken 18168060599
refreshtoken zhangwtest
expires_in3600
state 200
返回状态
vivo 接入文档
第 11 页
总结标准授权模式适用于有业务服务器的应用安全性
比较好
33 简化授权方式【Client 对接】
简化模式 SDK 直接返回 AccessToken 给应用不需要经过业务服务器
应用 账户SDK
1调用RequestAccessToken获取AccessToken
2SDK返回AccessToken
代码示例
mOauthrequestAccessToken(new OauthCallback()
Override
public void onStartLoading()
Override
public void onResult(OauthResult result)
Override
public void onEndLoading()
)
OauthResult 说明
参数 说明
状态码 提示信息
4000 请求无效
4001 Token 过期
vivo 接入文档
第 12 页
statusCode 授权的结果
200授权成功
12用户取消授权
13授权失败-网络无法连接
14授权失败-其他错误
accesstoken 授权 AccessToken
expireIn AccessToken 的有效期单位是秒
当应用接收回调或者退出当前页面时需要解注册 Listener方法如下
mOauthunRegisterOauthCallback()
总结简化授权模式流程简单适用于没有业务服务器的应用安全性比较弱
34 通过 AccessToken 获取用户信息【Client 对接】
无论是标准授权方式还是简化授权方式应用最后都会获得 AccessToken利用 AccessToken
可以获取用户信息
mOauthrequestUserInfo(mAccessToken new UserInfoCallback()
Override
public void onUseInfoResult(UserInfoResult data)
)
参数 说明
statusCode 授权的结果
200成功
4000请求无效
5001Token 过期
5002授权不足
5003Token 无效
openid 用户的唯一标识
nickname 用户的昵称
avatar 用户的头像地址
当应用接收到回调或者退出当前页面时需要解注册 Listener方法如下
mOauthunRegisterUserInfoCallback()
35 编译防混淆方法
添加混淆的应用需要添加以下方法防混淆sdk
vivo 接入文档
第 13 页
-keep class combbkaccount
-keep public class comvivoic
-dontwarn comvivoic
4 附录-服务器签名算法
41 MD5 签名
1生成待签名的字符串
在请求参数中除去签名参数(即 sign)把其它的参数按照字段的顺序排序排序完成
后再把所有的参数用amp符号连接起来这样就完成了待签名的字符串
2签名
目前暂只支持 MD5 签名
MD5 是一种摘要生成算法通过在签名原始串后加上第三方的 CientSecret(接入前申请的
APPSECRET)密钥的内容进行 MD5 运算形成的摘要字符串即为签名结果
第三方可以使用提供的工具类把所有请求所求参数放到 Map 中生成 paraMap用第三方服务
申请的 client_id(接入前申请的 APPID)对应的 client_secret(接入前申请的 APPSECRET)作为签
名密钥调用 PartnerSignUtil 的 sign 方法生成生成签名作为参数放在 url 后即可
如 client_secret 4e53b6bf60659b3547637247f3c2d1b9
sign=MD5(text+client_secret)=(client_id=c1ebe4661cdc4bd3ab6977c3561b9deeampcode=386cdb37
4a742522848d63fd05b2a22bampgrant_type=authorization_codeampnonce=08a36077414d5f076cd9a587
9fd741f5amptimestamp=1502855224 + 4e53b6bf60659b3547637247f3c2d1b9)
签名字符串
param paraMap 需要签名的参数Map
param key 签名的密钥
return 签名结果
public static String sign(MapltString Stringgt paraMap String key)
String saltValue = key
return MD5SignUtilsign(paraMap saltValue SIGNATURE)
vivo 接入文档
第 14 页
42 MD5 签名工具
MD5SignUtiljava PartnerSignUtiljava
5 FAQ
1 接入了 SDK为什么都是 H5 登录
答授权 SDK 会根据 vivo 手机内置的账户 apk 版本决定使用 H5 登录还是 Native 登录当
没有账户 apk 或者账户 apk 版本过低时采用 H5 登录
2 接入了 SDK但是一直无法调用器授权页面或者调用页面异常
(1) 请确认是否申请了 SDK 所需要的权限Android 60 以后权限需要应用去动态申请接
入方需要动态申请上述权限之后才可使用授权相关功能
(2) 请确认各 cpu 架构的 so 是否拷贝完全aar 文件中只有 armv6 的 so其他的 so 需要
手动拷贝
vivo 接入文档
第 7 页
应用 账户SDK 应用服务器 账户服务器
1调用RequestCode
2返回code
3客户端请求业务服务器带上code
4业务服务器请求账户服务器
5账户服务器放回AccessToken和RefreshToken
6账户服务器放回AccessToken和RefreshToken
321 客户端调用 SDK 获取授权码 Code【Client 对接】
客户端代码示例
mOauthrequestCode(new OauthCallback()
Override
public void onStartLoading()
Override
public void onResult(OauthResult result)
Override
public void onEndLoading()
)
OauthResult 说明
参数 说明
statusCode 授权的结果
200授权成功
12用户取消授权
13授权失败-网络无法连接
14授权失败-其他错误
vivo 接入文档
第 8 页
code 授权码 Code
当应用接收回调或者退出当前页面时需要解注册 Listener方法如下
mOauthunRegisterOauthCallback()
322 应用业务服务器根据授权码获取 AccessToken【服务器对接】
用户在授权页同意授权后客户端会生成一个授权认证码 code应用需要将 code 传递给应用
自己的服务器由服务器获取 AccessToken 并返回给客户端
获取 AccessToken 接口说明
请求消息
协议类型HTTPS(POST请求)
数据格式Text
服务URL
httpspassportvivocomcnoauth20access_token
消息方向第三方服务-gt账户系统
请求参数
参数 参数名称 类型 必填 参数说明
基本参数
timestamp 时间戳
long 是
请求的当前时间戳时
间戳和服务器时间戳进
行校正过时间戳是自
1970 年 1 月 1 日
(000000 GMT)以来
的毫秒数
nonce 随机字符串 String 是 随机字符串
sign 签名 String 是
签名【附录有关于签名
的算法的详细说明】
业务参数
client_id 第三方服务唯一
标识 String 是
vivo 账户系统用来识别
第三服务由 vivo 分配
给第三方服务
code 授权认证码 String 是 授权认证码
grant_type 授权类型 String 是
固定值
authorization_code
redirect_uri 授权认证成功后
重定向第三方服
务 URL
String 否
授权认证成功后重定
向 URL 需要进行
UrlEncoder
scope 授权范围
String 否
scope 不填默认为
user_baseinfo表示静
默授权的用户无感
vivo 接入文档
第 9 页
知多个授权用ldquo|rdquo分
隔
示例
httpspassportvivocomcnoauth20
access_tokenclient_id=c1ebe4661cdc4bd3ab6977c3561b9deeampcode=369fb8c9b32010af974
763593f91d0afamptimestamp=1494637416356nonce=cd04cb5d00b34e16c377616cf6dd55f8
ampsign=6f4e44edd77420c67cea985d92d0f39a8ae604d2ampredirect_uri=https3a2f2fshop
vivocomcn2f3fcid3dgw_index_topbar
响应消息
expires_in3600access_token33145fb20aa24bbdd54a8ffeecc63130
state200
返回状态
状态码 提示信息
4000 无效的请求如签名不通过请求过期
4001 未授权
323 根据 RefreshToken 获取新 AccessToken 【服务器对接】
AccessToken 有效期是 24 小时当 AccessToken 过期后用 RefreshToken 获取新的
AccessTokent 和 RefreshToken原有的 AccessTokent 和 RefreshToken 会失效
刷新 AccessToken 流程图
应用 应用服务器 账户服务器
1利用RefreshToken获取新的AccessToken
3账户服务器返回RefreshTokenAccessToken
2利用RefreshToken获取新的AccessToken
4应用服务器返回AccessTokenRefreshToken
vivo 接入文档
第 10 页
接口说明
请求消息
协议类型HTTPS(POST请求)
数据格式Text
服务URL
httpspassportvivocomcnoauth20refresh_token
消息方向第三方服务-gt账户系统
请求参数
参数 参数名称 类型 必填 参数说明
基本参数
timestamp 时间戳
long 是
请求的当前时间戳时
间戳和服务器时间戳进
行校正过 时间戳是自
1970 年 1 月 1 日
(000000 GMT)以来
的毫秒数
nonce 随机字符串 String 是 随机字符串
sign 签名 String 是 签名
业务参数
client_id 第三方服务唯一
标识 String 是
vivo 账户系统用来识别
第三服务由 vivo 分配
给第三方服务
refresh_token 授权令牌 String 是 授权令牌
scope 授权范围
String 否
scope 不填默认为
user_baseinfo表示静
默授权的用户无感
知多个授权用ldquo|rdquo分
隔
示例
httpspassportvivocomcnoauth20refresh_tokenclient_id=c1ebe4661cdc4bd3ab6977c
3561b9deeamprefresht_token=eb6fc13d81331e01638eca34399f4d61amptimestamp=1502521720
086ampnonce=cd04cb5d00b34e16c377616cf6dd55f8ampsign=eee6985a0448cef2a06ace053b7e1
917
响应消息
accesstoken 18168060599
refreshtoken zhangwtest
expires_in3600
state 200
返回状态
vivo 接入文档
第 11 页
总结标准授权模式适用于有业务服务器的应用安全性
比较好
33 简化授权方式【Client 对接】
简化模式 SDK 直接返回 AccessToken 给应用不需要经过业务服务器
应用 账户SDK
1调用RequestAccessToken获取AccessToken
2SDK返回AccessToken
代码示例
mOauthrequestAccessToken(new OauthCallback()
Override
public void onStartLoading()
Override
public void onResult(OauthResult result)
Override
public void onEndLoading()
)
OauthResult 说明
参数 说明
状态码 提示信息
4000 请求无效
4001 Token 过期
vivo 接入文档
第 12 页
statusCode 授权的结果
200授权成功
12用户取消授权
13授权失败-网络无法连接
14授权失败-其他错误
accesstoken 授权 AccessToken
expireIn AccessToken 的有效期单位是秒
当应用接收回调或者退出当前页面时需要解注册 Listener方法如下
mOauthunRegisterOauthCallback()
总结简化授权模式流程简单适用于没有业务服务器的应用安全性比较弱
34 通过 AccessToken 获取用户信息【Client 对接】
无论是标准授权方式还是简化授权方式应用最后都会获得 AccessToken利用 AccessToken
可以获取用户信息
mOauthrequestUserInfo(mAccessToken new UserInfoCallback()
Override
public void onUseInfoResult(UserInfoResult data)
)
参数 说明
statusCode 授权的结果
200成功
4000请求无效
5001Token 过期
5002授权不足
5003Token 无效
openid 用户的唯一标识
nickname 用户的昵称
avatar 用户的头像地址
当应用接收到回调或者退出当前页面时需要解注册 Listener方法如下
mOauthunRegisterUserInfoCallback()
35 编译防混淆方法
添加混淆的应用需要添加以下方法防混淆sdk
vivo 接入文档
第 13 页
-keep class combbkaccount
-keep public class comvivoic
-dontwarn comvivoic
4 附录-服务器签名算法
41 MD5 签名
1生成待签名的字符串
在请求参数中除去签名参数(即 sign)把其它的参数按照字段的顺序排序排序完成
后再把所有的参数用amp符号连接起来这样就完成了待签名的字符串
2签名
目前暂只支持 MD5 签名
MD5 是一种摘要生成算法通过在签名原始串后加上第三方的 CientSecret(接入前申请的
APPSECRET)密钥的内容进行 MD5 运算形成的摘要字符串即为签名结果
第三方可以使用提供的工具类把所有请求所求参数放到 Map 中生成 paraMap用第三方服务
申请的 client_id(接入前申请的 APPID)对应的 client_secret(接入前申请的 APPSECRET)作为签
名密钥调用 PartnerSignUtil 的 sign 方法生成生成签名作为参数放在 url 后即可
如 client_secret 4e53b6bf60659b3547637247f3c2d1b9
sign=MD5(text+client_secret)=(client_id=c1ebe4661cdc4bd3ab6977c3561b9deeampcode=386cdb37
4a742522848d63fd05b2a22bampgrant_type=authorization_codeampnonce=08a36077414d5f076cd9a587
9fd741f5amptimestamp=1502855224 + 4e53b6bf60659b3547637247f3c2d1b9)
签名字符串
param paraMap 需要签名的参数Map
param key 签名的密钥
return 签名结果
public static String sign(MapltString Stringgt paraMap String key)
String saltValue = key
return MD5SignUtilsign(paraMap saltValue SIGNATURE)
vivo 接入文档
第 14 页
42 MD5 签名工具
MD5SignUtiljava PartnerSignUtiljava
5 FAQ
1 接入了 SDK为什么都是 H5 登录
答授权 SDK 会根据 vivo 手机内置的账户 apk 版本决定使用 H5 登录还是 Native 登录当
没有账户 apk 或者账户 apk 版本过低时采用 H5 登录
2 接入了 SDK但是一直无法调用器授权页面或者调用页面异常
(1) 请确认是否申请了 SDK 所需要的权限Android 60 以后权限需要应用去动态申请接
入方需要动态申请上述权限之后才可使用授权相关功能
(2) 请确认各 cpu 架构的 so 是否拷贝完全aar 文件中只有 armv6 的 so其他的 so 需要
手动拷贝
vivo 接入文档
第 8 页
code 授权码 Code
当应用接收回调或者退出当前页面时需要解注册 Listener方法如下
mOauthunRegisterOauthCallback()
322 应用业务服务器根据授权码获取 AccessToken【服务器对接】
用户在授权页同意授权后客户端会生成一个授权认证码 code应用需要将 code 传递给应用
自己的服务器由服务器获取 AccessToken 并返回给客户端
获取 AccessToken 接口说明
请求消息
协议类型HTTPS(POST请求)
数据格式Text
服务URL
httpspassportvivocomcnoauth20access_token
消息方向第三方服务-gt账户系统
请求参数
参数 参数名称 类型 必填 参数说明
基本参数
timestamp 时间戳
long 是
请求的当前时间戳时
间戳和服务器时间戳进
行校正过时间戳是自
1970 年 1 月 1 日
(000000 GMT)以来
的毫秒数
nonce 随机字符串 String 是 随机字符串
sign 签名 String 是
签名【附录有关于签名
的算法的详细说明】
业务参数
client_id 第三方服务唯一
标识 String 是
vivo 账户系统用来识别
第三服务由 vivo 分配
给第三方服务
code 授权认证码 String 是 授权认证码
grant_type 授权类型 String 是
固定值
authorization_code
redirect_uri 授权认证成功后
重定向第三方服
务 URL
String 否
授权认证成功后重定
向 URL 需要进行
UrlEncoder
scope 授权范围
String 否
scope 不填默认为
user_baseinfo表示静
默授权的用户无感
vivo 接入文档
第 9 页
知多个授权用ldquo|rdquo分
隔
示例
httpspassportvivocomcnoauth20
access_tokenclient_id=c1ebe4661cdc4bd3ab6977c3561b9deeampcode=369fb8c9b32010af974
763593f91d0afamptimestamp=1494637416356nonce=cd04cb5d00b34e16c377616cf6dd55f8
ampsign=6f4e44edd77420c67cea985d92d0f39a8ae604d2ampredirect_uri=https3a2f2fshop
vivocomcn2f3fcid3dgw_index_topbar
响应消息
expires_in3600access_token33145fb20aa24bbdd54a8ffeecc63130
state200
返回状态
状态码 提示信息
4000 无效的请求如签名不通过请求过期
4001 未授权
323 根据 RefreshToken 获取新 AccessToken 【服务器对接】
AccessToken 有效期是 24 小时当 AccessToken 过期后用 RefreshToken 获取新的
AccessTokent 和 RefreshToken原有的 AccessTokent 和 RefreshToken 会失效
刷新 AccessToken 流程图
应用 应用服务器 账户服务器
1利用RefreshToken获取新的AccessToken
3账户服务器返回RefreshTokenAccessToken
2利用RefreshToken获取新的AccessToken
4应用服务器返回AccessTokenRefreshToken
vivo 接入文档
第 10 页
接口说明
请求消息
协议类型HTTPS(POST请求)
数据格式Text
服务URL
httpspassportvivocomcnoauth20refresh_token
消息方向第三方服务-gt账户系统
请求参数
参数 参数名称 类型 必填 参数说明
基本参数
timestamp 时间戳
long 是
请求的当前时间戳时
间戳和服务器时间戳进
行校正过 时间戳是自
1970 年 1 月 1 日
(000000 GMT)以来
的毫秒数
nonce 随机字符串 String 是 随机字符串
sign 签名 String 是 签名
业务参数
client_id 第三方服务唯一
标识 String 是
vivo 账户系统用来识别
第三服务由 vivo 分配
给第三方服务
refresh_token 授权令牌 String 是 授权令牌
scope 授权范围
String 否
scope 不填默认为
user_baseinfo表示静
默授权的用户无感
知多个授权用ldquo|rdquo分
隔
示例
httpspassportvivocomcnoauth20refresh_tokenclient_id=c1ebe4661cdc4bd3ab6977c
3561b9deeamprefresht_token=eb6fc13d81331e01638eca34399f4d61amptimestamp=1502521720
086ampnonce=cd04cb5d00b34e16c377616cf6dd55f8ampsign=eee6985a0448cef2a06ace053b7e1
917
响应消息
accesstoken 18168060599
refreshtoken zhangwtest
expires_in3600
state 200
返回状态
vivo 接入文档
第 11 页
总结标准授权模式适用于有业务服务器的应用安全性
比较好
33 简化授权方式【Client 对接】
简化模式 SDK 直接返回 AccessToken 给应用不需要经过业务服务器
应用 账户SDK
1调用RequestAccessToken获取AccessToken
2SDK返回AccessToken
代码示例
mOauthrequestAccessToken(new OauthCallback()
Override
public void onStartLoading()
Override
public void onResult(OauthResult result)
Override
public void onEndLoading()
)
OauthResult 说明
参数 说明
状态码 提示信息
4000 请求无效
4001 Token 过期
vivo 接入文档
第 12 页
statusCode 授权的结果
200授权成功
12用户取消授权
13授权失败-网络无法连接
14授权失败-其他错误
accesstoken 授权 AccessToken
expireIn AccessToken 的有效期单位是秒
当应用接收回调或者退出当前页面时需要解注册 Listener方法如下
mOauthunRegisterOauthCallback()
总结简化授权模式流程简单适用于没有业务服务器的应用安全性比较弱
34 通过 AccessToken 获取用户信息【Client 对接】
无论是标准授权方式还是简化授权方式应用最后都会获得 AccessToken利用 AccessToken
可以获取用户信息
mOauthrequestUserInfo(mAccessToken new UserInfoCallback()
Override
public void onUseInfoResult(UserInfoResult data)
)
参数 说明
statusCode 授权的结果
200成功
4000请求无效
5001Token 过期
5002授权不足
5003Token 无效
openid 用户的唯一标识
nickname 用户的昵称
avatar 用户的头像地址
当应用接收到回调或者退出当前页面时需要解注册 Listener方法如下
mOauthunRegisterUserInfoCallback()
35 编译防混淆方法
添加混淆的应用需要添加以下方法防混淆sdk
vivo 接入文档
第 13 页
-keep class combbkaccount
-keep public class comvivoic
-dontwarn comvivoic
4 附录-服务器签名算法
41 MD5 签名
1生成待签名的字符串
在请求参数中除去签名参数(即 sign)把其它的参数按照字段的顺序排序排序完成
后再把所有的参数用amp符号连接起来这样就完成了待签名的字符串
2签名
目前暂只支持 MD5 签名
MD5 是一种摘要生成算法通过在签名原始串后加上第三方的 CientSecret(接入前申请的
APPSECRET)密钥的内容进行 MD5 运算形成的摘要字符串即为签名结果
第三方可以使用提供的工具类把所有请求所求参数放到 Map 中生成 paraMap用第三方服务
申请的 client_id(接入前申请的 APPID)对应的 client_secret(接入前申请的 APPSECRET)作为签
名密钥调用 PartnerSignUtil 的 sign 方法生成生成签名作为参数放在 url 后即可
如 client_secret 4e53b6bf60659b3547637247f3c2d1b9
sign=MD5(text+client_secret)=(client_id=c1ebe4661cdc4bd3ab6977c3561b9deeampcode=386cdb37
4a742522848d63fd05b2a22bampgrant_type=authorization_codeampnonce=08a36077414d5f076cd9a587
9fd741f5amptimestamp=1502855224 + 4e53b6bf60659b3547637247f3c2d1b9)
签名字符串
param paraMap 需要签名的参数Map
param key 签名的密钥
return 签名结果
public static String sign(MapltString Stringgt paraMap String key)
String saltValue = key
return MD5SignUtilsign(paraMap saltValue SIGNATURE)
vivo 接入文档
第 14 页
42 MD5 签名工具
MD5SignUtiljava PartnerSignUtiljava
5 FAQ
1 接入了 SDK为什么都是 H5 登录
答授权 SDK 会根据 vivo 手机内置的账户 apk 版本决定使用 H5 登录还是 Native 登录当
没有账户 apk 或者账户 apk 版本过低时采用 H5 登录
2 接入了 SDK但是一直无法调用器授权页面或者调用页面异常
(1) 请确认是否申请了 SDK 所需要的权限Android 60 以后权限需要应用去动态申请接
入方需要动态申请上述权限之后才可使用授权相关功能
(2) 请确认各 cpu 架构的 so 是否拷贝完全aar 文件中只有 armv6 的 so其他的 so 需要
手动拷贝
vivo 接入文档
第 9 页
知多个授权用ldquo|rdquo分
隔
示例
httpspassportvivocomcnoauth20
access_tokenclient_id=c1ebe4661cdc4bd3ab6977c3561b9deeampcode=369fb8c9b32010af974
763593f91d0afamptimestamp=1494637416356nonce=cd04cb5d00b34e16c377616cf6dd55f8
ampsign=6f4e44edd77420c67cea985d92d0f39a8ae604d2ampredirect_uri=https3a2f2fshop
vivocomcn2f3fcid3dgw_index_topbar
响应消息
expires_in3600access_token33145fb20aa24bbdd54a8ffeecc63130
state200
返回状态
状态码 提示信息
4000 无效的请求如签名不通过请求过期
4001 未授权
323 根据 RefreshToken 获取新 AccessToken 【服务器对接】
AccessToken 有效期是 24 小时当 AccessToken 过期后用 RefreshToken 获取新的
AccessTokent 和 RefreshToken原有的 AccessTokent 和 RefreshToken 会失效
刷新 AccessToken 流程图
应用 应用服务器 账户服务器
1利用RefreshToken获取新的AccessToken
3账户服务器返回RefreshTokenAccessToken
2利用RefreshToken获取新的AccessToken
4应用服务器返回AccessTokenRefreshToken
vivo 接入文档
第 10 页
接口说明
请求消息
协议类型HTTPS(POST请求)
数据格式Text
服务URL
httpspassportvivocomcnoauth20refresh_token
消息方向第三方服务-gt账户系统
请求参数
参数 参数名称 类型 必填 参数说明
基本参数
timestamp 时间戳
long 是
请求的当前时间戳时
间戳和服务器时间戳进
行校正过 时间戳是自
1970 年 1 月 1 日
(000000 GMT)以来
的毫秒数
nonce 随机字符串 String 是 随机字符串
sign 签名 String 是 签名
业务参数
client_id 第三方服务唯一
标识 String 是
vivo 账户系统用来识别
第三服务由 vivo 分配
给第三方服务
refresh_token 授权令牌 String 是 授权令牌
scope 授权范围
String 否
scope 不填默认为
user_baseinfo表示静
默授权的用户无感
知多个授权用ldquo|rdquo分
隔
示例
httpspassportvivocomcnoauth20refresh_tokenclient_id=c1ebe4661cdc4bd3ab6977c
3561b9deeamprefresht_token=eb6fc13d81331e01638eca34399f4d61amptimestamp=1502521720
086ampnonce=cd04cb5d00b34e16c377616cf6dd55f8ampsign=eee6985a0448cef2a06ace053b7e1
917
响应消息
accesstoken 18168060599
refreshtoken zhangwtest
expires_in3600
state 200
返回状态
vivo 接入文档
第 11 页
总结标准授权模式适用于有业务服务器的应用安全性
比较好
33 简化授权方式【Client 对接】
简化模式 SDK 直接返回 AccessToken 给应用不需要经过业务服务器
应用 账户SDK
1调用RequestAccessToken获取AccessToken
2SDK返回AccessToken
代码示例
mOauthrequestAccessToken(new OauthCallback()
Override
public void onStartLoading()
Override
public void onResult(OauthResult result)
Override
public void onEndLoading()
)
OauthResult 说明
参数 说明
状态码 提示信息
4000 请求无效
4001 Token 过期
vivo 接入文档
第 12 页
statusCode 授权的结果
200授权成功
12用户取消授权
13授权失败-网络无法连接
14授权失败-其他错误
accesstoken 授权 AccessToken
expireIn AccessToken 的有效期单位是秒
当应用接收回调或者退出当前页面时需要解注册 Listener方法如下
mOauthunRegisterOauthCallback()
总结简化授权模式流程简单适用于没有业务服务器的应用安全性比较弱
34 通过 AccessToken 获取用户信息【Client 对接】
无论是标准授权方式还是简化授权方式应用最后都会获得 AccessToken利用 AccessToken
可以获取用户信息
mOauthrequestUserInfo(mAccessToken new UserInfoCallback()
Override
public void onUseInfoResult(UserInfoResult data)
)
参数 说明
statusCode 授权的结果
200成功
4000请求无效
5001Token 过期
5002授权不足
5003Token 无效
openid 用户的唯一标识
nickname 用户的昵称
avatar 用户的头像地址
当应用接收到回调或者退出当前页面时需要解注册 Listener方法如下
mOauthunRegisterUserInfoCallback()
35 编译防混淆方法
添加混淆的应用需要添加以下方法防混淆sdk
vivo 接入文档
第 13 页
-keep class combbkaccount
-keep public class comvivoic
-dontwarn comvivoic
4 附录-服务器签名算法
41 MD5 签名
1生成待签名的字符串
在请求参数中除去签名参数(即 sign)把其它的参数按照字段的顺序排序排序完成
后再把所有的参数用amp符号连接起来这样就完成了待签名的字符串
2签名
目前暂只支持 MD5 签名
MD5 是一种摘要生成算法通过在签名原始串后加上第三方的 CientSecret(接入前申请的
APPSECRET)密钥的内容进行 MD5 运算形成的摘要字符串即为签名结果
第三方可以使用提供的工具类把所有请求所求参数放到 Map 中生成 paraMap用第三方服务
申请的 client_id(接入前申请的 APPID)对应的 client_secret(接入前申请的 APPSECRET)作为签
名密钥调用 PartnerSignUtil 的 sign 方法生成生成签名作为参数放在 url 后即可
如 client_secret 4e53b6bf60659b3547637247f3c2d1b9
sign=MD5(text+client_secret)=(client_id=c1ebe4661cdc4bd3ab6977c3561b9deeampcode=386cdb37
4a742522848d63fd05b2a22bampgrant_type=authorization_codeampnonce=08a36077414d5f076cd9a587
9fd741f5amptimestamp=1502855224 + 4e53b6bf60659b3547637247f3c2d1b9)
签名字符串
param paraMap 需要签名的参数Map
param key 签名的密钥
return 签名结果
public static String sign(MapltString Stringgt paraMap String key)
String saltValue = key
return MD5SignUtilsign(paraMap saltValue SIGNATURE)
vivo 接入文档
第 14 页
42 MD5 签名工具
MD5SignUtiljava PartnerSignUtiljava
5 FAQ
1 接入了 SDK为什么都是 H5 登录
答授权 SDK 会根据 vivo 手机内置的账户 apk 版本决定使用 H5 登录还是 Native 登录当
没有账户 apk 或者账户 apk 版本过低时采用 H5 登录
2 接入了 SDK但是一直无法调用器授权页面或者调用页面异常
(1) 请确认是否申请了 SDK 所需要的权限Android 60 以后权限需要应用去动态申请接
入方需要动态申请上述权限之后才可使用授权相关功能
(2) 请确认各 cpu 架构的 so 是否拷贝完全aar 文件中只有 armv6 的 so其他的 so 需要
手动拷贝
vivo 接入文档
第 10 页
接口说明
请求消息
协议类型HTTPS(POST请求)
数据格式Text
服务URL
httpspassportvivocomcnoauth20refresh_token
消息方向第三方服务-gt账户系统
请求参数
参数 参数名称 类型 必填 参数说明
基本参数
timestamp 时间戳
long 是
请求的当前时间戳时
间戳和服务器时间戳进
行校正过 时间戳是自
1970 年 1 月 1 日
(000000 GMT)以来
的毫秒数
nonce 随机字符串 String 是 随机字符串
sign 签名 String 是 签名
业务参数
client_id 第三方服务唯一
标识 String 是
vivo 账户系统用来识别
第三服务由 vivo 分配
给第三方服务
refresh_token 授权令牌 String 是 授权令牌
scope 授权范围
String 否
scope 不填默认为
user_baseinfo表示静
默授权的用户无感
知多个授权用ldquo|rdquo分
隔
示例
httpspassportvivocomcnoauth20refresh_tokenclient_id=c1ebe4661cdc4bd3ab6977c
3561b9deeamprefresht_token=eb6fc13d81331e01638eca34399f4d61amptimestamp=1502521720
086ampnonce=cd04cb5d00b34e16c377616cf6dd55f8ampsign=eee6985a0448cef2a06ace053b7e1
917
响应消息
accesstoken 18168060599
refreshtoken zhangwtest
expires_in3600
state 200
返回状态
vivo 接入文档
第 11 页
总结标准授权模式适用于有业务服务器的应用安全性
比较好
33 简化授权方式【Client 对接】
简化模式 SDK 直接返回 AccessToken 给应用不需要经过业务服务器
应用 账户SDK
1调用RequestAccessToken获取AccessToken
2SDK返回AccessToken
代码示例
mOauthrequestAccessToken(new OauthCallback()
Override
public void onStartLoading()
Override
public void onResult(OauthResult result)
Override
public void onEndLoading()
)
OauthResult 说明
参数 说明
状态码 提示信息
4000 请求无效
4001 Token 过期
vivo 接入文档
第 12 页
statusCode 授权的结果
200授权成功
12用户取消授权
13授权失败-网络无法连接
14授权失败-其他错误
accesstoken 授权 AccessToken
expireIn AccessToken 的有效期单位是秒
当应用接收回调或者退出当前页面时需要解注册 Listener方法如下
mOauthunRegisterOauthCallback()
总结简化授权模式流程简单适用于没有业务服务器的应用安全性比较弱
34 通过 AccessToken 获取用户信息【Client 对接】
无论是标准授权方式还是简化授权方式应用最后都会获得 AccessToken利用 AccessToken
可以获取用户信息
mOauthrequestUserInfo(mAccessToken new UserInfoCallback()
Override
public void onUseInfoResult(UserInfoResult data)
)
参数 说明
statusCode 授权的结果
200成功
4000请求无效
5001Token 过期
5002授权不足
5003Token 无效
openid 用户的唯一标识
nickname 用户的昵称
avatar 用户的头像地址
当应用接收到回调或者退出当前页面时需要解注册 Listener方法如下
mOauthunRegisterUserInfoCallback()
35 编译防混淆方法
添加混淆的应用需要添加以下方法防混淆sdk
vivo 接入文档
第 13 页
-keep class combbkaccount
-keep public class comvivoic
-dontwarn comvivoic
4 附录-服务器签名算法
41 MD5 签名
1生成待签名的字符串
在请求参数中除去签名参数(即 sign)把其它的参数按照字段的顺序排序排序完成
后再把所有的参数用amp符号连接起来这样就完成了待签名的字符串
2签名
目前暂只支持 MD5 签名
MD5 是一种摘要生成算法通过在签名原始串后加上第三方的 CientSecret(接入前申请的
APPSECRET)密钥的内容进行 MD5 运算形成的摘要字符串即为签名结果
第三方可以使用提供的工具类把所有请求所求参数放到 Map 中生成 paraMap用第三方服务
申请的 client_id(接入前申请的 APPID)对应的 client_secret(接入前申请的 APPSECRET)作为签
名密钥调用 PartnerSignUtil 的 sign 方法生成生成签名作为参数放在 url 后即可
如 client_secret 4e53b6bf60659b3547637247f3c2d1b9
sign=MD5(text+client_secret)=(client_id=c1ebe4661cdc4bd3ab6977c3561b9deeampcode=386cdb37
4a742522848d63fd05b2a22bampgrant_type=authorization_codeampnonce=08a36077414d5f076cd9a587
9fd741f5amptimestamp=1502855224 + 4e53b6bf60659b3547637247f3c2d1b9)
签名字符串
param paraMap 需要签名的参数Map
param key 签名的密钥
return 签名结果
public static String sign(MapltString Stringgt paraMap String key)
String saltValue = key
return MD5SignUtilsign(paraMap saltValue SIGNATURE)
vivo 接入文档
第 14 页
42 MD5 签名工具
MD5SignUtiljava PartnerSignUtiljava
5 FAQ
1 接入了 SDK为什么都是 H5 登录
答授权 SDK 会根据 vivo 手机内置的账户 apk 版本决定使用 H5 登录还是 Native 登录当
没有账户 apk 或者账户 apk 版本过低时采用 H5 登录
2 接入了 SDK但是一直无法调用器授权页面或者调用页面异常
(1) 请确认是否申请了 SDK 所需要的权限Android 60 以后权限需要应用去动态申请接
入方需要动态申请上述权限之后才可使用授权相关功能
(2) 请确认各 cpu 架构的 so 是否拷贝完全aar 文件中只有 armv6 的 so其他的 so 需要
手动拷贝
vivo 接入文档
第 11 页
总结标准授权模式适用于有业务服务器的应用安全性
比较好
33 简化授权方式【Client 对接】
简化模式 SDK 直接返回 AccessToken 给应用不需要经过业务服务器
应用 账户SDK
1调用RequestAccessToken获取AccessToken
2SDK返回AccessToken
代码示例
mOauthrequestAccessToken(new OauthCallback()
Override
public void onStartLoading()
Override
public void onResult(OauthResult result)
Override
public void onEndLoading()
)
OauthResult 说明
参数 说明
状态码 提示信息
4000 请求无效
4001 Token 过期
vivo 接入文档
第 12 页
statusCode 授权的结果
200授权成功
12用户取消授权
13授权失败-网络无法连接
14授权失败-其他错误
accesstoken 授权 AccessToken
expireIn AccessToken 的有效期单位是秒
当应用接收回调或者退出当前页面时需要解注册 Listener方法如下
mOauthunRegisterOauthCallback()
总结简化授权模式流程简单适用于没有业务服务器的应用安全性比较弱
34 通过 AccessToken 获取用户信息【Client 对接】
无论是标准授权方式还是简化授权方式应用最后都会获得 AccessToken利用 AccessToken
可以获取用户信息
mOauthrequestUserInfo(mAccessToken new UserInfoCallback()
Override
public void onUseInfoResult(UserInfoResult data)
)
参数 说明
statusCode 授权的结果
200成功
4000请求无效
5001Token 过期
5002授权不足
5003Token 无效
openid 用户的唯一标识
nickname 用户的昵称
avatar 用户的头像地址
当应用接收到回调或者退出当前页面时需要解注册 Listener方法如下
mOauthunRegisterUserInfoCallback()
35 编译防混淆方法
添加混淆的应用需要添加以下方法防混淆sdk
vivo 接入文档
第 13 页
-keep class combbkaccount
-keep public class comvivoic
-dontwarn comvivoic
4 附录-服务器签名算法
41 MD5 签名
1生成待签名的字符串
在请求参数中除去签名参数(即 sign)把其它的参数按照字段的顺序排序排序完成
后再把所有的参数用amp符号连接起来这样就完成了待签名的字符串
2签名
目前暂只支持 MD5 签名
MD5 是一种摘要生成算法通过在签名原始串后加上第三方的 CientSecret(接入前申请的
APPSECRET)密钥的内容进行 MD5 运算形成的摘要字符串即为签名结果
第三方可以使用提供的工具类把所有请求所求参数放到 Map 中生成 paraMap用第三方服务
申请的 client_id(接入前申请的 APPID)对应的 client_secret(接入前申请的 APPSECRET)作为签
名密钥调用 PartnerSignUtil 的 sign 方法生成生成签名作为参数放在 url 后即可
如 client_secret 4e53b6bf60659b3547637247f3c2d1b9
sign=MD5(text+client_secret)=(client_id=c1ebe4661cdc4bd3ab6977c3561b9deeampcode=386cdb37
4a742522848d63fd05b2a22bampgrant_type=authorization_codeampnonce=08a36077414d5f076cd9a587
9fd741f5amptimestamp=1502855224 + 4e53b6bf60659b3547637247f3c2d1b9)
签名字符串
param paraMap 需要签名的参数Map
param key 签名的密钥
return 签名结果
public static String sign(MapltString Stringgt paraMap String key)
String saltValue = key
return MD5SignUtilsign(paraMap saltValue SIGNATURE)
vivo 接入文档
第 14 页
42 MD5 签名工具
MD5SignUtiljava PartnerSignUtiljava
5 FAQ
1 接入了 SDK为什么都是 H5 登录
答授权 SDK 会根据 vivo 手机内置的账户 apk 版本决定使用 H5 登录还是 Native 登录当
没有账户 apk 或者账户 apk 版本过低时采用 H5 登录
2 接入了 SDK但是一直无法调用器授权页面或者调用页面异常
(1) 请确认是否申请了 SDK 所需要的权限Android 60 以后权限需要应用去动态申请接
入方需要动态申请上述权限之后才可使用授权相关功能
(2) 请确认各 cpu 架构的 so 是否拷贝完全aar 文件中只有 armv6 的 so其他的 so 需要
手动拷贝
vivo 接入文档
第 12 页
statusCode 授权的结果
200授权成功
12用户取消授权
13授权失败-网络无法连接
14授权失败-其他错误
accesstoken 授权 AccessToken
expireIn AccessToken 的有效期单位是秒
当应用接收回调或者退出当前页面时需要解注册 Listener方法如下
mOauthunRegisterOauthCallback()
总结简化授权模式流程简单适用于没有业务服务器的应用安全性比较弱
34 通过 AccessToken 获取用户信息【Client 对接】
无论是标准授权方式还是简化授权方式应用最后都会获得 AccessToken利用 AccessToken
可以获取用户信息
mOauthrequestUserInfo(mAccessToken new UserInfoCallback()
Override
public void onUseInfoResult(UserInfoResult data)
)
参数 说明
statusCode 授权的结果
200成功
4000请求无效
5001Token 过期
5002授权不足
5003Token 无效
openid 用户的唯一标识
nickname 用户的昵称
avatar 用户的头像地址
当应用接收到回调或者退出当前页面时需要解注册 Listener方法如下
mOauthunRegisterUserInfoCallback()
35 编译防混淆方法
添加混淆的应用需要添加以下方法防混淆sdk
vivo 接入文档
第 13 页
-keep class combbkaccount
-keep public class comvivoic
-dontwarn comvivoic
4 附录-服务器签名算法
41 MD5 签名
1生成待签名的字符串
在请求参数中除去签名参数(即 sign)把其它的参数按照字段的顺序排序排序完成
后再把所有的参数用amp符号连接起来这样就完成了待签名的字符串
2签名
目前暂只支持 MD5 签名
MD5 是一种摘要生成算法通过在签名原始串后加上第三方的 CientSecret(接入前申请的
APPSECRET)密钥的内容进行 MD5 运算形成的摘要字符串即为签名结果
第三方可以使用提供的工具类把所有请求所求参数放到 Map 中生成 paraMap用第三方服务
申请的 client_id(接入前申请的 APPID)对应的 client_secret(接入前申请的 APPSECRET)作为签
名密钥调用 PartnerSignUtil 的 sign 方法生成生成签名作为参数放在 url 后即可
如 client_secret 4e53b6bf60659b3547637247f3c2d1b9
sign=MD5(text+client_secret)=(client_id=c1ebe4661cdc4bd3ab6977c3561b9deeampcode=386cdb37
4a742522848d63fd05b2a22bampgrant_type=authorization_codeampnonce=08a36077414d5f076cd9a587
9fd741f5amptimestamp=1502855224 + 4e53b6bf60659b3547637247f3c2d1b9)
签名字符串
param paraMap 需要签名的参数Map
param key 签名的密钥
return 签名结果
public static String sign(MapltString Stringgt paraMap String key)
String saltValue = key
return MD5SignUtilsign(paraMap saltValue SIGNATURE)
vivo 接入文档
第 14 页
42 MD5 签名工具
MD5SignUtiljava PartnerSignUtiljava
5 FAQ
1 接入了 SDK为什么都是 H5 登录
答授权 SDK 会根据 vivo 手机内置的账户 apk 版本决定使用 H5 登录还是 Native 登录当
没有账户 apk 或者账户 apk 版本过低时采用 H5 登录
2 接入了 SDK但是一直无法调用器授权页面或者调用页面异常
(1) 请确认是否申请了 SDK 所需要的权限Android 60 以后权限需要应用去动态申请接
入方需要动态申请上述权限之后才可使用授权相关功能
(2) 请确认各 cpu 架构的 so 是否拷贝完全aar 文件中只有 armv6 的 so其他的 so 需要
手动拷贝
vivo 接入文档
第 13 页
-keep class combbkaccount
-keep public class comvivoic
-dontwarn comvivoic
4 附录-服务器签名算法
41 MD5 签名
1生成待签名的字符串
在请求参数中除去签名参数(即 sign)把其它的参数按照字段的顺序排序排序完成
后再把所有的参数用amp符号连接起来这样就完成了待签名的字符串
2签名
目前暂只支持 MD5 签名
MD5 是一种摘要生成算法通过在签名原始串后加上第三方的 CientSecret(接入前申请的
APPSECRET)密钥的内容进行 MD5 运算形成的摘要字符串即为签名结果
第三方可以使用提供的工具类把所有请求所求参数放到 Map 中生成 paraMap用第三方服务
申请的 client_id(接入前申请的 APPID)对应的 client_secret(接入前申请的 APPSECRET)作为签
名密钥调用 PartnerSignUtil 的 sign 方法生成生成签名作为参数放在 url 后即可
如 client_secret 4e53b6bf60659b3547637247f3c2d1b9
sign=MD5(text+client_secret)=(client_id=c1ebe4661cdc4bd3ab6977c3561b9deeampcode=386cdb37
4a742522848d63fd05b2a22bampgrant_type=authorization_codeampnonce=08a36077414d5f076cd9a587
9fd741f5amptimestamp=1502855224 + 4e53b6bf60659b3547637247f3c2d1b9)
签名字符串
param paraMap 需要签名的参数Map
param key 签名的密钥
return 签名结果
public static String sign(MapltString Stringgt paraMap String key)
String saltValue = key
return MD5SignUtilsign(paraMap saltValue SIGNATURE)
vivo 接入文档
第 14 页
42 MD5 签名工具
MD5SignUtiljava PartnerSignUtiljava
5 FAQ
1 接入了 SDK为什么都是 H5 登录
答授权 SDK 会根据 vivo 手机内置的账户 apk 版本决定使用 H5 登录还是 Native 登录当
没有账户 apk 或者账户 apk 版本过低时采用 H5 登录
2 接入了 SDK但是一直无法调用器授权页面或者调用页面异常
(1) 请确认是否申请了 SDK 所需要的权限Android 60 以后权限需要应用去动态申请接
入方需要动态申请上述权限之后才可使用授权相关功能
(2) 请确认各 cpu 架构的 so 是否拷贝完全aar 文件中只有 armv6 的 so其他的 so 需要
手动拷贝
vivo 接入文档
第 14 页
42 MD5 签名工具
MD5SignUtiljava PartnerSignUtiljava
5 FAQ
1 接入了 SDK为什么都是 H5 登录
答授权 SDK 会根据 vivo 手机内置的账户 apk 版本决定使用 H5 登录还是 Native 登录当
没有账户 apk 或者账户 apk 版本过低时采用 H5 登录
2 接入了 SDK但是一直无法调用器授权页面或者调用页面异常
(1) 请确认是否申请了 SDK 所需要的权限Android 60 以后权限需要应用去动态申请接
入方需要动态申请上述权限之后才可使用授权相关功能
(2) 请确认各 cpu 架构的 so 是否拷贝完全aar 文件中只有 armv6 的 so其他的 so 需要
手动拷贝