前言
不晓得各位有没有这种感觉,因为工业和信息化部公布的新规定,当初国内各大 android 利用市场的审核变的越来越严格,动不动就审核不通过,给你打回,让你整改,对开发者及其不敌对。但换个角度想想,这对于消费者变的更敌对,而且审核问题基本上只有改一次就行,只是很多审核平台并没有给出具体的批改计划,所以这里给各位提供一下自己的踩坑记录,以供参考。
自己素日上架的平台有小米,华为,利用宝。其它平台预计也差不多吧。
注释
1. 须要提供 ICP 证书
触发条件
如果你的利用有领取购买商品相干的性能,就须要去申请 ICP 证书。
解决方案
这玩意要钱。你能够抉择放弃在这个平台上线或者按要求申请完 ICP 成后提供相干证实。
影响范畴
利用宝和小米会须要提供 ICP,华为临时没要求。
2. 个性化推送
触发条件
- 如果利用有个性化推送的性能。
- 如果没有相干性能,在隐衷协定中却有些(很多小公司的隐衷协定可能都是复制其它公司的)
解决方案
- 肯定要退出敞开举荐的性能,并且在隐衷政策中写明确如何敞开。
<!—->
- 有个性化推送的字眼都删掉。
影响范畴
华为,感觉华为是真的把隐衷协定齐全看了一遍。
3. 登记账号
触发条件
有登录性能的利用
解决方案
肯定要退出登记账号、或删除账号的性能
影响范畴
所有平台,包含苹果。苹果审核还是很好过的,除这个必须要其它都不必管。
4. 个人隐私以及和权限相干的局部
触发条件
利用获取 ANDROID_ID、定位、IMEI、设施 MAC 等等须要波及个人隐私的信息。
解决方案
- 肯定要在用户点击批准隐衷协定 之后 再获取相干信息,或弹出须要 xx 权限的提示框。
- 隐衷协定要阐明为什么须要这些信息,这些信息的用处,在哪里须要获取什么信息,保障不会泄露之类的。
- 申请 xx 权限,用户抉择回绝之后,下次进来之后不要再次申请。
- 如果第三方有隐衷协定,把它的连贯粘贴到本人的隐衷协定里。
能够参考腾讯开放平台的文档,写的还是挺具体的。
第三方库
另外很多第三方库可能会获取一些隐衷信息,这里要保障这些库都是在用户批准隐衷政策之后再获取。
上面提供一下常见第三方库的解决方案:
-
react-native-device-info
这个库会获取 ANDROID_ID 之类的,别在用户批准隐衷协定之前
import
。 -
阿里云推送
也会获取隐衷信息,具体是啥忘了,初始化的办法要放在批准隐衷协定之后调用,能够写一个桥接办法,在 js 端调用。其它第三方 sdk 初始化也能这么做。
代码大略如下所示:
package com.cooker.reactnative; import android.util.Log; import com.alibaba.sdk.android.push.CloudPushService; import com.alibaba.sdk.android.push.CommonCallback; import com.alibaba.sdk.android.push.noonesdk.PushServiceFactory; import com.facebook.react.bridge.Callback; import com.facebook.react.bridge.ReactApplicationContext; import com.facebook.react.bridge.ReactContext; import com.facebook.react.bridge.ReactContextBaseJavaModule; import com.facebook.react.bridge.ReactMethod; public class PushModule extends ReactContextBaseJavaModule { private static ReactContext context; public PushModule(ReactApplicationContext reactContext) {super(reactContext); context = reactContext; } public static ReactContext getContext() {return context;} @Override public String getName() {return "MPush";} /** * 初始化阿里云推送 */ @ReactMethod public void init(){PushServiceFactory.init(getContext().getApplicationContext()); final String TAG = "初始化阿里云推送"; CloudPushService pushService = PushServiceFactory.getCloudPushService(); pushService.register(getContext().getApplicationContext(), new CommonCallback() { @Override public void onSuccess(String response) {Log.d(TAG, "init cloudchannel success"); } @Override public void onFailed(String errorCode, String errorMessage) {Log.d(TAG, "init cloudchannel failed -- errorcode:" + errorCode + "-- errorMessage:" + errorMessage); } }); } }
-
react-native-code-push
这个库应用的时候肯定要把根组件包起来,所以不能在批准用户协定之后再导入进行初始化。通过查看相干材料,发现这个库获取 ANDROID_ID 并只是获取,没有也不影响应用。所以在源码外面正文掉相干代码再打包就行了。
源码地位:
node_modules/react-native-code-push/android/app/src/main/java/com/microsoft/codepush/react/CodePushNativeModule.java
搜寻
mClientUniqueId
,把相干代码都正文掉,就是上面三行:private String mClientUniqueId = null; mClientUniqueId = Settings.Secure.getString(reactContext.getContentResolver(), Settings.Secure.ANDROID_ID); configMap.putString("clientUniqueId", mClientUniqueId);
影响范畴
利用宝,华为。
❤️反对
如果本文对你有帮忙,点赞👍反对下我吧,你的「赞」是我创作的能源。