0

有没有办法从应用程序发送本地通知到应用程序?iOS和本地通知

我需要每天早上通知我的应用程序用户。那么,我可以向应用程序添加一些代码,因此在用户启动后,每天早上他或她将获得徽章/通知?

第一步

注册本地通知在应用程序委托:

-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 

    // Register the app for local notifcations. 

    if ([application respondsToSelector:@selector(registerUserNotificationSettings:)]) { 
     [application registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert | UIUserNotificationTypeBadge | UIUserNotificationTypeSound categories:nil]]; 
    } 

    // Setup the local notification check. 
    UILocalNotification *notification = [launchOptions objectForKey:UIApplicationLaunchOptionsLocalNotificationKey]; 

    // Check if a notifcation has been received. 

    if (notification) { 

     dispatch_async(dispatch_get_main_queue(), ^{ 

      // Run the notifcation. 
      // Call your own custom method from here. 
      // Use [notification.userInfo valueForKey:@"notification_id"] to get the associated notification id (You will need to assign an ID, when creating the notification). 
     }); 
    } 

    // Ensure the notifcation badge number is hidden. 
    application.applicationIconBadgeNumber = 0; 

    return YES; 
} 

第二步

+3

第一款谷歌命中“的iOS本地通知”是[纵深本地和远程通知( https://developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/Chapters/WhatAreRemoteNotif.html) –

回答

2

您可以通过以下步骤添加本地通知到您的iOS应用

使用以下方法创建te本地通知:

-(void)saveNotification:(NSString *)description :(NSString *)notificationID :(BOOL)locationCheck { 

    // Create the notification info dictionary 
    // and set the notification ID string. 
    NSMutableDictionary *userInfo = [[NSMutableDictionary alloc] init]; 
    [userInfo setObject:notificationID forKey:@"notification_id"]; 

    // Setup the local notification. 
    UILocalNotification *localNotification = [[UILocalNotification alloc] init]; 

    // Set the notification ID and type data. 
    localNotification.userInfo = userInfo; 

    // Set the notification description. 
    localNotification.alertBody = [NSString stringWithFormat:@"%@", description]; 

    // Set the sound alert MP3 file. 
    localNotification.soundName = [NSString stringWithFormat:@"Notification_sound_file.mp3"]; 

    // Set the date for the notification or set the 
    // location depending on the notification type. 

    if (locationCheck == NO) { 

     // Fire date of your choice. 
     NSDate *yourFireDate; 

     // Set the reminder date. 
     double interval = [yourFireDate timeIntervalSinceNow]; 
     localNotification.fireDate = [[NSDate date] dateByAddingTimeInterval:interval]; 
     localNotification.timeZone = [NSTimeZone systemTimeZone]; 

     // Set the notifcation repeat interval. 
     localNotification.repeatInterval = 0; // No repeat. 
     //localNotification.repeatInterval = NSCalendarUnitHour; // Every hour. 
     //localNotification.repeatInterval = NSCalendarUnitDay; // Every day. 
     //localNotification.repeatInterval = NSCalendarUnitWeekOfYear; // Once a week. 
     //localNotification.repeatInterval = NSCalendarUnitMonth; // Once a month. 
     //localNotification.repeatInterval = NSCalendarUnitYear; // Once a year. 
    } 

    else if (locationCheck == YES) { 

     // Set the locaton to the selected address co-ordinates. 
     CLLocationCoordinate2D coordinates = CLLocationCoordinate2DMake(latitude, longitude); 
     CLCircularRegion *region = [[CLCircularRegion alloc] initWithCenter:coordinates radius:100 identifier:[NSString stringWithFormat:@"region_%@", notificationID]]; 

     // Set the notification to be presented 
     // when the user arrives at the location. 
     [region setNotifyOnEntry:YES]; 
     [region setNotifyOnExit:NO]; 

     // Set the notification location data. 
     [localNotification setRegion:region]; 
     [localNotification setRegionTriggersOnce:NO]; 
    } 

    // Save the local notification. 
    [[UIApplication sharedApplication] scheduleLocalNotification:localNotification]; 
} 

您需要创建自己的唯一ID,才能使用此方法。该ID很重要,因为它可以帮助您区分通知(您是否需要根据通知执行特定操作)。

可以调用像这样上面的方法:

[self saveNotification:@"test notification hello world" :@"unique id" :NO]; 

不要忘记你的descried共同ordianted(如果你需要基于位置的本地通知),以取代latitudelongitude

第三步

如果应用程序是当前打开的(在前台或通过多任务处理),您将需要实现另一种方法在应用程序委托,以处理通知:

-(void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification { 

    // Check if a notifcation has been received. 

    if (application.applicationState == UIApplicationStateInactive) { 

     // You app in running in the background but will be active, 
     // should the user tap the iOS notification banner. 

     // Call your own custom method from here. 
     // Use [notification.userInfo valueForKey:@"notification_id"] to get the associated notification id (You will need to assign an ID, when creating the notification). 
    } 

    else if (application.applicationState == UIApplicationStateActive) { 

     // The app is open in the foreground 
     // you will need to display an alert or banner 
     // in your app to alert the user. 

     // Call your own custom method from here. 
     // Use [notification.userInfo valueForKey:@"notification_id"] to get the associated notification id (You will need to assign an ID, when creating the notification). 
    } 

    // Ensure the notifcation badge number is hidden. 
    application.applicationIconBadgeNumber = 0; 
} 

其他一些点要牢记

您可以使用以下方法来删除所有本地通知(或特定的一个):

-(void)deleteAllNotifications { 

    // Delete all the local notifications. 
    [[UIApplication sharedApplication] setApplicationIconBadgeNumber:0]; 
    [[UIApplication sharedApplication] cancelAllLocalNotifications]; 
} 

-(void)deleteSpecificNotification:(NSString *)inputID { 

    // Get the notification(s) data. 
    NSArray *notificationData = [[UIApplication sharedApplication] scheduledLocalNotifications]; 

    // Loop through all the local notifcations and delete 
    // all the notifications that match the input id string. 

    for (int loop = 0; loop < [notificationData count]; loop++) { 

     // Get the notification object. 
     UILocalNotification *localNotification = [notificationData objectAtIndex:loop]; 

     // If the notification id matches the input id then delete it. 

     if ([[localNotification.userInfo objectForKey:@"notification_id"] isEqualToString:inputID]) { 
      [[UIApplication sharedApplication] cancelLocalNotification: localNotification]; 
     } 
    } 
}