如何使用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的主要内容,如果未能解决你的问题,请参考以下文章