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发送静默推送通知,以便在应用程序被杀死时唤醒它

当我收到静默推送通知时,iOS 会唤醒我的应用程序吗?(当应用程序未处于运行状态时)

如何清除 iOS 的远程推送通知?

设备上未收到 iOS 推送通知

远程推送通知不会唤醒我的手机

推送通知未在 iOS 10 设备中显示