在iPhone中使用Urban Airship的Apple推送通知服务

时间:2010-08-11 10:04:08

标签: iphone apple-push-notifications urbanairship.com

我使用Urban Airship实施了Apple推送通知服务,并在我的申请中成功收到通知。如果我收到通知警报视图,如果我单击警报视图中的视图按钮,它将启动应用程序。通常它发生在APNS中。但我的客户想要,如果在RSS提要和警报视图中发生任何更新,如果我们在警报视图中单击视图,它应该转到应用程序中的特定提要,不启动应用程序。所以可以这样做吗?是否有可能为我的应用程序中的特定警报视图按钮编写事件。

我的示例代码是

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

       [[UIApplication sharedApplication] registerForRemoteNotificationTypes:   UIRemoteNotificationTypeBadge                                                           | UIRemoteNotificationTypeSound                                                                          | UIRemoteNotificationTypeAlert];

        [window addSubview:viewcontrollers.view];

        [window makeKeyAndVisible];

        NSLog(@"remote notification2: %@",[launchOptions description]);

      return YES;

     }

在这个方法中,didFinishLaunchingWithOptions,我无法得到字典值,它总是得到Null值。是否有可能在此方法中获取字典值(Notification来)。

     - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo{

            NSString *message = [userInfo descriptionWithLocale:nil indent: 1];

            NSLog(@"The message string is %@",message);

            UIAlertView *alert = [[UIAlertView alloc] initWithTitle: @"Remote Notification" message: message delegate: nil cancelButtonTitle: @"ok" otherButtonTitles: nil];
            [alert show];
            [alert release];
      }

在这个方法中,我可以得到字典值。但是,如果在应用程序中运行时发生任何更新,则此方法仅调用。

请指导我!

由于

2 个答案:

答案 0 :(得分:4)

确实可以这样做。在application:didReceiveRemoteNotification方法中,您将通过NSDictionary传递所有推送通知的数据。您要做的是将有效载荷中的一些ID或URL发送到Urban Airship。类似的东西:

{
    "aps": {
        "alert": "New RSS entry"
    },
    "entry_id": "XYZ123"
}

然后您可以编写代码来获取应用程序中的正确供稿条目。

答案 1 :(得分:1)

当应用程序未运行或已被系统终止且应用程序通过通知启动时:

在这种情况下,您必须获取通知字典(它本身是launchOptions的值):

http://developer.apple.com/iphone/library/documentation/UIKit/Reference/UIApplicationDelegate_Protocol/Reference/Reference.html#//apple_ref/doc/uid/TP40006786-CH3-SW18

我想代码会是这样的:

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

     NSDictionary *remoteNotification = (NSDictionary *) [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
     if (remoteNotification != nil) {
           NSString *message = [remoteNotification descriptionWithLocale:nil indent: 1];
     }    
}