Я реализую 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];
}];
Может кто-то объяснить и дать мне своего рода обзор или где различные части кода принадлежит и что требуется?
Я вижу, спасибо! Также, если вызов addPushNotificationsOnChannels должен быть выполнен в делегате приложения? – Erik
@Erik этот метод следует вызывать каждый раз, когда вы получаете токен устройства. Потому что только делегат приложения отвечает на это даже напрямую, мы предлагаем сделать это там. –
Я понимаю. Поэтому, когда я хочу отправить push-уведомление конкретному пользователю, я могу отправить его на канал с идентификатором, который эквивалентен идентификатору пользователя, например? Эти каналы представляют собой группы уведомлений? – Erik