我的应用应该通过iBeacon测试显示位置感知广告。没有问题:当应用程序看到'时,应用程序会在后台唤醒。某些信标并安排及时发送的本地通知。
问题在于,发送到锁定屏幕的本地通知不会点亮屏幕甚至播放任何声音或振动 - 这对营销团队来说是一场灾难。
当通知传送到前台时正常播放,但在传送到锁定屏幕时丢失。
以下是我为UNUserNotificationCenter安排本地通知的代码:
- (void)scheduleLocalNotificationImageWithTitle:(NSString*)title andBody:(NSString*)body andImagePath:(NSString*)imagePath{
UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
UNNotificationAction *deleteAction = [UNNotificationAction actionWithIdentifier:@"Close"
title:@"Close" options:UNNotificationActionOptionDestructive];
UNNotificationCategory *category = [UNNotificationCategory categoryWithIdentifier:@"NOT_CategoryImage"
actions:@[deleteAction] intentIdentifiers:@[]
options:UNNotificationCategoryOptionNone];
NSSet *categories = [NSSet setWithObject:category];
[center setNotificationCategories:categories];
UNNotificationAttachment *imageAttachment = [UNNotificationAttachment attachmentWithIdentifier:@"SaleNOTIF_Image" URL:[NSURL fileURLWithPath:imagePath] options:nil error:nil];
UNMutableNotificationContent *content = [UNMutableNotificationContent new];
content.title = title;
content.body = body;
content.sound = [UNNotificationSound defaultSound];
content.attachments = @[imageAttachment];
UNTimeIntervalNotificationTrigger *trigger = [UNTimeIntervalNotificationTrigger triggerWithTimeInterval:0.1 repeats:NO];
NSString *identifier = @"NotificationImage";
UNNotificationRequest *request = [UNNotificationRequest requestWithIdentifier:identifier content:content trigger:trigger];
[center addNotificationRequest:request withCompletionHandler:^(NSError * _Nullable error) {
if (error != nil) {
NSLog(@"Something went wrong: %@",error);
}
}];
}
在didFinishLaunching中的UNUserNotificationCenter代码:
UNUserNotificationCenter* center = [UNUserNotificationCenter currentNotificationCenter];
center.delegate = self;
[center requestAuthorizationWithOptions:(UNAuthorizationOptionSound | UNAuthorizationOptionAlert | UNAuthorizationOptionBadge) completionHandler:^(BOOL granted, NSError * _Nullable error){
if( !error ){
}
}];
[[UIApplication sharedApplication] registerForRemoteNotifications];
UNNotificationCategory* generalCategory = [UNNotificationCategory
categoryWithIdentifier:@"GENERAL"
actions:@[]
intentIdentifiers:@[]
options:UNNotificationCategoryOptionAllowInCarPlay];
// Register the notification categories.
[center setNotificationCategories:[NSSet setWithObjects:generalCategory, nil]];
我也有中心willPresentNotification方法,但据我所知它只对前景有用。
-(void)userNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(UNNotificationPresentationOptions options))completionHandler{
CLS_LOG(@"Userinfo %@", notification.request.content.body);
completionHandler(UNNotificationPresentationOptionSound + UNNotificationPresentationOptionAlert);
}
任何想法我都缺少什么?
答案 0 :(得分:1)
好的,我终于找到了在Apple公开讨论中使用this主题的内容。
故事本身很有趣:我在办公室里制作了我的项目,应用程序保持沉默。然后我回到家里继续使用我的MacBook Pro - 瞧! - 一切正常。我锁定了我的屏幕,通知弹出并按原样响起。前几天我用我的MacBook跑到我的办公室并构建了相同的代码,但没有任何改变:我的应用程序就像两天前一样保持沉默。我挖出了包括代理和GPS在内的一切,但没有发现,因为......
事实证明代码没问题,问题本身就在系统的某个地方。因此解决方案的关键只是为了防止您(以及您的用户)Apple Watch重复您的应用通知(仅限Watch应用)。因为如果重复它会使iPhone保持沉默。
这可能是为了防止通知用声音和振动来解决所有事情,并且只让你知道使用最近的设备发生了令人兴奋的事情(现在,如果你的手腕上有手表,那么手表就会比任何东西更接近)。这就是为什么当我在家时一切都运转的原因:我根本不戴手表,所以它不必重复通知,所以不能阻止它们。
我希望在使用iOS 11上的通知时,这可能会让其他人花费大量时间。请记住,总是可以看到。