vivo 快游戏帐号接入文档 · vivo 接入文档 第4 页 ②...

14
vivo 接入文档 1 vivo 快游戏帐号接入文档 版本号:1.0.0 修订记录 版本号 时间 变更内容 1.0.0 2018-9-12 新建

Transcript of vivo 快游戏帐号接入文档 · vivo 接入文档 第4 页 ②...

Page 1: vivo 快游戏帐号接入文档 · vivo 接入文档 第4 页 ② :点击创建快游戏,并填写快游戏名称,快游戏包名,快游戏图标后点击立即创建。

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 需要

手动拷贝

Page 2: vivo 快游戏帐号接入文档 · vivo 接入文档 第4 页 ② :点击创建快游戏,并填写快游戏名称,快游戏包名,快游戏图标后点击立即创建。

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 需要

手动拷贝

Page 3: vivo 快游戏帐号接入文档 · vivo 接入文档 第4 页 ② :点击创建快游戏,并填写快游戏名称,快游戏包名,快游戏图标后点击立即创建。

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 需要

手动拷贝

Page 4: vivo 快游戏帐号接入文档 · vivo 接入文档 第4 页 ② :点击创建快游戏,并填写快游戏名称,快游戏包名,快游戏图标后点击立即创建。

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 需要

手动拷贝

Page 5: vivo 快游戏帐号接入文档 · vivo 接入文档 第4 页 ② :点击创建快游戏,并填写快游戏名称,快游戏包名,快游戏图标后点击立即创建。

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 需要

手动拷贝

Page 6: vivo 快游戏帐号接入文档 · vivo 接入文档 第4 页 ② :点击创建快游戏,并填写快游戏名称,快游戏包名,快游戏图标后点击立即创建。

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 需要

手动拷贝

Page 7: vivo 快游戏帐号接入文档 · vivo 接入文档 第4 页 ② :点击创建快游戏,并填写快游戏名称,快游戏包名,快游戏图标后点击立即创建。

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 需要

手动拷贝

Page 8: vivo 快游戏帐号接入文档 · vivo 接入文档 第4 页 ② :点击创建快游戏,并填写快游戏名称,快游戏包名,快游戏图标后点击立即创建。

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 需要

手动拷贝

Page 9: vivo 快游戏帐号接入文档 · vivo 接入文档 第4 页 ② :点击创建快游戏,并填写快游戏名称,快游戏包名,快游戏图标后点击立即创建。

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 需要

手动拷贝

Page 10: vivo 快游戏帐号接入文档 · vivo 接入文档 第4 页 ② :点击创建快游戏,并填写快游戏名称,快游戏包名,快游戏图标后点击立即创建。

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 需要

手动拷贝

Page 11: vivo 快游戏帐号接入文档 · vivo 接入文档 第4 页 ② :点击创建快游戏,并填写快游戏名称,快游戏包名,快游戏图标后点击立即创建。

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 需要

手动拷贝

Page 12: vivo 快游戏帐号接入文档 · vivo 接入文档 第4 页 ② :点击创建快游戏,并填写快游戏名称,快游戏包名,快游戏图标后点击立即创建。

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 需要

手动拷贝

Page 13: vivo 快游戏帐号接入文档 · vivo 接入文档 第4 页 ② :点击创建快游戏,并填写快游戏名称,快游戏包名,快游戏图标后点击立即创建。

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 需要

手动拷贝

Page 14: vivo 快游戏帐号接入文档 · vivo 接入文档 第4 页 ② :点击创建快游戏,并填写快游戏名称,快游戏包名,快游戏图标后点击立即创建。

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 需要

手动拷贝