统一登录验证

来自AnySDK 文档
跳转至: 导航搜索

统一登录验证流程

登陆流程.jpg
注:在这个流程中,Access Token这个字段并不是每个渠道都存在的,并且验证token的方式也不一样。因此在客户端是由AnySDK框架持有并使用token字段的,游戏代码无法获取到。如果游戏服务器想实现登录验证之后的安全验证。可以在第八步游戏服务器向游戏客户端返回验证结果数据中ext字段加入由游戏服务器生成的sessionId,客户端就可以在登录成功回调中获取此数据,后面在游戏客户端请求游戏服务器获取数据时需携带此sessionId通过游戏服务器的验证。
1、游戏客户端调用AnySDK框架login接口,客户端弹出渠道SDK登录界面,相应渠道SDK内部向渠道平台服务器发起登录请求
注:要接到初始化成功的回调,才可以调登录的接口函数
2、用户登录成功,渠道SDK获取到渠道平台服务器返回的用户Id和授权码
3、AnySDK框架从SDK获取到UserId和授权码,然后向游戏服务器发送请求去做用户登录信息验证(此步请求的接口地址就是开发者填写在打包工具渠道参数上的用户登录验证地址)
注:以上三步都是由AnySDK Framework完成的,不需要开发者再写代码
4、游戏服务器接收到客户端请求过来的参数之后,将用户信息等参数再转发给AnySDK服务器(此步骤执行的操作在下面有提供PHP和JAVA语言的DEMO代码,开发者可以直接使用或者参考实现)
(注:此处每个渠道sdk登录得到的参数个数与内容都是不同的,因此游戏服务器要遍历接收到的请求中所有参数并全部转发给AnySDK服务器,否则无法通过登录验证)
5、AnySDK服务器接收到游戏服务器发送过来的请求数据后去向对应的渠道平台服务器进行用户登录验证
6、AnySDK服务器接收渠道服务器的验证结果并获得用户最终的AccessToken
7、AnySDK服务器将渠道服务器返回的验证结果转发给游戏服务器
8、游戏服务器再返回通知AnySDK框架登录验证结果,并可以返回一些游戏逻辑相关的数据给游戏客户端
9、AnySDK框架执行登录回调函数来通知游戏客户端是否登陆成功

游戏服务器请求登录验证

编码说明

服务端代码字符编码一律要使用 utf-8 without bom ,否则会出现数据编码错误,导致客户端解析数据失败的问题,可以使用notepad++进行转换

登录验证url

 http://oauth.anysdk.com/api/User/LoginOauth/    (注意:HTTP协议POST方法)

登录验证步骤

1.接收AnySDK Framework请求参数(预设privateKey及AnySDK统一登录验证地址)
2.检查privatekey
3.向AnySDK登录验证服务发起验证请求
4.接收验证结果并游戏逻辑及处理ext域

H5游戏接入AnySDK登录的特殊处理

H5游戏接入AnySDK的时候,游服转发请求时需要往请求参数里面加入private_key参数及其参数值。

<?php
define('ANYSDK_PRIVATE_KEY', 'xxxprivate_keyxxx');
...
// 接收请求参数
$params = $_REQUEST;
// 往请求参数增加private_key,这一步要在发起http请求之前
$params['private_key'] = ANYSDK_PRIVATE_KEY;
// 发起http请求
... 

登录验证服务端demo

更多服务端Demo托管在github.com,请前往自取。包括PHP、Java、Python、NodeJS等语言。
 https://github.com/AnySDK/Sample_Server

AnySDK登录验证响应数据

AnySDK统一登录验证获取的数据统一以json格式返回,其中包含status、data、common、ext四个子域部分:
1. status:用于表达验证请求成功与否
2. data:保存渠道平台返回的验证信息(此部分数据的格式根据不同渠道的实现不同而有所差异,有些渠道会返回较多的用户信息数据,有些渠道只会返回校验结果,AnySDK返回这些数据是为了能让游戏服务器获取到所有的原始验证信息,开发者可以使用这些数据,也可以直接忽略掉这部分数据,也不会影响接入)
3. common:包含渠道编号、渠道SDK标识,渠道返回的用户userId(渠道唯一),以及用户登录前选择的游戏服务器id(此数据只有当客户端调用带serverId的重载登录函数时才会有值,否则默认为空),开发者请使用此部分统一数据作为用户数据。
4. ext:默认为空,游戏服务器可以在ext域中存放游戏逻辑相关的数据(比如开发商服务器内部设定用户标识),这些数据会在游戏客户端获取到登录成功回调时附带的msg信息里完整的拿到,然后用来执行相应的游戏逻辑;

成功返回范例(以360为例):

  {
      "status":"ok",
      "data":
      {
            "id":"18135798",
            "name":"\u6b27\u9ea6\u560e\u5730",
            "avatar":"http:\/\/u1.qhimg.com\/qhimg\/quc\/48_48\/22\/02\/55\/220255dq9816.3eceac.jpg?f=6c449fbaaa093e52b4053e46170af079",
            "sex":"\u672a\u77e5",
            "area":"",
            "nick":""
      },
      "common":
       {
             "channel":"000023",
             "user_sdk":"360",
             "uid":"18135798",
             "server_id":"1",
             "plugin_id":"12"
       },
     "ext":""
  }

失败返回范例:

  {
     "status":"fail",
    "data":
     {
         "error":"login_check_fail",
        "error_no":"20002"
      },
      "sn":"error_log_serial_num"
  }

失败返回中的sn是错误日志序列号,您碰到此类错误的时候,将sn的值提供给AnySDK技术支持人员,有助于帮你排查问题。

错误码表