Ios 如何在DidReceiveEmotentification中获取userInfo JSON值
我可以得到我的userInfo数据,但我不知道为什么我的msg值为零(甚至不是零,只是没有显示) 我怎样才能一直到打印(msg) 已更新 以下是我的推送方式: $this->parsepush->send(数组(“通道”=>['test'],“数据”=>>$post_data)) 内部$post_数据示例: $post_数据= json_编码(数组) ('link'=>$link,'message'=>$message))\ 我已经试过了,但是我也不能做一个简单的打印 编辑 仍然跳过了“aps”部分 我的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
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”}
是对还是错@vadianalert
必须是一个具有特定键的字典:{“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)
}