Ios 如何在DidReceiveEmotentification中获取userInfo JSON值

Ios 如何在DidReceiveEmotentification中获取userInfo JSON值,ios,json,swift,swift2,Ios,Json,Swift,Swift2,我可以得到我的userInfo数据,但我不知道为什么我的msg值为零(甚至不是零,只是没有显示) 我怎样才能一直到打印(msg) 已更新 以下是我的推送方式: $this->parsepush->send(数组(“通道”=>['test'],“数据”=>>$post_data)) 内部$post_数据示例: $post_数据= json_编码(数组) ('link'=>$link,'message'=>$message))\ 我已经试过了,但是我也不能做一个简单的打印 编辑 仍然跳过了“aps

我可以得到我的userInfo数据,但我不知道为什么我的msg值为零(甚至不是零,只是没有显示) 我怎样才能一直到打印(msg)

已更新

以下是我的推送方式:

$this->parsepush->send(数组(“通道”=>['test'],“数据”=>>$post_data))

内部$post_数据示例:

$post_数据= json_编码(数组) ('link'=>$link,'message'=>$message))\

我已经试过了,但是我也不能做一个简单的打印

编辑

仍然跳过了“aps”部分

我的JSON

下面是我的
Json
外观:

> Printing description of userInfo:
▿ 3 elements
  ▿ [0] : 2 elements
    - .0 : message
    - .1 : 1235
  ▿ [1] : 2 elements
    - .0 : aps
    - .1 : 0 elements
  ▿ [2] : 2 elements
    - .0 : link
    - .1 : 
这是我的代码:

> {  
  "aps":{  
     "alert":{  
        "title":"$title",
        "body":"$message"
     },
     "badge":"1"
  },
  "adira":{  
     "link":"$link"
  }
}
因此,我想我只是改变一下,在我的JSON中添加一些内容,从我的网站到:

> [aps: {
    alert = 12345abc;
    sound = default;
}]

类似的情况?

如评论中所述,APNS有效负载中没有键
测试。
如果保证始终发送键
消息
的值,则您可以轻松地打开该值

[aps:{
   alert = $message;
   sound = default;
   link = $link;
}]
否则,请使用可选绑定

let msg = userInfo["message"] as! String
print(msg)
要从
aps
键获取
alert
字典并打印
body
字符串,请使用

if let msg = userInfo["message"] as? String {
    print(msg)
}

我使用APNs提供程序和json负载,如下所示

if let aps = userInfo["aps"] as? [String:Any],
   let alertDict = aps["alert"] as? [String:String] {
    print("body :", alertDict["body"]!)
}
由于提供程序将其作为JSON定义的字典生成,iOS将其转换为
NSDictionary
对象,没有类似
dictionary
的下标,但可以使用
value(forKey:)

参考自

这是我去斯威夫特4号的路

{
  "aps" : {
    "alert" : {
      "title" : "I am title",
      "body" : "message body."
    },
  "sound" : "default",
  "badge" : 1
  }
}

嗯,
test
键没有任何值,只有
消息
aps
链接
。请包括您发送的内容。@jcaron这里是我从网站推送的内容
$this->parsepush->send(数组(“通道”=>['test'],“数据”=>$post_data))那么我可以将JSON转换为字典吗?或字符串?不要在注释中添加代码,编辑您的问题以添加代码。此外,您实际上没有包括您发送的内容(
$post\u data
)。当你收到JSON时,它已经被iOS解码了,但是你还没有告诉我们你发送的JSON是什么。好吧,对不起,我会修复它的@JCaronher的更新功能是使用parse.com侦听来自我的Web服务的推送通知。我的web服务使用JSON格式推送数据,使用2个元素:(“message”和“link”),link可以为空。userInfo已经正确地接受了打印的数据,现在我需要提取消息数据(例如:“1235”和上面的数据一样),这样我就可以用它创建一个带有该数据标题的通知(“1235”)。我也更新了我的push@jcaronyes,非常感谢,这很有效,但是我尝试了同样的“aps”,它不起作用,只需跳过,但它适用于“消息”和“链接”。有什么想法吗@瓦迪安仍然跳过了那个部分。我上传了pic@vadianYour JSON值转储文件,上面说
aps
键包含
0个元素
aka一个空字典。如果我的
aps
像这样声明
{“aps”:{“alert”:“Testmessage”,“badge”:“1”}
是对还是错@vadian
alert
必须是一个具有特定键的字典:{“aps”:{“alert”:{“title”:“TestTitle”,body:“Testmessage”},badge:“1”}。请阅读有关如何创建有效负载的文档
if let aps = userInfo["aps"] as? [String:Any],
   let alertDict = aps["alert"] as? [String:String] {
    print("body :", alertDict["body"]!)
}
{
  "aps" : {
    "alert" : {
      "title" : "I am title",
      "body" : "message body."
    },
  "sound" : "default",
  "badge" : 1
  }
}
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
    guard application.applicationState == .active else { return }
    guard let alertDict = ((userInfo["aps"] as? NSDictionary)?.value(forKey: "alert")) as? NSDictionary,
        let title = alertDict["title"] as? String,
        let body = alertDict["body"] as? String
        else { return }
    let alertController = UIAlertController(title: title, message: body, preferredStyle: .alert)
    let okAct = UIAlertAction(title: "Ok", style: .default, handler: nil)
    alertController.addAction(okAct)
    self.window?.rootViewController?.present(alertController, animated: true, completion: nil)
    completionHandler(UIBackgroundFetchResult.noData)
}