移动推送SDK读取的个人信息以及用途:
移动推送 |
设备信息,包括操作系统、设备型号,IP ,运营商信息 |
用于识别推送设备,实现向单个设备推送功能 |
移动热修复SDK读取的App权限以及用途:
移动推送 |
ACCESS_NETWORK_STATE |
获取网络连接状态 |
当推送异常时,用于判断网络状态。 |
以上是移动推送设计个人信息和权限的用途, 需要加到你的app隐私文档中,除此之外,你还需要在代码中如下操作:
移动推送SDK的关键方法 PushServiceFactory.init(applicationContext); 必须在Application的onCreate中执行,它不会获取用户信息。register() 需要在用户签署隐私政策之后调用:
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
PushServiceFactory.init(this); // 正常初始化,这个方法无需延后也不要判断任何进程
// 获取隐私政策签署状态 ,signedFlag 是你在签署隐私协议的时候保存的签署状态:同意 or 拒绝
if (signedFlag) {
CloudPushService.register(callback); //阿里注册
HuaWeiRegister.register(this); // 厂商注册
}
}
}
// 在用户同意隐私协议之后这样写:
if (userClickedUserAgreement) {
CloudPushService.register(callback); // 阿里注册
HuaWeiRegister.register(getApplication()); // 厂商注册
}
以上代码片段可以通过大部分应用市场的隐私检查, 但是2022年8月后部分厂商加严了隐私检查,有可能会提示以下问题:
1,android.intent.action.BOOT_COMPLETED用于维持重启后推送通道的稳定性,个别厂商可能会不允许,解决方法:在清单文件中移除调用,移除后对推送功能影响不大,代码如下:
<receiver
android:name="com.taobao.accs.EventReceiver"
tools:node="merge"
android:exported="true">
<intent-filter tools:node="remove">
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
2,部分检测机构认为 读取应用安装列表,原因是调用堆栈中有 queryIntentActivitiesAsUser 调用:
说明: 移动推送代码如下
public static boolean disableComponent(Context context, String componentName) {
ComponentName comptName = new ComponentName(context, componentName);
PackageManager pm = context.getPackageManager();
try {
ALog.d(TAG, "disableComponent,comptName=" + comptName.toString());
int enabled = pm.getComponentEnabledSetting(comptName);
if (enabled != PackageManager.COMPONENT_ENABLED_STATE_DISABLED) {
pm.setComponentEnabledSetting(comptName,
PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
PackageManager.DONT_KILL_APP);
return true;
}
} catch (Throwable e) {
}
return false;
}
PackageManager 的 setComponentEnabledSetting 方法内部实现会去调用 queryIntentActivitiesAsUser,很多 Google 自己的 API 都会调用 queryIntentActivitiesAsUser;
但所有检测机构检测有没有获取安装列表就是坚持有没有代码调用 queryIntentActivitiesAsUser 方法,并不管是业务代码调的,还是 Google 自己 API 调的。
开发者被提示这个的话可以提供以上代码段去厂商申诉,阿里云移动推送SDK并未读取应用安装列表。
如果申诉失败,可以更改SDK初始化代码如下,即可规避:
public static void initOld(Application context) {
boolean isFirstInstall = true;
if (isFirstInstall) {
// 此方法会调用 setComponentEnabledSetting 方法,setComponentEnabledSetting 内部会 触发 queryIntentActivitiesAsUser 调用
// 所以不存在获取应用列表的行为
// 但是这个配置,不必每次启动都调用,可以考虑仅在应用第一次启动时,调用,避免后续的频繁调用
// 是否使用channel进程,这种初始化方式,默认是关,需要手动开启
ACCSClient.enableChannelProcess(context, true);
}
// 这个有参初始化方法仅会在安装时调用一次,不会被应用市场驳回。
PushServiceFactory.init(context, "appKey", "appSecret");
}