0

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

4

2 回答 2

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


                        }

                    }

                }
            }
        }


    }
于 2012-10-05T09:12:34.697 回答
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,我认为 Apple 不会太喜欢这样。也许他们应该首先在您的应用程序中看到有关 URL 的一些信息,然后选择是否要在 safari 中打开它?

于 2012-10-05T09:11:38.497 回答