当用户点击iOS Swift推送通知时,在特定视图中打开应用程序

14
我的应用程序允许向用户发送远程推送通知。当用户点击推送通知时,如何使其在特定的视图控制器中打开?我希望根据接收到的推送通知,应用程序能够打开并导航到特定的视图控制器。请问该如何实现?
3个回答

26
为了实现此功能,您需要为每个可能打开应用的ViewController设置一个标识符,然后在AppDelegate中检查application:didFinishLaunchingWithOptions:launchOptions参数中的payload。以下是实现此操作的步骤:
  1. 在您的PFPush中,使用setData向负载添加带有标识符的键:notification.setData(["alert":"your notification string", "identifier":"firstController"])

  2. 通过选择它并更改以下值,为每个ViewController设置标识符

Setting the Storyboard ID

  1. 使您的Push Notification在其payload中发送故事板ID,并使用键标识符
  1. 通过在函数末尾添加以下内容检查application:didFinishLaunchingWithOptions:中的ID:
if let payload = launchOptions?[UIApplicationLaunchOptionsRemoteNotificationKey] as? NSDictionary, identifier = payload["identifier"] as? String {
    let storyboard = UIStoryboard(name: "Main", bundle: nil)
    let vc = storyboard.instantiateViewControllerWithIdentifier(identifier)
    window?.rootViewController = vc
}

我正在使用PFPush,目前我的推送通知只包含一串文本字符串。 - mechdon
我查阅了PFPush类的参考文档。文档中提到,如果我使用setMessage方法,这将覆盖setData中指定的任何数据。除了标识符之外,我还需要设置消息。 - mechdon
@mechdon在你的字典中添加一个叫做 alert 的键,并将其值设置为你想要发送的警报,就像这样:["alert":"您的通知字符串", "identifier":"firstController"] - kabiroberai
@mechdon,我刚刚更新了我的答案。希望现在可以正常运行 :) - kabiroberai
非常感谢kabiroberai,你的回答对我很有帮助。是的,它正在工作! - mechdon
显示剩余10条评论

7
在AppDelegate中,您将会收到一个代理回调“didFinishLoading”或“didReceivePushNotification”方法(根据您的应用是在后台还是前台)。在该方法中获取最上层视图控制器的实例,然后创建您想要展示并从最上层视图控制器呈现/推送的具体视图控制器。

3
Satyam,谢谢你的回答,也是正确的。但我选择了kabiroberai的答案,因为他提供了最完整的解决方案来回答我的问题。 - mechdon
@Satyam,我们如何知道基于推送通知需要导航到哪个控制器?请澄清一下。 - Narasimha Nallamsetty
@NarasimhaNallamsetty,你的推送通知负载必须具备必要的信息。也许你们的服务器人员需要在负载中添加更多信息。请访问苹果网站。根据额外的信息,你可以确定你需要导航到哪个视图控制器。 - Satyam

1
 UILocalNotification *notification = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
    if (notification)
    {
        [self application:application didReceiveRemoteNotification:(NSDictionary*)notification];
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接