如何从推送通知中获取文本字符串?

时间:2012-10-05 08:34:44

标签: iphone ios ipad

我有一个Iphone应用程序,我正在接收来自服务器的推送通知。现在我要去一个视图控制器来显示消息。在tableview中加载相同的消息。这不是问题。现在我我收到两种消息,一种是链接,另一种是早先的消息。如果它是我想在saffari打开它的链接,不需要像往常一样去tableview。可以有人帮我实现这个吗?

2 个答案:

答案 0 :(得分:1)

当您点击推送通知时,您会在功能中获得字典 - didReceiveRemoteNotification:

试试这段代码: -

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
    {
        NSLog(@"remote notification: %@",[userInfo description]);

        if (userInfo)
        {
            if ([[userInfo allKeys] containsObject:@"aps"])
            {
                if([[[userInfo objectForKey:@"aps"] allKeys] containsObject:@"alert"])
                {
                    if([[[userInfo objectForKey:@"aps"] allKeys] containsObject:@"alert"])
                    {
                        NSString *urlString = [[userInfo objectForKey:@"aps"] objectForKey:@"alert"];
                        NSURL *url = [NSURL URLWithString:urlString];

                        if(url)     
                        {
                            [[UIApplication sharedApplication]openURL:url];  // open in the safari...
                        }

                        else
                        {
                            //  use the message in table view


                        }

                    }

                }
            }
        }


    }

答案 1 :(得分:0)

推送通知与您的应用程序绑定,因此简而言之,您无法直接从应用程序打开safari获得推送通知。但是,一种解决方法可能是这样的:

  • 用户响应通知(即滑动以在锁定屏幕上打开)
  • 您的应用程序打开,通知中的数据将传递到您的应用程序中 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions方法。然后,您可以查询传入的数据

    NSDictionary *dictionary = [launchOptions objectForKey:@"UIApplicationLaunchOptionsRemoteNotificationKey"];
    
    // If dictionary is not nil, then your app is launched due to a push notification
    if (dictionary != nil) {
    
        NSDictionary *payload = [tmpDic objectForKey:@"aps"]; 
    }
    
  • 获得有效负载后,查看内容,如果是URL,请调用safari URL方案,并传入URL。像这样

[[UIApplication sharedApplication] openURL:[NSURL URLWithString: <URL from payload>]];

这将帮助您实现您想要做的事情,但这可能意味着用户在操作系统将其切换到Safari之前会先简要地看到您的应用。

旁注,你为什么要这样做?您的用户不应该从通知中启动随机网址,我也不认为Apple会这么做太多。他们应该首先在您的应用中看到有关网址的一些信息,然后选择是否要在Safari中打开它?