0

Я создаю приложение, которое позволяет своим пользователям отправлять друг другу сообщения. Когда новое сообщение получено, оно отображается в представлении таблицы текущего пользователя. Я хочу, чтобы мое приложение отправляло текущему пользователю уведомление, когда приходит новое сообщение. Кто-нибудь знает, как я могу это сделать?iOS - Локальное уведомление о запуске при получении сообщения

У меня есть уведомления, установленные в моем AppDelegate уже:

appdelegate.m

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

    // Let the device know we want to receive push notifications 
    [[UIApplication sharedApplication] registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeSound | UIUserNotificationTypeAlert | UIUserNotificationTypeBadge) categories:nil]]; 
    [[UIApplication sharedApplication] registerForRemoteNotifications]; 
} 

и я знаю, что приведенный ниже код позволит мне стрелять уведомления в заданное время (например, набор сборщиком):

// Get the current date 
    NSDate *pickerDate = [self.datePicker date]; 

    // Schedule the notification 
    UILocalNotification* localNotification = [[UILocalNotification alloc] init]; 
    localNotification.fireDate = pickerDate; 
    localNotification.alertBody = self.itemText.text; 
    localNotification.alertAction = @"You are being notified!"; 
    localNotification.timeZone = [NSTimeZone defaultTimeZone]; 
    localNotification.applicationIconBadgeNumber = [[UIApplication sharedApplication] applicationIconBadgeNumber] + 1; 

    [[UIApplication sharedApplication] scheduleLocalNotification:localNotification]; 

    // Request to reload table view data 
    [[NSNotificationCenter defaultCenter] postNotificationName:@"reloadData" object:self]; 

    // Dismiss the view controller 
    [self dismissViewControllerAnimated:YES completion:nil]; 

Как сделать уведомление, однако, когда новое сообщение отправлено на сервер (и ap груши в таблице) для зарегистрированного пользователя?

+0

При появлении нового сообщения необходимо отправить push-уведомление в свое приложение. Вы можете либо показать push-уведомление напрямую, либо отправить «молчаливое» уведомление и использовать его для создания локального уведомления. – Paulw11

+0

Привет @ Paulw11 - Я успешно настроил Push-уведомления (используя этот учебник: https: //www.raywenderlich .com/123862/push-notifications-tutorial) - Я просто не уверен, как заставить его запускать только при отправке нового сообщения? Прямо сейчас я запускаю их вручную из своего терминала. –

+0

Обычно вы обрабатываете это со своей серверной части, хотя у вас может быть ваш экземпляр отправляющего приложения, но это намного менее предпочтительно. – Paulw11

ответ

0
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
     UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeBadge|UIUserNotificationTypeSound|UIUserNotificationTypeAlert) categories:nil]; 
    [[UIApplication sharedApplication] registerUserNotificationSettings:settings];} 

Если ваша система iOS8, вам необходимо зарегистрировать разрешение.

UILocalNotification * notification = [[UILocalNotification alloc] init]; 
    NSDate * pushDate = [NSDate dateWithTimeIntervalSinceNow:Time]; 
    if (notification!=nil) { 


     notification.fireDate= pushDate; 

     notification.timeZone = [NSTimeZone defaultTimeZone]; 

     notification.repeatInterval = kCFCalendarUnitDay; 

     notification.soundName = UILocalNotificationDefaultSoundName; 

     notification.alertBody = @"Time O.K!"; 
     NSLog(@"Ready"); 

     notification.applicationIconBadgeNumber = 1; 
     //notification.applicationIconBadgeNumber = [[[UIApplication sharedApplication] scheduledLocalNotifications] count]+1; 

     NSDictionary * inforDic = [NSDictionary dictionaryWithObject:@"name" forKey:@"key"]; 
     notification.userInfo =inforDic; 

     [[UIApplication sharedApplication] scheduleLocalNotification:notification]; 
    } 

Возможно, этот код можно использовать на моем устройстве.

+0

Я в замешательстве - не делает ли это то же самое, что и вышеупомянутый код (только уведомлять, предоставляется ли определенное время)? –

+0

Вы можете использовать таймер для запуска локального уведомления в определенное время. –

Смежные вопросы