2016-05-20 2 views
1

Я реализую push-уведомления в своем приложении с помощью PubNub SDK для iOS. Моя цель построения - 9.0.Не удается отправить push-уведомления с PubNub SDK

Я следую учебнику here, но я не могу заставить его работать, и я чувствую, что мне нужна дополнительная информация для понимания концепции. Взгляните на то, что я сделал до сих пор:

AppDelegate.m

@interface AppDelegate() 

@property (nonatomic) PubNub *client; 

@end 

в функции didFinishLaunchingWithOptions, я запускаю этот код, чтобы настроить уведомления толчка:

/* push notifications */ 
UIUserNotificationType types = UIUserNotificationTypeBadge | 
UIUserNotificationTypeSound | UIUserNotificationTypeAlert; 

UIUserNotificationSettings *mySettings = 
[UIUserNotificationSettings settingsForTypes:types categories:nil]; 

[[UIApplication sharedApplication] registerUserNotificationSettings:mySettings]; 
[[UIApplication sharedApplication] registerForRemoteNotifications]; 

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { 
    NSLog(@"deviceToken: %@", deviceToken); 
    [[NSUserDefaults standardUserDefaults] setObject:deviceToken forKey:@"DeviceToken"]; 
} 

- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error { 
    NSLog(@"%s with error: %@", __PRETTY_FUNCTION__, error); 
} 

Код учебного сообщения, подобный этому, должен идти в делегат или другие ViewControllers ?:

PNConfiguration *configuration = [PNConfiguration configurationWithPublishKey:@"demo" 
                   subscribeKey:@"demo"]; 
self.client = [PubNub clientWithConfiguration:configuration]; 
[self.client addPushNotificationsOnChannels:@[@"wwdc",@"google.io"] 
        withDevicePushToken:self.devicePushToken 
          andCompletion:^(PNAcknowledgmentStatus *status) { 

// Check whether request successfully completed or not. 
if (!status.isError) { 

    // Handle successful push notification enabling on passed channels. 
} 
// Request processing failed. 
else { 

    // Handle modification error. Check 'category' property to find out possible issue because 
    // of which request did fail. 
    // 
    // Request can be resent using: [status retry]; 
} 
}]; 

ViewController.m

@interface MessagingViewController() 

@property (nonatomic) PubNub *client; 
@property (nonatomic, strong) NSData *devicePushToken; 

@end 

-(void)viewDidLoad { 
    NSData *deviceToken = [[NSUserDefaults standardUserDefaults] objectForKey:@"DeviceToken"]; 
if (deviceToken) 
{ 
    self.devicePushToken = deviceToken; 
    PNConfiguration *configuration = [PNConfiguration configurationWithPublishKey:publishKey 
                    subscribeKey:subscribeKey]; 
    self.client = [PubNub clientWithConfiguration:configuration]; 
    [self.client addPushNotificationsOnChannels:@[self.senderId] 
          withDevicePushToken:self.devicePushToken 
            andCompletion:^(PNAcknowledgmentStatus *status) { 

             // Check whether request successfully completed or not. 
             if (!status.isError) { 

              // Handle successful push notification enabling on passed channels. 
             } 
             // Request processing failed. 
             else { 

              // Handle modification error. Check 'category' property to find out possible issue because 
              // of which request did fail. 
              // 
              // Request can be resent using: [status retry]; 
             } 
            }]; 
} 
} 

код я использую для отправки уведомлений:

  /* send push notifications */ 
     [self.client publish:nil toChannel:self.senderId mobilePushPayload: @{@"aps": @{@"message":message}} 
       withCompletion:^(PNPublishStatus *status) { 

        // Check whether request successfully completed or not. 
        // if (status.isError) // Handle modification error. 
        // Check 'category' property to find out possible issue because 
        // of which request did fail. Request can be resent using: [status retry]; 
       }]; 

Может кто-то объяснить и дать мне своего рода обзор или где различные части кода принадлежит и что требуется?

ответ

0

Добрый день Эрик,

Весь код действителен кроме словаря передается mobilePushPayload параметр. Пропущенный словарь должен в случае уведомлений Apple Push соответствовать описанию specification. Нет сообщение ключ в полезной нагрузке APNS, там, по крайней мере, должно быть предупреждение и строковое значение для него.

Так что, если вы хотите опубликовать, вы должны попробовать что-то вроде этого:

[self.client publish:nil toChannel:self.senderId mobilePushPayload: @{@"aps": @{@"alert":message}} 
 
     withCompletion:^(PNPublishStatus *status) { 
 

 
    // Check whether request successfully completed or not. 
 
    // if (status.isError) // Handle modification error. 
 
    // Check 'category' property to find out possible issue because 
 
    // of which request did fail. Request can be resent using: [status retry]; 
 
}];

С наилучшими пожеланиями,
Сергей

+0

Я вижу, спасибо! Также, если вызов addPushNotificationsOnChannels должен быть выполнен в делегате приложения? – Erik

+0

@Erik этот метод следует вызывать каждый раз, когда вы получаете токен устройства. Потому что только делегат приложения отвечает на это даже напрямую, мы предлагаем сделать это там. –

+0

Я понимаю. Поэтому, когда я хочу отправить push-уведомление конкретному пользователю, я могу отправить его на канал с идентификатором, который эквивалентен идентификатору пользователя, например? Эти каналы представляют собой группы уведомлений? – Erik

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