如何使用swift为IOS推送通知打开新的WebView

Posted

技术标签:

【中文标题】如何使用swift为IOS推送通知打开新的WebView【英文标题】:How to open new WebView for IOS Push notification using swift 【发布时间】:2015-02-11 05:45:52 【问题描述】:

我正在开发 ios Hybrid 应用程序,我在其中开发了 IOS 推送通知,点击通知后,链接应该在 webView 中打开,但这没有发生,所以请帮我处理这种情况

【问题讨论】:

您能否向我们展示一些您当前的代码,以便我们帮助您更正它?您还可以显示推送通知的转储吗? -(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo NSLog(@"%@", userInfo); func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject: AnyObject]) NSNotificationCenter.defaultCenter().postNotificationName("NotificationIdentifier", object: nil) override func viewDidLoad() super. viewDidLoad() NSNotificationCenter.defaultCenter().addObserver(self, selector: "methodOFReceivedNotication:", name:"NotificationIdentifier", object: nil) func methodOFReceivedNotication(notification: NSNotification) var webView = WKWebView() var url : NSURL = NSURL(string: “m.xyz.com”) var request = NSURLRequest(URL:url) webView.loadRequest(请求)self.view.addSubview(webView) 【参考方案1】:

我做了一个查找,在文件中两次找不到“NotificationIdentifier”。

然后我对你的代码做了一个十六进制转储:

hexdump -C file
00000000  66 75 6e 63 20 61 70 70  6c 69 63 61 74 69 6f 6e  |func application|
00000010  28 61 70 70 6c 69 63 61  74 69 6f 6e 3a 20 55 49  |(application: UI|
00000020  41 70 70 6c 69 63 61 74  69 6f 6e 2c 20 64 69 64  |Application, did|
00000030  52 65 63 65 69 76 65 52  65 6d 6f 74 65 4e 6f 74  |ReceiveRemoteNot|
00000040  69 66 69 63 61 74 69 6f  6e 20 75 73 65 72 49 6e  |ification userIn|
00000050  66 6f 3a 20 5b 4e 53 4f  62 6a 65 63 74 20 3a 20  |fo: [NSObject : |
00000060  41 6e 79 4f 62 6a 65 63  74 5d 29 20 7b 20 0a 20  |AnyObject])  . |
00000070  20 4e 53 4e 6f 74 69 66  69 63 61 74 69 6f 6e 43  | NSNotificationC|
00000080  65 6e 74 65 72 2e 64 65  66 61 75 6c 74 43 65 6e  |enter.defaultCen|
00000090  74 65 72 28 29 2e 70 6f  73 74 4e 6f 74 69 66 69  |ter().postNotifi|
000000a0  63 61 74 69 6f 6e 4e 61  6d 65 28 22 4e 6f 74 69  |cationName("Noti|
000000b0  66 69 63 61 74 69 6f 6e  49 64 65 6e 74 69 66 69  |ficationIdentifi|
000000c0  65 e2 80 8c e2 80 8b 72  22 2c 20 6f 62 6a 65 63  |e......r", objec|
000000d0  74 3a 20 6e 69 6c 29 0a  7d 20 0a 0a 6f 76 65 72  |t: nil). ..over|
000000e0  72 69 64 65 20 66 75 6e  63 20 76 69 65 77 44 69  |ride func viewDi|
000000f0  64 4c 6f 61 64 28 29 20  7b 20 0a 20 20 20 20 73  |dLoad()  .    s|
00000100  75 70 65 72 2e 76 69 65  77 44 69 64 4c 6f 61 64  |uper.viewDidLoad|
00000110  28 29 20 0a 20 20 20 20  4e 53 4e 6f 74 69 66 69  |() .    NSNotifi|
00000120  63 61 74 69 6f 6e 43 65  6e 74 65 72 2e 64 65 66  |cationCenter.def|
00000130  61 75 6c 74 43 65 6e 74  65 72 28 29 2e 61 64 64  |aultCenter().add|
00000140  4f 62 73 65 72 76 65 72  28 73 65 6c 66 2c 20 73  |Observer(self, s|
00000150  65 6c 65 63 74 6f 72 3a  20 22 6d 65 74 68 6f 64  |elector: "method|
00000160  4f 46 52 65 63 65 69 76  65 64 4e 6f 74 69 63 61  |OFReceivedNotica|
00000170  74 69 6f 6e 3a 22 2c 20  6e 61 6d 65 3a 22 4e 6f  |tion:", name:"No|
00000180  74 69 66 69 63 61 74 69  6f 6e 49 64 65 6e 74 69  |tificationIdenti|
00000190  66 69 65 72 22 2c 20 6f  62 6a 65 63 74 3a 20 6e  |fier", object: n|
000001a0  69 6c 29 20 0a 7d 0a 0a  66 75 6e 63 20 6d 65 74  |il) ...func met|
000001b0  68 6f 64 4f 46 52 65 63  65 69 76 65 64 4e 6f 74  |hodOFReceivedNot|
000001c0  69 63 61 74 69 6f 6e 28  6e 6f 74 69 66 69 63 61  |ication(notifica|
000001d0  74 69 6f 6e 3a 20 4e 53  4e 6f 74 69 66 69 63 61  |tion: NSNotifica|
000001e0  74 69 6f 6e 29 20 7b 20  0a 20 20 76 61 72 20 77  |tion)  .  var w|
000001f0  65 62 56 69 65 77 20 3d  20 57 4b 57 65 62 56 69  |ebView = WKWebVi|
00000200  65 77 28 29 20 0a 20 20  76 61 72 20 75 72 6c 20  |ew() .  var url |
00000210  3a 20 4e 53 55 52 4c 20  3d 20 4e 53 55 52 4c 28  |: NSURL = NSURL(|
00000220  73 74 72 69 6e 67 3a 20  e2 80 9c 6d 2e 78 79 7a  |string: ...m.xyz|
00000230  2e 63 6f 6d e2 80 9d 29  20 0a 20 20 76 61 72 20  |.com...) .  var |
00000240  72 65 71 75 65 73 74 20  3d 20 4e 53 55 52 4c 52  |request = NSURLR|
00000250  65 71 75 65 73 74 28 55  52 4c 3a 75 72 6c 29 20  |equest(URL:url) |
00000260  0a 20 20 77 65 62 56 69  65 77 2e 6c 6f 61 64 52  |.  webView.loadR|
00000270  65 71 75 65 73 74 28 72  65 71 75 65 73 74 29 20  |equest(request) |
00000280  0a 20 20 73 65 6c 66 2e  76 69 65 77 2e 61 64 64  |.  self.view.add|
00000290  53 75 62 76 69 65 77 28  77 65 62 56 69 65 77 29  |Subview(webView)|
000002a0  20 0a 7d 20                                       | . |
000002a4

您的第一个字符串在最后一个“e”处包含一个奇怪的字符。 我认为您的处理程序可能不会被调用,因为通知标识符不同。您可以通过在 methodOFReceivedNotication 和 application:didReceiveRemoteNotification: 中输入日志来验证吗?

-> 解决方法:手写“NotificationIdentifier”

此外,application:didReceiveRemoteNotification: 仅在应用程序已启动时调用,这很好,因为您在其 viewDidLoad 中注册了您的 ViewController。

但是,如果您不知道,当通知打开应用程序(不是将其置于前台而是打开它)时,不会调用 application:didReceiveRemoteNotification: 并且通知会在 launchOptions 字典中提供。 我邀请你look at this blog article about notifications for more details。

-> 解决方案:确保在发送通知时检查应用程序中的 UIApplicationLaunchOptionsRemoteNotificationKey 键:didFinishLaunchingWithOptions: launchOptions。

在任何情况下,请确保您在发送任何通知之前已注册您的观察者以接收通知。

解决方案:-> 记录 registerObserver 和 postNotification 调用可能会有所帮助

【讨论】:

感谢您的回复。问题不是 NotificationIdentifier 拼写错误。如果我在 methodOFReceivedNotication 方法中显示警报,它可以工作,但 webview 加载不工作。 网页视图是否显示?还是不加载?您是否尝试设置 webview 框架? webView.frame = self.view.bounds; 第二个问题是,如果我的应用程序关闭并且我收到通知,那么如何从应用程序打开 webview:didFinishLaunchingWithOptions 方法

以上是关于如何使用swift为IOS推送通知打开新的WebView的主要内容,如果未能解决你的问题,请参考以下文章

如何处理未打开的推送通知(iOS、Swift)

如何在应用程序处于非活动状态时获取推送通知ios swift3

使用swift杀死应用程序时如何存储ios推送通知

在 Swift iOS 中推送通知

当用户在 swift 中单击推送通知时打开自定义 url

IOS Swift-收到推送通知时应用程序未打开特定选定的标签栏控制器索引