【求救】因cocos引擎监听传感器,获取设备传感器,导致隐私政策拒审

最近上架应用宝和其他App商店,因为cocos 引擎监听传感器,获取设备传感器,导致隐私政策拘审。

版本2.4.10,2.4.9, 2.4.5 版本我都已经提交审核,都是不行。

引擎的调用堆栈:
第一个地方:

android.hardware.SensorManager.getSensorList(int)
android.hardware.SensorManager.getDefaultSensor(SensorManager.java:490)
android.view.OrientationEventListener.<init>(OrientationEventListener.java:71)
android.view.OrientationEventListener.<init>(OrientationEventListener.java:56)
org.cocos2dx.lib.Cocos2dxOrientationHelper.<init>(Unknown Source:0)
org.cocos2dx.lib.Cocos2dxActivity.init(Unknown Source:112)
org.cocos2dx.lib.Cocos2dxActivity.onCreate(Unknown Source:83)
org.cocos2dx.javascript.AppActivity.onCreate(Unknown Source:7)
android.app.Activity.performCreate(Activity.java:7144)
android.app.Activity.performCreate(Activity.java:7135)
android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1271)
android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
java.lang.reflect.Method.invoke(Native Method)

第二个地方

android.hardware.SensorManager.registerListener(SensorManager.java:889)<—android.hardware.SensorManager.registerListener(SensorManager.java:764)<—android.view.OrientationEventListener.enable(OrientationEventListener.java:93)<—org.cocos2dx.lib.Cocos2dxOrientationHelper.onResume(Unknown Source:0)<—org.cocos2dx.lib.Cocos2dxActivity.onResume(Unknown Source:28)<—org.cocos2dx.javascript.AppActivity.onResume(Unknown Source:0)<—android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1355)<—android.app.Activity.performResume(Activity.java:7178)<—android.app.ActivityThread.performResumeActivity(ActivityThread.java:3891)<—android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3956)<—android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3197)<—android.app.ActivityThread.-wrap11(Unknown Source:0)<—android.app.ActivityThread$H.handleMessage(ActivityThread.java:1921)<—android.os.Handler.dispatchMessage(Handler.java:106)<—android.os.Looper.loop(Looper.java:164)<—android.app.ActivityThread.main(ActivityThread.java:6843)<—java.lang.reflect.Method.invoke(Native Method)<—com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)<—com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)

社区里应该有不少同学遇到这个问题了,希望高手指点迷津。

社区里原来也有人遇到类似问题,应该是没有解决:地址是:https://forum.cocos.org/t/topic/139681。

通过查找,在引擎代码有调用初始化传感器的地方,进行修改后提交还是不行。

// Cocos2dxAccelerometer.java
// ===========================================================
// Constructors
// ===========================================================

public Cocos2dxAccelerometer(final Context context) {
    mContext = context;

    mSensorManager = (SensorManager) mContext.getSystemService(Context.SENSOR_SERVICE);
    mAcceleration = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
    mAccelerationIncludingGravity = mSensorManager.getDefaultSensor(Sensor.TYPE_LINEAR_ACCELERATION);
    mGyroscope = mSensorManager.getDefaultSensor(Sensor.TYPE_GYROSCOPE);
}

// Cocos2dxHelper.java 改动

Cocos2dxHelper.sCocos2dxAccelerometer = new Cocos2dxAccelerometer(activity);
// 改成
if(sAccelerometerEnabled) {
    Cocos2dxHelper.sCocos2dxAccelerometer = new Cocos2dxAccelerometer(activity);
}

public static void enableAccelerometer() {
    Cocos2dxHelper.sAccelerometerEnabled = true;
    Cocos2dxHelper.sCocos2dxAccelerometer.enable();
}

// 改成:
public static void enableAccelerometer() {
    Cocos2dxHelper.sAccelerometerEnabled = false;
    Cocos2dxHelper.sCocos2dxAccelerometer.disable();
}

Cocos2dxOrientationHelper.java 直接继承了 Android 原生 OrientationEventListener

  /**
     * Creates a new OrientationEventListener.
     * 
     * @param context for the OrientationEventListener.
     * @param rate at which sensor events are processed (see also
     * {@link android.hardware.SensorManager SensorManager}). Use the default
     * value of {@link android.hardware.SensorManager#SENSOR_DELAY_NORMAL 
     * SENSOR_DELAY_NORMAL} for simple screen orientation change detection.
     */
    public OrientationEventListener(Context context, int rate) {
        mSensorManager = (SensorManager)context.getSystemService(Context.SENSOR_SERVICE);
        mRate = rate;
        mSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
        if (mSensor != null) {
            // Create listener only if sensors do exist
            mSensorEventListener = new SensorEventListenerImpl();
        }
    }

原生新建Activity,在里面原生展示一个隐私弹窗,同意后再跳转游戏activity

我的小米安卓也是遇到这样的问题,一直卡在隐私协议这一块,我把引擎里面的传感器代码都屏蔽了,还是会过不了审。


我在游戏逻辑里都没有运行任何代码,就弹处隐私协议框,同意才开始加载游戏包,过审也是过不了。

拒审不是拘审,楼主是想搞大新闻吗?

哈哈,改了

我修改的通过了
找到 Cocos2dxAccelerometer.java
因为Cocos2dxAccelerometer.java 构造函数直接获取了传感器管理器,这样是不行的,看反馈的堆栈信息也指向这里

public Cocos2dxAccelerometer(final Context pContext) {
    		this.mContext = pContext;
                    //注释掉下面两行
    		// this.mSensorManager = (SensorManager) this.mContext.getSystemService(Context.SENSOR_SERVICE);
    		// this.mAccelerometer = this.mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
    		final Display display = ((WindowManager) this.mContext.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
    		this.mNaturalOrientation = display.getOrientation();
}

public void enable() {
		 //使用到才去获取,当然最好不要在启动游戏就调用 enable
		if(this.mSensorManager == null){
			Log.i("SensorManager init","Cocos2dxAccelerometer enable =====>>> 11");
			this.mSensorManager = (SensorManager) this.mContext.getSystemService(Context.SENSOR_SERVICE);
		}
		if(this.mAccelerometer == null){
			Log.i("Accelerometer init","Cocos2dxAccelerometer enable =====>>> 22");
			this.mAccelerometer = this.mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
		}
		this.mSensorManager.registerListener(this, this.mAccelerometer, SensorManager.SENSOR_DELAY_GAME);
	}

请问您是哪个版本? 按照你这种改法,编译不通过呢

我这边可能有点古老2.2的,后面有需求都是需要什么修改什么,然后没有升级。

AppActivity intent FLAG_ACTIVITY_BROUGHT_TO_FRONT 通过activity中转达不到效果,还是得回到修改引擎的代码上,希望官方同学能出修复版本。activity中转达不到效果也可能是我版本问题。


这么改有效果了,违规的条数少了1条,但是还没有没有解决问题

两处的堆栈信息:

android.hardware.SensorManager.getSensorList(SensorManager.java:436)<---android.hardware.SensorManager.getDefaultSensor(SensorManager.java:528)<---android.view.OrientationEventListener.<init>(OrientationEventListener.java:71)<---android.view.OrientationEventListener.<init>(OrientationEventListener.java:56)<---org.cocos2dx.lib.Cocos2dxOrientationHelper.<init>(Unknown Source:0)<---org.cocos2dx.lib.Cocos2dxActivity.init(Unknown Source:112)<---org.cocos2dx.lib.Cocos2dxActivity.onCreate(Unknown Source:83)<---org.cocos2dx.javascript.AppActivity.onCreate(Unknown Source:7)<---android.app.Activity.performCreate(Activity.java:7070)<---android.app.Activity.performCreate(Activity.java:7061)<---android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1214)<---android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3067)<---android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3191)<---android.app.ActivityThread.-wrap11(Unknown Source:0)<---android.app.ActivityThread$H.handleMessage(ActivityThread.java:1921)<---android.os.Handler.dispatchMessage(Handler.java:106)<---android.os.Looper.loop(Looper.java:164)<---android.app.ActivityThread.main(ActivityThread.java:6843)<---java.lang.reflect.Method.invoke(Native Method)<---com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)<---com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)


android.hardware.SensorManager.getSensorList(int)
android.hardware.SensorManager.getDefaultSensor(SensorManager.java:490)
android.view.OrientationEventListener.<init>(OrientationEventListener.java:71)
android.view.OrientationEventListener.<init>(OrientationEventListener.java:56)
org.cocos2dx.lib.Cocos2dxOrientationHelper.<init>(Unknown Source:0)
org.cocos2dx.lib.Cocos2dxActivity.init(Unknown Source:112)
org.cocos2dx.lib.Cocos2dxActivity.onCreate(Unknown Source:83)
org.cocos2dx.javascript.AppActivity.onCreate(Unknown Source:7)
android.app.Activity.performCreate(Activity.java:7144)
android.app.Activity.performCreate(Activity.java:7135)
android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1271)
android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
java.lang.reflect.Method.invoke(Native Method)

这两处都和这个函数有关系,org.cocos2dx.lib.Cocos2dxOrientationHelper.(Unknown Source:0)

继续修改提交 :pray:

org.cocos2dx.lib.Cocos2dxActivity.java
Cocos2dxAccelerometer.java

两个文件对应修改,就可以,送审传感器的问题已经不报了。

虽然解决问题了,还是希望官方能给出更好的解决方法。

1赞

/Applications/CocosCreator/Creator/2.4.5/CocosCreator.app/Contents/Resources/cocos2d-x/cocos/platform/android/java/src/org/cocos2dx/lib

Cocos2dxAccelerometer.java
Cocos2dxActivity.java
修改见附件
fix_code.zip (8.7 KB)

5赞

直接在隐私政策把传感器加上就行了,不用改代码