我有一个 Iphone 应用程序,我在其中接收来自服务器的推送通知。现在我要去视图控制器显示消息。在 tableview 中加载相同的消息。所以这不是问题。现在我收到两个各种消息,一个是链接,另一个是之前的消息。如果它是一个链接,我想在 saffari 中打开它,不需要像往常一样去 tableview。有人可以帮我实现这个吗?
2 回答
当您单击推送通知时,您会在函数中获得字典 - 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
}
}
}
}
}
}
推送通知与您的应用程序相关联,因此简而言之,您的应用程序无法直接打开 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 中打开它?