过去几天我一直在为我的应用上的本地通知而苦苦挣扎。
基本上,目标是在用户处理地址时弹出通知。
这是代码:
NSMutableArray *notifications = [@[] mutableCopy];
for (CCAddress *address in results) {
CCCategory *category = [address.categories.allObjects firstObject];
NSDictionary *userInfo = @{@"addressId" : address.identifier};
UILocalNotification *localNotification = [UILocalNotification new];
if (category == nil)
localNotification.alertBody = [NSString stringWithFormat:@"Vous êtes proche de %@", address.name];
else
localNotification.alertBody = [NSString stringWithFormat:@"Vous êtes proche de %@, %@", address.name, category.name];
localNotification.alertAction = @"Linotte";
localNotification.soundName = UILocalNotificationDefaultSoundName;
localNotification.userInfo = userInfo;
[notifications addObject:localNotification];
address.lastnotif = [NSDate date];
}
[managedObjectContext saveToPersistentStore:NULL];
[UIApplication sharedApplication].scheduledLocalNotifications = notifications;
结果实际上是完全随机的,但有一些我肯定知道:地理围栏效果很好,你可以看到我在lastNotif中设置了通知的日期,所以我知道它们被解雇的时间。
有时候我会看到通知弹出,但不会留在通知中心,但大部分时间没有任何反应,即使我看到它实际被解雇的日期,有时候一切都很顺利。
我尝试过很多东西,比如使用presentLocalNotificationNow,设置fireDate,每个之间有1秒的延迟,以及其他我甚至不记得的东西......
所以,显然我在文档中遗漏了一些东西,但是什么?
感谢。
PS:应用程序处于后台或关闭时,我知道didReceiveLocalNotification。
PS2:我实际上不知道那些我根本没看到的人是否真的被解雇了,因为他们没有出现在通知中心,所以也许他们被解雇但我绝对没办法看到他们当他们这样做的时候,我看不到手机的屏幕。 编辑:所以,我一直在家里做一些测试,电话关闭,屏幕锁定。真正的综合症是,当一个通知弹出时,它只会打开屏幕,手机振动(我声音关闭),然后没有...答案 0 :(得分:0)
我没有看到您正在设置fireDate。我不记得那个默认值是什么。
答案 1 :(得分:0)
好的,按照预期,它有点愚蠢。
在我发布的代码之前,我有:
if ([results count] == 0) {
[UIApplication sharedApplication].applicationIconBadgeNumber = 0;
return;
}
但是,当您将applicationIconBadgeNumber设置为0时,它会从通知中心删除所有通知!
文档中没有说明这一点(https://developer.apple.com/library/ios/documentation/uikit/reference/UIApplication_Class/Reference/Reference.html)。
答案 2 :(得分:0)
您需要在registerUserNotificationSettings
中添加didFinishLaunchingWithOptions
,它会向我们发送通知提醒
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
if ([UIApplication instancesRespondToSelector:@selector(registerUserNotificationSettings:)]){
[application registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert|UIUserNotificationTypeBadge|UIUserNotificationTypeSound categories:nil]];
}
UILocalNotification *localNotification = [launchOptions objectForKey:UIApplicationLaunchOptionsLocalNotificationKey];
if (localNotification) {
application.applicationIconBadgeNumber = 0;
}
return YES;
}