2016-05-20 3 views
1

Ich implementiere Push-Benachrichtigungen in meiner App mit dem PubNub SDK für iOS. Mein Build-Ziel ist 9.0.Ich kann keine Push-Benachrichtigungen mit PubNub SDK senden

Ich folge dem Tutorial here, aber ich kann es nicht zur Arbeit und ich fühle, dass ich brauche mehr Informationen, um das Konzept zu verstehen. Werfen Sie einen Blick auf das, was ich getan habe, so weit:

AppDelegate.m

@interface AppDelegate() 

@property (nonatomic) PubNub *client; 

@end 

in der didFinishLaunchingWithOptions Funktion, betreibe ich diesen Code einrichten Push-Benachrichtigungen:

/* 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); 
} 

Das Tutorial postet Code wie folgt, soll das in den Delegaten oder anderen ViewControllern gehen ?:

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]; 
             } 
            }]; 
} 
} 

-Code Ich verwende eine Benachrichtigung zu senden:

  /* 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]; 
       }]; 

Könnte jemand erklären, und geben Sie mir eine Art, einen Überblick oder wo die verschiedenen Teile des Codes gehört und was ist erforderlich?

Antwort

0

Guten Tag Erik,

Der gesamte Code ist außer Wörterbuch gültig geben mobilePushPayload Parameter. Bestandenes Wörterbuch sollte im Falle von Apple Push Notifications konform zu specification dafür sein. Es gibt keine Nachricht Schlüssel in APNS Nutzlast, sollte mindestens Warnung und String-Wert dafür sein.

Also, wenn Sie veröffentlichen möchten, sollten Sie so etwas wie dies versuchen:

[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]; 
 
}];

Mit freundlichen Grüßen,
Sergey

+0

ich sehe, danke! Sollte der Aufruf von addPushNotificationsOnChannels auch innerhalb des App-Delegaten erfolgen? – Erik

+0

@Erik sollte diese Methode jedes Mal aufgerufen werden, wenn Sie Gerät Push-Token erhalten. Da nur Applikationsdelegierte darauf direkt antworten, empfehlen wir, dies dort zu tun. –

+0

Ich verstehe. Also, wenn ich eine Push-Benachrichtigung an einen bestimmten Benutzer senden möchte, könnte ich es an einen Kanal mit einer ID senden, die zum Beispiel der ID des Benutzers entspricht? Diese Kanäle sind eine Art Benachrichtigungsgruppen? – Erik

Verwandte Themen