360SDK登录服务

2018-10-10 10:02 更新

1.初始化接口【客户端调用】(必接)


    在应用主Activity中,使用Matrix的init方法(注:一定要在主线程调用

public static void init(final Activity activity)
用于初始化360SDK,在应用主Activity的onCreate()函数中必须调用1次该方法,否则360SDK处于未初始化状态,无法使用其他接口。
当360SDK处于未初始化状态时,调用其任何接口都会返回错误,错误码为-101。
参数:
activity activity对象
使用例子:
Matrix.init(this);

 


2.登录授权流程


    360开放平台的登录流程使用Oauth2协议标准授权流程。

 

登录流程

    1. 应用客户端调用SDK进行登录 (见本章的接口介绍);

    2. 360SDK与360 服务器通信进行用户登录,返回登录结果及用户信息;

    3. 360SDK把登录结果返给应用客户端,登录完成。

 

注意事项

    1. 360SDK登录接口返回的用户信息中没有qid。如果游戏想要获取qid,需要通过应用服务器端向360服务器端发起请求,用access token换取qid,具体调用方式见『获取用户信息接口』。

    2. 如果用户重新登陆,会获取到新的token,原token即失效。用户若用同样账号在不同设备上登录同一游戏, 只有最后一次登录获取的token是最终有效的。

    3. 调用任何其他需要登录后才能调用的接口时,如果360SDK未处于登录状态,会直接返回错误,错误码为-100。

    4. 调用注销接口或销毁接口会让360SDK回到未登录的状态。



3.接口介绍


3.1 登录接口【客户端调用】(必接)

功能说明:

    展示登录界面, 让用户登录。若登录成功,返回errno为0并带有用户信息。

    登录成功返回结果,登录失败会停留在登录界面,除非用户按返回键取消登录尝试。

    注意:获取用户信息后,应用需要保存自身账号与360账号的绑定关系。


接口示例:

    /**
     * 使用360SDK的登录接口, 生成intent参数
     * 
     * @param isLandScape 是否横屏显示登录界面
     */
    private Intent getLoginIntent(boolean isLandScape) {
Intent intent = new Intent(this, ContainerActivity.class);
    // 必需参数,使用360SDK的登录模块
    intent.putExtra(ProtocolKeys.FUNCTION_CODE,
ProtocolConfigs.FUNC_CODE_LOGIN);
// 可选参数,360SDK界面是否以横屏显示,默认为true,横屏
intent.putExtra(ProtocolKeys.IS_SCREEN_ORIENTATION_LANDSCAPE,
    isLandScape);
    //可选参数,是否显示关闭按钮,默认不显示
    intent.putExtra(ProtocolKeys.IS_LOGIN_SHOW_CLOSE_ICON,
getCheckBoxBoolean(R.id.isShowClose));
    // 可选参数,是否支持离线模式,默认值为false
    intent.putExtra(ProtocolKeys.IS_SUPPORT_OFFLINE,
getCheckBoxBoolean(R.id.isSupportOffline));
    // 可选参数,是否在自动登录的过程中显示切换账号按钮,默认为false
    intent.putExtra(ProtocolKeys.IS_SHOW_AUTOLOGIN_SWITCH,
getCheckBoxBoolean(R.id.isShowSwitchButton));
    // 可选参数,是否隐藏欢迎界面
    intent.putExtra(ProtocolKeys.IS_HIDE_WELLCOME,
getCheckBoxBoolean(R.id.isHideWellcome));
  /*
 * 指定界面背景(可选参数):
 *  1.ProtocolKeys.UI_BACKGROUND_PICTRUE 使用的系统路径,如/sdcard/1.png
 *  2.ProtocolKeys.UI_BACKGROUND_PICTURE_IN_ASSERTS 使用的assest中的图片资源,
 *    如传入bg.png字符串,就会在assets目录下加载这个指定的文件
 *  3.图片大小不要超过5M,尺寸不要超过1280x720,后缀只能是jpg、jpeg或png
 */
// 可选参数,登录界面的背景图片路径,必须是本地图片路径
intent.putExtra(ProtocolKeys.UI_BACKGROUND_PICTRUE, getUiBackgroundPicPath());
// 可选参数,指定assets中的图片路径,作为背景图
intent.putExtra(ProtocolKeys.UI_BACKGROUND_PICTURE_IN_ASSERTS,
                    getUiBackgroundPathInAssets());
// 可选参数,是否需要用户输入激活码,用于游戏内测阶段。
// 如果不需激活码相关逻辑,客户传false或者不传入该参数。
intent.putExtra(ProtocolKeys.NEED_ACTIVATION_CODE,
getCheckBoxBoolean(R.id.isNeedActivationCode));
 
    //-- 以下参数仅仅针对自动登录过程的控制
    // 可选参数,自动登录过程中是否不展示任何UI,默认展示。
    intent.putExtra(ProtocolKeys.IS_AUTOLOGIN_NOUI,
getCheckBoxBoolean(R.id.isAutoLoginHideUI));
    // 可选参数,静默自动登录失败后是否显示登录窗口,默认不显示
    intent.putExtra(ProtocolKeys.IS_SHOW_LOGINDLG_ONFAILED_AUTOLOGIN,
getCheckBoxBoolean(R.id.isShowDlgOnFailedAutoLogin));
    // 社交分享测试参数,发布时要去掉,具体说明见分享接口
// intent.putExtra(ProtocolKeys.IS_SOCIAL_SHARE_DEBUG, 
//                   getCheckBoxBoolean(R.id.isDebugSocialShare));
    return intent;
}
// 调用接口
protected void doSdkLogin(boolean isLandScape) {
    mIsInOffline = false;
Intent intent = getLoginIntent(isLandScape);
IDispatcherCallback callback = mLoginCallback;
    if (getCheckBoxBoolean(R.id.isSupportOffline)) {
        callback = mLoginCallbackSupportOffline;
    }
Matrix.execute(this, intent, callback);
}


返回数据格式:

非离线模式下返回的数据格式:

{
    "data": {
        "expires_in": "36000",
        "scope": "",
        "refresh_token": "",
        "access_token": "6461171100c3bfa3cba24cc332d7d78b311d2bf590f4877c9" // token
    },
    "errno": 0
}

离线模式下返回的数据格式:

{
 data: {
  mode: "offline" // mode 值为offline代表进入离线模式
 },
 errno: 1 // errno 值为1
}


callback示例:

// 登录接口回调(不支持离线模式)
// 登录、注册的回调
privateIDispatcherCallback mLoginCallback = newIDispatcherCallback() {
 
    @Override
    publicvoid onFinished(String data) {
            // press back
            if (isCancelLogin(data)) {
                return;
            }
            // 显示一下登录结果
            Toast.makeText(SdkUserBaseActivity.this, data, Toast.LENGTH_LONG).show();
            mIsInOffline = false;
            mQihooUserInfo = null;
            // 解析access_token
            mAccessToken = parseAccessTokenFromLoginResult(data);
 
            if (!TextUtils.isEmpty(mAccessToken)) {
// 需要去应用的服务器获取用access_token获取一下用户信息
                getUserInfo();
            } else {
                Toast.makeText(SdkUserBaseActivity.this, "get access_token failed!",
  Toast.LENGTH_LONG).show();
            }
 
    }
};
 
// 登录结果回调(支持离线模式)
private IDispatcherCallback mLoginCallbackSupportOffline
  = new IDispatcherCallback() {
    @Override
    public void onFinished(String data) {
        if (isCancelLogin(data)) {
            return;
        }
        Log.d(TAG, "mLoginCallbackSupportOffline, data is " + data);
        try {
            JSONObject joRes = new JSONObject(data);
            JSONObject joData = joRes.getJSONObject("data");
            String mode = joData.optString("mode", "");
            if (!TextUtils.isEmpty(mode) && mode.equals("offline")) {
                Toast.makeText(SdkUserBaseActivity.this,
                    "login success in offline mode",
                     Toast.LENGTH_SHORT).show();
                mIsInOffline = true;
                // 显示一下登录结果
                Toast.makeText(SdkUserBaseActivity.this, data,
                    Toast.LENGTH_LONG).show();
            } else {
                mLoginCallback.onFinished(data);
            }
        } catch (Exception e) {
            Log.e(TAG, "mLoginCallbackSupportOffline exception", e);
        }
    }
};


3.2 切换账号接口【客户端调用】

功能说明:

    游戏方需要在游戏的菜单中添加“切换账号”的入口,方便用户切换账号。

    应用调用360SDK切换账号接口, 360SDK显示登录页面,用户可更换账号进行登录。之后的登录流程和返回结果与登录接口一样。


示例代码:

/**
     * 使用360SDK的切换账号接口
     * 
     * @param isLandScape 是否横屏显示登录界面
     */
protected void doSdkSwitchAccount(boolean isLandScape) {
Intent intent = getSwitchAccountIntent(isLandScape);
Matrix.invokeActivity(this, intent, mAccountSwitchCallback);
}


intent参数说明:

    除FUNCTION_CODE外,其他同登录接口

intent.putExtra(ProtocolKeys.FUNCTION_CODE, ProtocolConfigs.FUNC_CODE_SWITCH_ACCOUNT);


callback的 json格式说明:

同登录接口

 

3.3 获取用户信息【服务端调用】(选接)

    应用服务端获取access token后, 可调用360开放平台服务器端接口/user/me, 获取360用户id以及其它用户信息.

    接口地址为 https://openapi.360.cn/user/me

    获取用户信息后,应用需要保存游戏自身账号与360用户id(请务必使用360用户id,只有360用户id具有唯一标识性)的绑定关系。并且妥善保存用户信息留待以后使用.

参数说明:

参数

必选

参数说明

access_token

Y

授权的access token

fields

N

允许应用自定义返回字段,多个属性之间用英文半角逗号作为分隔符。不传递此参数则缺省返回id,name,avatar


返回参数:

参数

必选

参数说明

id

Y

360用户ID, 用户唯一标识,缺省返回

name

Y

360用户名, 缺省返回

avatar

Y

360用户头像, 缺省返回

sex

N

360用户性别,仅在fields中包含时候才返回,返回值为:男,女或者未知

area

N

360用户地区,仅在fields中包含时候才返回

nick

N

用户昵称,无值时候返回空


请求示例:

https://openapi.360.cn/user/me.json?access_token=12345678983b38aabcdef387453ac8133ac3263987654321&fields=id,name,avatar,sex,area


返回示例:

HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-store
{
 "id": "201459001",
 "name": "360U201459001",
 "avatar": "http://u1.qhimg.com/qhimg/quc/...ed6e9c53543903b",
 "sex": "未知"
 "area": ""
}


以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号