云游戏支持

本文档说明运营 SDK(下面称 SDK)对游戏盒云游戏的优惠券、充值等功能的支持

云游戏、游戏盒、SDK关系简介

下图示意了云游戏过程中各个实体的包含关系和通信流程

pay_flow_cloud

在游戏盒内进行云游戏,硬件部署结构有以下包含关系:

注意:上述包含关系中出现了两个游戏盒、两个运营SDK,它们完全可以是不同的

一些典型的通信流程

接入准备

对于具体功能,还需要额外配置,将在下文说明

初始化

游戏盒调用充值前需要以特定参数初始化,以告知 SDK 的初始化方式

mOpeCenter = OperateCenter.getInstance();
OperateConfig opeConfig = new OperateConfig.Builder(requireContext())
        .setGameKey(mGame.key()) // game key,从云端获取
        .setOrientation(SettingProvider.screenOrientation()) // SDK 页面方向,跟随游戏
        .setForCloud(true) // 是否为云游戏充值初始化
        .build();
mOpeCenter.setConfig(opeConfig);
mOpeCenter.init(MainActivity.this, new OperateCenter.OnInitGlobalListener() {
        @Override
        public void onInitFinished(boolean isLogin, User userInfo) {
            // 初始化后处理
        }

        @Override
        public void onUserAccountLogout(boolean fromUserCenter) {
            // 用户登出,游戏应回到自身登录页面
        }
        @Override
        public void onSwitchUserAccountFinished(boolean fromUserCenter, User userInfo) {
            // 用户切换,游戏应回到选服页面
        }
});

悬浮窗优惠券页

/*
* 获取云游戏优惠券View
*
* @param activity 游戏Activity
* @param args 游戏盒向游戏盒服务端临时请求获取到的accessToken
* @param listener1 踢出回调对象;其中code:607、608为踢出标识;message:为踢出说明文案
* @param listener2 需要手机认证时的回调对象;
* @return 优惠券view;在未初始化 || activity== null || gameBoxToken || listener1 == null || listener2 == null时该view可能为空
 */
mOpeCenter.getCouponView(activity,args,
    new OpeResultListener() {
    @Override
    public void onResult(int code, @Nullable String message) {

    }},
    new OpeResultListener() {
    @Override
    public void onResult(int code, @Nullable String message) {

    }
});
/**
 * 云游戏优惠券页面,刷新优惠券列表
 */
 mOpeCenter.refreshCouponView();

云游戏充值

基本原理

运营 SDK 支持云游戏充值方案,是将云端充值请求转发到用户环境来完成。方案如图所示:

pay_flow_cloud

整个流程围绕订单及其结果的传递而展开(略去不必要的细节),简要说明如下:

至此,完成整个充值流程,但是需要注意,此方案不支持单机游戏

相关配置

接口调用

游戏盒需要调用 SDK 内的充值接口,此接口会与游戏所用充值接口不一样

/*
 * 云游戏充值.
 *
 * @param activity Activity对象
 * @param args     Map,包装充值参数,包括用户、订单、设备参数
 * @param listener 充值回调对象
 */
mOpeCenter.recharge(activity, args, new OperateCenter.OnRechargeFinishedListener() {
    @Override
    public void onRechargeFinished(boolean success, int resultCode, String msg) {
        // todo
    }
});