客户端接入指南


本文档面向 Android 开发者,描述的接入方式适合运营在 4399 平台、只需要防沉迷功能的游戏。

SDK 下载

SDK和相关示例的下载地址可在游戏创建后,进入 「游戏管理-SDK服务」 页面获取。

image

SDK 说明

用户信息与隐私策略

注意

如果您是开发者,在为用户提供服务前请阅读 《4399通行证用户服务协议》《隐私政策》,了解SDK对个人信息收集范围、处理目的以及权限使用情况。请您向用户提供服务时,告知相关信息并取得用户同意。

如果您是用户,请在使用我们的服务前阅读 《4399通行证用户服务协议》《隐私政策》,了解SDK对个人信息收集范围、处理目的以及权限使用情况。充分理解后再开始使用我们的服务。

功能描述

为接入4399平台的游戏提供防沉迷支持

SDK 优先提供在线aar依赖方式,Demo 结构遵循 Android Studio(as) 规范,但仍然保留了 jar+res 的依赖方式。
SDK 支持的编译配置 android:minSdkVersion >= 16

集成流程

准备

首次接入 SDK,要在 4399 开放平台 注册应用,主要是提交APK、素材等信息。
完成后,开发者将得到 SDK 的基础参数:game keyGameKey,游戏在 4399 平台的运营标识(开发者平台的游戏信息页面显示为“游戏ID”)

引入依赖

根据游戏需要,以下三种方式可选其一

repositories {
    maven {
        // 4399 SDK 开放仓库:正式
        url 'https://mvn.4399doc.com/repository/maven-releases'
    }
    maven {
        // 4399 SDK 开放仓库:快照
        url 'https://mvn.4399doc.com/repository/maven-snapshots'
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar', '*.aar'])
    
    // 运营 SDK:建议使用最新正式版本(release仓库中的版本),可通过浏览仓库地址或向运营咨询版本
    implementation "cn.m4399.sdk:operate:3.14.4"
    
    // volley 和 support 是 SDK 使用的外部依赖,若接入方已有,可忽略
    implementation 'com.android.volley:volley:1.2.1'
    //noinspection GradleCompatible
    implementation "com.android.support:support-v4:28.0.0"
}

注意:若使用7.0+版本的 gradle 及 android build 插件,仓库地址应配置在settings.gradle

operate/libs/volley-v1.2.1.jar
operate/libs/support-v13-23.2.1.jar

Gradle 文件中注意添加本地依赖

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar','*.aar'])
}

abi 适配与 so 库

若游戏不需要支持所有 abi ,可以按需选用。
aar依赖方式,按以下方式配置需要的abijar+res依赖方式需要手动删除不需要abi目录

android {
    defaultConfig {
        ndk {
            // 根据游戏需要选择
            abiFilters "armeabi", "armeabi-v7a", "x86", "arm64-v8a"
        }
    }
}

接口调用:初始化(必须)

功能简介: 此接口初始化 SDK 内部状态,并完成“更新、激活、防沉迷”等流程。 SDK 初始化后才能正确调用其他接口
调用时机: 建议在游戏 Activity 的开始处如 onCreate 方法中进行

// 初始化选项,传入游戏配置,更多说明见接入文档
OperateConfig config = new OperateConfig.Builder(this)
        // 设置游戏运营 key,此参数需要在原创开放平台注册应用后得到
        .setGameKey(GAME_KEY)
        // 设置SDK页面方向,应与游戏方向一致,部分第三方页面需要在AndroidManifest中设置
        .setOrientation(GAME_ORIENTATION)
        // 设置游戏是否兼在高于Android 9.0版本系统容全面屏,true兼容,默认false
        .compatNotch(GAME_COMPACT_NOTCH)
        .build();

// 初始化SDK
AdGame.init(this, config, new OpeInitedListener() {
    @Override
    public void onInitFinished() {
        // 验证通过,可以进入游戏
    }
});

初始化的几点说明

页面方向

<!-- 游戏 Activity:
     若覆盖了 android:resizeableActivity="false",则必须如下设置 android:configChanges
     android:configChanges="orientation|screenSize|keyboardHidden|screenLayout|navigation|smallestScreenSize|fontScale"
     
     不应该使用 android:launchMode="singleTask" 启动模式,可以考虑 singleTop
 -->

其中android:configChanges 新增的配置项,是为适配 Android 分屏模式而添加的,更多内容参考多窗口支持

分屏(画中画)兼容:游戏进入分屏再点击桌面图标启动,会重启游戏页面,而并没有完整的启动应用,这会导致部分功能异常,
为了兼容这种情况,SDK 为应用默认设置了android:resizeableActivity="false",即不支持分屏模式,
若游戏出于某些原因必须要覆盖此项,则务必按最低标准设置入口 Activity 和主 Activity的android:configChanges,即

<activity
    android:name=".MainActivity"
    android:configChanges="orientation|screenSize|keyboardHidden|screenLayout|navigation|smallestScreenSize|fontScale"
/>
方向参数 含义
SCREEN_ORIENTATION_LANDSCAPEint, 0 横屏
SCREEN_ORIENTATION_PORTRAIT, int, 1 竖屏
SCREEN_ORIENTATION_SENSOR_LANDSCAPEint, 6 横屏,可180度旋转
SCREEN_ORIENTATION_SENSOR_PORTRAITint, 7 竖屏
<!-- 
    4399 SDK:SDK 中除了以'cn.m4399.'开头的 Activity 都是第三方页面,
        假设游戏为横屏,需要锁定它们的方向为横屏,可以设置 android:screenOrientation,
        此设置应与初始化接口中设置的值保持对应,且若编译有错误,可以进一步设置‘tools:replace’
 -->
<activity android:name="com.cmic.gen.sdk.view.GenLoginAuthActivity"
    android:configChanges="orientation|keyboardHidden|screenSize" 
    android:launchMode="singleTop"
    android:screenOrientation="landscape" 
    android:theme="@style/AppTheme.NoActionBar"
    tools:replace="android:theme, android:screenOrientation" />