隐私保护SDK-Android(Java)

SDK合规指南

隐私保护SDK合规指南

1 文档修订记录

文档版本 文档更新日期 文档更新内容
3.3.56 2024.05.10 1 新增SDK合规指南;2.可选个人信息的配置。
3.3.39 2022.03.30 "2.4 添加 Activity 和权限" 新增 Activity 配置
3.3.8 2021.05.28 初版

2 接入准备

2.1 添加文件

如果游戏使用 Android Studio 管理工程,则做以下操作引入 SDK 代码。

1.打开下载好的 FYBase、FYPrivacy,拷贝文件夹中的 .aar 到工程的 libs 目录中,保持所有 .aar 在工程中只存在一份

2.打开工程的 build.gradle

  • 拷贝以下代码到 android 字段下。
repositories {
    flatDir {
        dirs 'libs'
    }
}
  • 拷贝以下代码到 dependencies 字段下。
implementation 'com.android.support:cardview-v7:28.0.0'
implementation 'com.android.support:appcompat-v7:28.0.0'
fileTree(dir: 'libs', include: ['*.aar']).each { file ->
    api(name: file.name.lastIndexOf('.').with {
        it != -1 ? file.name[0..<it] : file.name
    }, ext: 'aar')
}

2.2 添加SDK配置

1.到星云平台的"对接中心->SDK对接->SDK列表->基础接入参数->SDK配置参数"下载如下的配置文件:

配置参数

  • Android SDK 配置文件:FYCoreConfig.xml

2.打开以上的配置文件,拷贝所有meta-data配置参数到工程的 AndroidManifest.xml 中。保持所有配置参数在 AndroidManifest.xml 中只存在一份

3.可选个人信息的配置。如不希望本SDK采集某信息,请将对应字段的值改为0。如允许本SDK采集某信息,请将对应字段的值改为1

(1)在AndroidManifest.xml 中添加如下配置

<meta-data android:name="FY_GAME_PRIVACY" android:value="{
   "android_id ": "0 ",
   "basic_device_data" : "0",
   "os_version" : "0",
   "network_state" : "0",

}"/>

(2)字段名称说明

OS 个人信息类型及字段 用途和目的 是否可选 关闭方式
Android 设备基础信息(设备型号、硬件信息、屏幕分辨率) 帮用户排查异常时使用,作为异常分析的依据 修改配置参数 FY_GAME_PRIVACYbasic_device_data 字段值为"0"
Android Android ID 帮用户排查异常时使用,作为异常分析的依据 修改配置参数 FY_GAME_PRIVACY 的 android_id 字段值为"0"
Android 操作系统版本 帮用户排查异常时使用,作为异常分析的依据 修改配置参数 FY_GAME_PRIVACY 的 os_version 字段值为"0"
Android 网络状态 帮用户排查异常时使用,作为异常分析的依据 修改配置参数 FY_GAME_PRIVACY 的 network_state 字段值为"0"
Android OAID(版本3.3.56已去除) 帮用户排查异常时使用,作为异常分析的依据
Android MAC(版本3.3.56已去除) 帮用户排查异常时使用,作为异常分析的依据
Android IMEI(版本3.3.56已去除) 帮用户排查异常时使用,作为异常分析的依据

2.3 配置 Application

1、在游戏包名下新增一个 GameApplication类,该类继承自 Application,请重写GameApplication 类的 attachBaseContext 方法中调用以下代码:

FYAPP.getInstance().init(this);

打开 AndroidManifest.xml 在 application 将其继承于 GameApplication:

2.如果游戏已经继承于其他 Application,请在游戏自定义的 Application 类的 attachBaseContext 方法中调用以下代码:

FYAPP.getInstance().init(this);

3.以上2个步骤任选1个接入,否则会造成 SDK 错误闪退

2.4 添加 Activity

// 调试模式需要的Activity
<activity 
    android:name="com.stars.debuger.activity.FYDebuggerInfoActivity"
    android:windowSoftInputMode="adjustResize|stateHidden"
    android:configChanges="orientation|screenSize|keyboardHidden" />

<activity
    android:name="com.stars.privacy.activity.FYWebActivity"
    android:windowSoftInputMode="adjustResize|stateHidden"
    android:screenOrientation="behind"
    android:configChanges="orientation|screenSize|keyboardHidden"
/>

2.5 添加权限

打开 AndroidManifest.xml 添加如下权限配置:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

2.6 添加类引用

import com.stars.privacy.FYPrivacy;
import com.stars.privacy.bean.FYPRPermissionInfo;
import com.stars.privacy.bean.FYPRResponse;
import com.stars.privacy.bean.FYPRStartInfo;
import com.stars.privacy.listener.FYPRAuthCallback;

2.7 添加 Activity 生命周期方法

1、说明

  • 调用点:onKeyDown生命周期

2、调用代码

FYDebugger.getInstance().onKeyDown(keyCode,event);

3、参考范例

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
  FYDebugger.getInstance().onKeyDown(keyCode,event);
  return super.onKeyDown(keyCode, event);
}

2.8 开启调试模式

1.将 AndroidManifest.xml 中的 FY_GAME_DEBUG 的值改为 1,即可开启「调试模式」;FY_GAME_DEBUG 改为 0,即关闭「调试模式」。

2.开启「调试模式」会显示客户端的悬浮球,点击进入调试工具可以查看接口/回调的调用信息,具体调试方法可查看文档

悬浮球

3 客户端接口

3.1 启动应用(必接)

1、说明

  • 调用点:每次打开游戏后马上调用
  • 为了防止在授权之前去获取设备信息,其他 SDK 的初始化、登录等接口,必须放在“授权回调”之后调用
  • 首次会弹出“隐私协议”弹窗。后续会根据用户实际授权情况,及后台设置重新授权的情况,决定是否再次弹出
  • 系统权限列表,需根据应用实际使用权限的情况传入

2、调用代码

FYPRStartInfo startInfo = new FYPRStartInfo();

ArrayList<String> arr = new ArrayList<>();
arr.add("xxx用户协议");
arr.add("xxx隐私协议");
arr.add("xxx儿童隐私保护");

ArrayList<FYPRPermissionInfo> arr1 = new ArrayList<>();
FYPRPermissionInfo permissionInfo = new FYPRPermissionInfo();
// type 类型请严格按照下方“系统权限类型列表”提供权限组常量字段传入,如FYPRPermissionConfig.PHONE
permissionInfo.setType(FYPRPermissionConfig.PHONE);
// 权限友好说明,如“正常识别手机设备及账号安全”
permissionInfo.setDesc("xxx");
arr1.add(permissionInfo);

startInfo.setProtocolTitles(arr);
startInfo.setPermissionInfos(arr1);

FYPrivacy.getInstance().start(startInfo, new FYPRAuthCallback() {
    @Override
    public void authCallback(FYPRResponse fyprResponse) { // 授权回调

        if (fyprResponse.getStatus() == FYPRResponse.FYPRResponseAgree) { // 用户已同意授权
            // TODO: 执行其他 SDK 的初始化

            // 此回调参数,标识是否使用第三方渠道的协议,"1":是,"0":否。如果为"0",则游戏需显示“查看隐私协议按钮”,否则不显示。
            // 游戏在母包阶段,需对此参数做处理。打成渠道包后,会根据实际情况返回相应的值。
            // 未接入星云聚合SDK的游戏,可以忽略此参数对接。
            String useChannelPrivacy = String.valueOf(fyprResponse.getDataValue("use_channel_privacy"));

        } else if (fyprResponse.getStatus() == FYPRResponse.FYPRResponseDisagree) { // 用户不同意授权
            // TODO: 直接退出游戏
        }

    }
});

3、参数

参数名 说明 是否必传
protocolTitles 界面中各协议标题,ArrayList<String>格式。请按顺序传3个标题。协议名称的顺序,需按照“用户协议”、“隐私协议”、“儿童隐私保护”的顺序传入。如果为数组为空或不传,则使用SDK提供的默认标题
permissionInfos ArrayList<FYPRPermissionInfo>展示系统权限列表,按数组顺序显示。如果不需要申请安卓系统权限则不用传
  • FYPRPermissionInfo
参数名 说明 是否必传
type 系统权限类型,传入系统权限类型列表的权限组常量
desc 游戏使用权限用途说明
  • 系统权限类型表
权限组常量 权限组 权限 权限说明
FYPRPermissionConfig.PHONE phone READ_PHONE_STATE、CALL_PHONE、READ_CALL_LOG、WRITE_CALL_LOG、ADD_VOICEMAIL、USE_SIP、PROCES_OUTGOING_CALLS 读取手机设备信息权限,如imei等硬件信息
FYPRPermissionConfig.CAMERA camera camera 相机拍照权限
FYPRPermissionConfig.CONTACTS contacts READ_CONTACTS、 WRITE_CONTACTS GET_ACCOUNTS 读取手机联系人,通信记录
FYPRPermissionConfig.LOCATION location ACCESS_FINE_LOCATION、ACCESS_COARSE_LOCATION 获取定位权限
FYPRPermissionConfig.MICROPHONE microphone RECORD_AUDIO 手机麦克风权限
FYPRPermissionConfig.SMS sms SEND_SMS RECEIVE_SMS、 READ_SMS RECEIVE_WAP_PUSH、 RECEIVE_MMS 读取手机短信权限
FYPRPermissionConfig.CALENDAR calendar READ_CALENDARWRITE_CALENDAR 日历权限
FYPRPermissionConfig.SENSORS sensors BODY_SENSORS 传感器权限
FYPRPermissionConfig.STORAGE storage READ_EXTERNAL_STORAGEWRITE_EXTERNAL_STORAGE 存储权限

4.回调

  • 授权回调:authCallback

3.2 查看协议(必接)

1、说明

  • 调用点:在进入游戏后有个按钮用以触发查看协议,建议放在游戏内的设置菜单下。

2、调用代码

FYPrivacy.getInstance().checkAuth();

3、参数