Skip to content

Android端接入指引

环境配置

1.targetSdk版本

当targetSdk版本为28以上时,http请求可能会失败,需要在AndroidManifestapplication节点下添加以下属性:

xml
<application android:usesCleartextTraffic="true"></application>

2.横竖屏配置

根据游戏的横竖屏,需要对游戏做横竖屏screenOrientation配置,同时还需要设置游戏activityconfigChanges属性为orientation|screenSize,保证屏幕发生变化时游戏activity不会重新创建,如下所示:

xml
<activity
        android:name="游戏Activity"
        android:configChanges="orientation|screenSize"
        android:screenOrientation="sensorPortrait" />

3.使用aar进行接入

导入nutgameqsdk-x.x.x.aar文件以及其相关依赖到项目的libs目录,在项目主模块(:app)的build.gradle文件dependencies项导入,如下所示:

groovy
// 坚果SDK(x.x.x对应相应版本号)
implementation files('libs/nutgameqsdk-x.x.x.aar')
// 坚果SDK依赖(注意区分Android和AndroidX项目)
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support:recyclerview-v7:28.0.0'
implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.61'
// 支付宝、微信支付依赖
api 'com.alipay.sdk:alipaysdk-android:+@aar'
api 'com.tencent.mm.opensdk:wechat-sdk-android:+'
// 其他依赖
implementation files('libs/ALP-crashshield-2.0.3-release.jar')
implementation files('libs/ALP-logger-2.0.3-release.jar')
implementation files('libs/ALP-main-2.0.3-release.jar')
implementation files('libs/ALP-phoneNumber-L-AuthSDK-2.12.1.jar')
implementation files('libs/ALP-r-classes.jar')
implementation files('libs/alpha-asst.aar')
implementation files('libs/com.quickjoy.lib_v2017101601_proguard.jar')
implementation files('libs/converter-gson-2.9.0.jar')
implementation files('libs/fastjson-1.2.60.jar')
implementation files('libs/gson-2.8.6.jar')
implementation files('libs/HumeSDK-1.1.1.aar')
implementation files('libs/okhttp-4.7.2.jar')
implementation files('libs/okio-2.6.0.jar')
implementation files('libs/open_sdk_3.5.17.3_r75955a58_lite.jar')
implementation files('libs/picture_library-release.aar')
implementation files('libs/quickcostum-release.aar')
implementation files('libs/uk-co-senab-photoview-source.jar')
implementation files('libs/walle-cli-all.jar')

4.Icon角标

游戏的icon需要在右下角加入坚果游戏角标,素材可在角标素材文件夹中找到。

接入流程

1.添加闪屏(必接)

游戏需接入坚果游戏闪屏(自行创建闪屏Activity并安排位置),创建的闪屏Activity需继承自NutGameSplashActivity,同时需覆写onSplashStop方法,填入闪屏结束后要跳转的逻辑即可。

java
@Override
public class SplashActivity extends NutGameSplashActivity {
    @Override
    public void onSplashStop() {
        // 默认闪屏显示3秒,结束后跳转到游戏界面
        startActivity(new Intent(SplashActivity.this, GameActivity.class));
        finish();
    }
}

将创建的闪屏Activity添加到AndroidManifest.xml中,并设置为游戏启动Activity。

xml
<activity
    android:name="com.xxx.SplashActivity"
    android:screenOrientation="竖屏|横屏"
    android:configChanges="orientation|screenSize">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

注意:android:screenOrientation属性,其值根据游戏横竖屏情况决定。

2.回调通知

2.1.初始化回调(必接)

设置SDK初始化回调通知,SDK初始化成功后,就可以调用SDK登录等其它相关操作。

java
NutSdk.getInstance().setInitCallback(new InitCallback() {
    @Override
    public void onSuccess() {
        // 初始化完成,调用SDK登录
    }

    @Override
    public void onFailed(String msg) {
        // 初始化失败
        Log.d("nutgame", "initSDK onFailed: " + msg);
    }
})

2.2.登录回调(必接)

设置SDK登陆回调通知,登录成功后即可得到当前小号的信息,进行游戏登陆等相关处理。

java
NutSdk.getInstance().setLoginCallback(new LoginCallback() {
    @Override
    public void onSuccess(UserInfo userInfo) {
        // 登录成功,获取当前小号的UID、UserName、Token
        Log.d("nutgame","Login onSuccess: " + userInfo.getUid());
    }

    @Override
    public void onFailed(String msg) {
        // 登录失败后的操作
        Log.d("nutgame", "Login onFailed: " + msg);
    }
})

登录返回字段说明:

字段类型说明
UIDString用户ID,用户的唯一标识
UserNameString用户登录名
TokenString用户验证token

登录顺序图:

    sequenceDiagram
        autonumber
        坚果SDK->>坚果服务器: 发起小号登录请求
        坚果服务器->>坚果SDK: 返回小号的uid、token
        坚果SDK->>游戏客户端: 提供小号uid、token用于登录游戏
        游戏客户端-->>游戏服务器: 提交小号uid、token去登录
        游戏服务器-->>坚果服务器: 验证小号uid、token有效性
        坚果服务器->>游戏服务器: 返回验证结果
        游戏服务器-->>游戏客户端: 返回登录结果
    

2.3.登出回调(必接)

设置SDK登出回调通知,SDK登出后游戏应同步登出。

java
NutSdk.getInstance().setLogoutCallback(new LogoutCallback() {
    @Override
    public void onSuccess() {
        // SDK已登出,处理游戏登出
    }
})

2.4.支付回调(必接)

设置SDK支付回调通知,支付完成后,可以在支付回调中拿到支付结果(以服务端通知为准,客户端支付回调仅作为参考)。

java
NutSdk.getInstance().setPayCallback(new PayCallback() {
    @Override
    public void onSuccess() {
        // 支付成功
        Log.d("nutgame", "pay onSuccess");
    }

    @Override
    public void onFailed(String msg) {
        // 支付失败
        Log.d("nutgame", "pay onFailed: " + msg);
    }
})

支付顺序图:

    sequenceDiagram
        autonumber
        actor 玩家
        玩家-->>游戏客户端: 点击购买道具
        游戏客户端-->>游戏服务器: 提交购买道具请求
        游戏服务器-->>游戏客户端: 创建订单,返回订单号
        游戏客户端-->>坚果SDK: 调用支付接口,传入订单信息
        坚果SDK->>坚果服务器: 发起支付流程
        坚果服务器->>游戏服务器: 发送支付结果通知
        游戏服务器-->>游戏客户端: 发放道具
        游戏服务器-->>坚果SDK: 返回发放道具结果
        游戏客户端-->>玩家: 获得道具
    

2.5.退出游戏(必接)

设置退出游戏回调通知,玩家点击了确定退出后,再执行退出游戏操作。

java
NutSdk.getInstance().setExitCallback(new ExitCallback() {
    @Override
    public void onSuccess() {
        // 执行游戏退出逻辑...
        finish();
    }

    @Override
    public void onFailed(String s) {
        // 失败函数忽略即可
    }
});

3.初始化(必接)

需要在游戏ActivityonCreate方法中执行(产品号由负责对接的运营提供)。

java
NutManager.init(GameActivity.this, "产品号(productCode)");

4.登录(必接)

调用SDK登录,拉起SDK登录弹窗。

java
NutManager.login(GameActivity.this);

5.登出(必接)

调用SDK登出,可在登出账号回调中做相应的处理。

java
NutManager.logout(GameActivity.this);

6.上报角色(必接)

玩家进入游戏后,就需要立即对当前角色的信息进行上报,请务必保证角色信息的准确性,之后每当用户的角色信息改变时就需要执行角色信息的上报操作。

java
QGRoleInfo qgRoleInfo = new QGRoleInfo();
// 上报的角色信息对象的属性均为必填
qgRoleInfo.setRoleId("100100");
qgRoleInfo.setRoleName("沙巴克杀手");
qgRoleInfo.setRoleLevel("100");
qgRoleInfo.setRolePower("13600");
qgRoleInfo.setBalance("50000");
qgRoleInfo.setVipLevel("20");
qgRoleInfo.setPartyName("玛法家园");
qgRoleInfo.setServerId("1");
qgRoleInfo.setServerName("沙巴克一区");
// 上报角色
NutManager.setGameRoleInfo(GameActivity.this, qgRoleInfo);

QGRoleInfo 角色信息类

字段名类型说明
roleidString游戏角色id(必填)
rolenameString游戏角色名字(必填)
rolelevelString游戏角色等级(必填)
rolepowerString游戏角色战斗力(必填)
balanceString游戏币余额,默认填写0(必填)
viplevelStringvip等级(必填)
partynameString工会、帮会,默认填写空字符串(必填)
serverIdString服务器id(必填)
servernameString服务器名称(必填)

7.支付(必接)

调起SDK支付页面,请务必保证订单信息的准确性,可在支付回调中接收支付结果。

java
// 角色信息
QGRoleInfo qgRoleInfo = new QGRoleInfo();
qgRoleInfo.setRoleId(QGManager.getGameRoleInfo().getRoleId()); //必传
qgRoleInfo.setRoleName(QGManager.getGameRoleInfo().getRoleName()); //必传
qgRoleInfo.setRoleLevel("100");
qgRoleInfo.setRolePower("13600");
qgRoleInfo.setBalance("50000");
qgRoleInfo.setVipLevel("20");
qgRoleInfo.setPartyName("玛法家园");
qgRoleInfo.setServerId("1"); //必传
qgRoleInfo.setServerName("沙巴克一区"); //必传
// 订单信息
QGOrderInfo qgOrderInfo = new QGOrderInfo();
qgOrderInfo.setAmount(amount); //必传
qgOrderInfo.setCount(1); //必传
qgOrderInfo.setPayParam("2000"); // 商品描述
qgOrderInfo.setOrderSubject("麻痹戒指"); // 商品名称
qgOrderInfo.setProductOrderId("18140560201541"); //订单ID 必传
qgOrderInfo.setExtrasParams(""); //透传参数
// 调起SDK支付页面
NutManager.pay(GameActivity.this, qgRoleInfo, qgOrderInfo);

QGOrderInfo订单信息类

字段名类型说明
amountString订单金额(元)
countint商品数量
payparamString商品描述
ordersubjectString商品名称
productorderidString订单号
extrasparamsString透传参数

8.生命周期方法(必接)

为了保证SDK正常运行,需要在游戏Activity的生命周期方法中执行SDK的方法

java
@Override
protected void onResume() {
    super.onResume();
    if (!TextUtils.isEmpty(QGManager.getUID())) {
        QGManager.showFloat(true);
    }
}

@Override
protected void onPause() {
    super.onPause();
    QGManager.hideFloat();
}

9.退出游戏(必接)

玩家按下返回键退出游戏时,需要执行SDK提供的退出游戏方法,此方法会弹出Dialog挽留用户。

在游戏Activity中覆写onKeyDown方法,如下所示:

java
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
        // 用户按下返回键退出游戏
        NutManager.exit(GameActivity.this);
        return true;
    }
    return super.onKeyDown(keyCode, event);
}

防沉迷相关

SDK自带防沉迷系统,会自动弹出防沉迷窗口,包含实名认证、未成年登录限制、充值限制,开发者无需再做处理。

1.获取年龄

返回值int类型,如果未实名则返回0。

java
NutManager.getAge();

2.获取实名认证与否

java
NutManager.getRealName();

坚果互娱(天津)网络科技有限公司