Apple禁止监听锁屏,上架直接“二进制文件无效”(转载贴)

公司开发一个app,是使用摄像头的。需要知道用户点击锁屏键锁屏事件。刚开始使用的是注册通知,使用如下方法:

static int setScreenStateCb(){

    uint64_t locked;

    __block int token = 0;

    notify_register_dispatch("com.apple.springboard.lockstate",&token,dispatch_get_main_queue(),^(int t){

    });

    notify_get_state(token, &locked);

    NSLog(@"setScreenStateCb locked:%d",(int)locked);

    return (int)locked;

}


在使用是只需 int ret = setScreenStateCb();判断ret是否大于0,

if(ret > 0) {

    //锁屏

}else {

    //其他。。。

}

代码中使用到的com.apple.springboard.lockstate属于达尔文通知,就是后来上架被驳回时才知道的。一般使用达尔文通知来监听锁屏的方法如下面的链接所介绍的一样:

https://www.cnblogs.com/LiuChengLi/p/5591030.html

以前这样写是没有问题的,但是,后来苹果就禁止了这样的实现手法,如果使用了,在上架的时候会直接被驳回,app状态显示“二进制文件无效”,收到的邮件提示内容:“Unsupported operation - Apps are not allowed to listen to device lock notifications.”(此处需要注意的是,苹果的回复邮件一般都有几条的,要全都看完了!我之前就是只看到提示二进制文件无效的邮件,却没有看到后面再发来的提示具体是什么问题导致不能上架的邮件,因此走了不少弯路,切记引以为戒)

当收到itunes说“二进制文件无效”的邮件时,希望确认是否是因为这个达尔文通知造成的,可以对生成的ipa文件使用grep命令,搜索一下两个字符串“com.apple.springboard.lockcomplete”、“com.apple.springboard.lockstate”、“com.apple.springboard.hasBlankedScreen”,若是没找到片,还可以对项目中用到的一些第三方sdk进行同样的搜索。

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>分割线>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

好了,说了那么多,该说说怎么解决这个问题了。

我们需要知道是否锁屏,但是apple却又不允许我们使用达尔文通知。那么我们可以“拐个弯”,从其他的角度入手,获取当前是否是锁屏。直接饿上代码:

//定义如下方法

-(BOOL)didUserPressLockButton{
//获取屏幕亮度
CGFloat oldBrightness = [UIScreen mainScreen].brightness;
//以较小的数量改变屏幕亮度
[UIScreen mainScreen].brightness = oldBrightness + (oldBrightness <= 0.01 ? (0.01) : (-0.01));
CGFloat newBrightness = [UIScreen mainScreen].brightness;
//恢复屏幕亮度
[UIScreen mainScreen].brightness = oldBrightness;
//判断屏幕亮度是否能够被改变
return oldBrightness != newBrightness;
}


//app进入后台和锁屏都会调用此方法
-(void)applicationDidEnterBackground:(NSNotification *)notification {
if ([self didUserPressLockButton]) {
//User pressed lock button
NSLog(@"Lock screen.");
} else {
NSLog(@"Home.");
//user pressed home button
}
}


//说明:当用户离开通过锁定按钮而不是主页按钮时,苹果只允许你从applicationDidEnterBackground更改屏幕亮度。这种方法是当APP进入后台时, 以较小的数量改变屏幕亮度,并检查是否能够更改。如果能够更改便是锁定按钮,不能则是主页按钮。经过检测这种方法是可行的,这里讲的是监听锁屏,这个方法同样也可以监听解锁。

这是我在别的大牛的博客上看到的,我这算是转载吧,附上解决办法的原文出处:https://www.jianshu.com/p/4d6472735e42

展开阅读全文

没有更多推荐了,返回首页