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