iOS本地推送通知未唤醒设备

时间:2016-03-29 18:22:18

标签: ios push-notification uilocalnotification ibeacon

我正在开发一个位置感知iOS应用,它会在靠近iBeacon时发出本地通知。当设备距离信标大约5米时,我设置了地理围栏来触发。

接收通知正常,但我只会在解锁设备(触摸ID或密码)或使用睡眠唤醒按钮(显示时钟)打开电源时收到通知。

我能做什么,通知会唤醒设备,使显示屏亮起/振动/播放声音,例如iMessage。

2 个答案:

答案 0 :(得分:1)

如果您正在使用iBeacons,那么您实际上并不需要使用地理围栏。您想要做的是通过Core Location进行监控,如下所示:

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获取位置服务。

答案 1 :(得分:0)

确保您的应用注册通知设置,同时请求警报和声音类型。从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];      
}