func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject])
{
PFPush.handlePush(userInfo)
if application.applicationState == UIApplicationState.Active
{
PFAnalytics.trackAppOpenedWithRemoteNotificationPayload(userInfo)
if let msg = userInfo["test"] as? Dictionary<String,AnyObject>
{
print(msg)
}
}
我的userInfo [“test”] 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 :
我可以获取我的userInfo数据,但我不知道为什么我的msg没有值(甚至没有任何东西可以显示) 我怎么去打印(msg)?
更新
这就是我的推动:
$ this-&gt; parsepush-&gt; send(array(“channels”=&gt; ['test'],“data”=&gt;&gt; $ post_data));
在$ post_data示例中:
$ post_data = json_encode(阵列 ('link'=&gt; $ link,'message'=&gt; $ message)); \
我已尝试过指令,但我也不能做一个简单的打印。
修改
仍然跳过“aps”部分。
我的JSON
这是我的Json
看起来像:
> {
"aps":{
"alert":{
"title":"$title",
"body":"$message"
},
"badge":"1"
},
"adira":{
"link":"$link"
}
}
这是我的代码:
> func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject]) {
// PFPush.handlePush(userInfo)
// PFAnalytics.trackAppOpenedWithRemoteNotificationPayload(userInfo)
if let msg = userInfo["message"] as? String {
print(msg)
print("a")
}
if let alertDict = userInfo["aps"]?["alert"] as? Dictionary<String, String> {
print("title : ", alertDict["title"])
print("body :", alertDict["body"]!)
print("badge: ", alertDict["badge"]!)
print("b")
}
if let link = userInfo["link"] as? String {
print(link)
print("c")
}
}
}
但我仍然无法获取aps
数据。仍然没有或没有。
如果您需要特定代码,只需点击以下链接:
编辑2
我直接使用print(userInfo),打印输出为:
对象已保存。 [消息:iOS推送,aps:{},链接:]
更新2
我试图从parse.com推送,而不是我的网站(第三方)。 这是我从普通打印(userInfo)
获得的> [aps: {
alert = 12345abc;
sound = default;
}]
所以我想我会改变并在我的JSON中添加内容到我的网站:
[aps:{
alert = $message;
sound = default;
link = $link;
}]
那样的东西?
答案 0 :(得分:2)
如评论中所述,APNS有效载荷中没有密钥Intent intent = new Intent(context, UninstallService.class);
intent.setAction(intentAction);
intent.putExtra("APPLICATION_PREFERENCE", applicationPreference);
AlarmManager alarmMgr = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);
alarmMgr .setExact(AlarmManager.RTC_WAKEUP, time, pendingIntent );
如果保证发送密钥test
的值,您可以轻松解开值
message
否则使用可选绑定
let msg = userInfo["message"] as! String
print(msg)
要从if let msg = userInfo["message"] as? String {
print(msg)
}
键获取alert
字典并打印,例如使用aps
字符串
body
答案 1 :(得分:0)
我使用APNs Provider和json负载,如下所示
{
"aps" : {
"alert" : {
"title" : "I am title",
"body" : "message body."
},
"sound" : "default",
"badge" : 1
}
}
由于提供程序的缘故,它是作为JSON定义的字典而产生的,iOS将其转换为NSDictionary
对象,没有像Dictionary
这样的下标,但是可以使用value(forKey:)
来自here的引用
这是我使用Swift 4的方式
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)
}