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

How to open new WebView for IOS Push notification using swift

我正在开发 IOS 混合应用程序,我在其中开发了 IOS 推送通知,点击通知后,link 应该会在 webView 中打开,但这并不成功,所以请帮忙我来处理这种情况

我进行了查找,但在文件中找不到 "NotificationIdentifier" 两次。

然后我对你的代码进行了 hexdump:

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

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

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

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