2012-10-05 39 views
0

我有一个Iphone应用程序,我从服务器接收推送通知。现在我要去一个视图控制器来显示消息。在同一消息加载在tableview .so那不是一个问题。现在我是接收两种消息,一种是链接,另一种是早期的消息。如果它是我想要在saffari中打开它的链接,不需要像往常一样去tableview。可以有人帮助我实现这一目标吗?如何从推送通知中获取文本字符串?

回答

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 


         } 

        } 

       } 
      } 
     } 


    } 
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浏览器。

一个侧面说明,你为什么要这样做?你的用户不应该从通知中发布一个随机的URL,我不认为苹果会这么喜欢。也许他们应该首先在你的应用中看到关于URL的一些信息,然后选择他们是否想在Safari中打开它?

相关问题