iOS 本地推送通知未唤醒设备
Posted
技术标签:
【中文标题】iOS 本地推送通知未唤醒设备【英文标题】:iOS Local Push notification not waking up device 【发布时间】:2016-03-29 18:22:17 【问题描述】:我正在开发一个位置感知 ios 应用程序,当靠近 iBeacon 时会发送本地通知。我已将地理围栏设置为在设备距离信标大约 5 米时触发。
接收通知工作正常,但我只会在解锁设备(触摸 ID 或密码)或使用睡眠唤醒按钮(显示时钟)打开设备时收到通知。
我能做些什么来让通知唤醒设备,使显示屏亮起/振动/播放声音,例如 iMessage 所做的。
【问题讨论】:
【参考方案1】:如果您使用 iBeacons,则实际上不需要使用地理围栏。您想要做的是通过核心位置使用监控,如下所示:
CLBeaconRegion *beaconRegion = [[CLBeaconRegion alloc] initWithProximityUUID:uuid identifier:uuid.UUIDString];
[self.locationManager startMonitoringForRegion:beaconRegion];
beaconRegion.notifyEntryStateOnDisplay = YES;
beaconRegion.notifyOnEntry = YES;
beaconRegion.notifyOnExit = YES;
一旦您监控信标区域,当您通过这些核心定位方法遇到该信号时,该应用将自动进入和退出:
- (void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region;
- (void)locationManager:(CLLocationManager *)manager didExitRegion:(CLRegion *)region;
在这些方法中是您要显示本地通知的地方。
请注意,对于 iOS 7.0 及更高版本,您需要在 info.plist 中输入 NSLocationAlwaysUsageDescription 才能使定位服务与 iBeacons 一起使用。
【讨论】:
【参考方案2】:确保您的应用注册通知设置,同时请求警报和声音类型。从 iOS 8 开始,除非用户授予此权限请求,否则您的通知将不会播放声音或唤醒手机。
请参阅here 了解更多信息。
if ([[UIApplication sharedApplication]
respondsToSelector:@selector(registerUserNotificationSettings:)])
UIUserNotificationType types = (UIUserNotificationType) (UIUserNotificationTypeBadge |
UIUserNotificationTypeSound | UIUserNotificationTypeAlert);
UIUserNotificationSettings *mySettings = [UIUserNotificationSettings settingsForTypes:types categories:nil];
[[UIApplication sharedApplication] registerUserNotificationSettings:mySettings];
【讨论】:
以上是关于iOS 本地推送通知未唤醒设备的主要内容,如果未能解决你的问题,请参考以下文章
使用firebase发送静默推送通知,以便在应用程序被杀死时唤醒它