我们已经实施了apple apns推送通知。在python中配置pem文件和设备令牌。它们像这样触发json有效载荷
{" APS" :{ "警报" :"获得了1个新优惠。要查看,请点按此处。" }," notification_type":"新优惠 历史"" redirect_link。”:”报价”}
我们收到通知,但完整的json显示在消息中。我们只需要在通知消息
上显示警报消息答案 0 :(得分:2)
我认为通知在json
下面的push try中显示数据而不是json {"aps":{"alert":"This is your message to be displayed","sound":"default","badge":1}, "Data":{"key1":"val1", "key2":"val2"}}
警报内容将以推送形式显示,Data Key / Val对是您可以在有效负载中传递并在您的代码中访问它的自定义数据。
上面分享的代码是我在大多数API项目中使用的工作代码。
答案 1 :(得分:2)
您需要从词典对象获取数据并在alertview上显示消息
- (void) application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {
if (userInfo) {
NSString *message = [[userInfo valueForKey:@"aps"] valueForKey:@"alert"];
UIAlertController * alert = [UIAlertController alertControllerWithTitle:@"Info" message: message preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction* ok = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:^(UIAlertAction * action) {
[alert dismissViewControllerAnimated:YES completion:nil];
}];
[alert addAction:ok];
[self.window.rootViewController presentViewController:alert animated:YES completion:nil];
}
}
答案 2 :(得分:1)
在您生成有效负载时,您需要在Python
中创建数组,而不是需要应用json
编码,而不是将该json字符串传递给APNS服务器。
在PHP中,开发人员通常会在下面编写代码:
//Create Payload body with array.
$body['aps'] = array(
'alert' => $message,
'sound' => 'default'
);
//Convert Payload array to JSON
$payload = json_encode($body);
//Pass message to APNS
$msg = chr(o) . pack('n', 32) . pack('H*', $deviceToken) . pack('n', strlen($payload)) . $payload;
通过这个我们可以在iPhone中实现APNS消息。
希望这会对你有所帮助。
答案 3 :(得分:1)
恢复旧帖子,但我不得不发布这个! 4年后,没有人注意到字符的问题!该 json 无效,因为最后 3 个双引号是斜体(左/右)!普通双引号的 ASCII 码是 34,而斜体是 UTF8 中 3 个字节的 Unicode 字符(0xE2 0x80 0x9D)。此外,该 json 也无效,因为它以“.”结尾。
所以这意味着json是手写的。通过类或字典或您喜欢的任何其他方式生成它,您会没事的,只是不要手动编写任何形式的标记/降价。或者至少您可以使用在线 json 验证器来验证您手写的 json。
答案 4 :(得分:0)
你需要从字典对象中获取数据,如
NSDictionary *aps = [payload objectForKey:@"aps"];
NSString *alert = [aps objectForKey:@"alert"]
答案 5 :(得分:0)
使用此
-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
{
if(application.applicationState == UIApplicationStateInactive)
{
NSLog(@"Inactive");
//do your things when you click on notification
}
else if (application.applicationState == UIApplicationStateBackground)
{
NSLog(@"Background");
}
else if (application.applicationState == UIApplicationStateActive)
{
NSLog(@"Active");
NSDictionary *aps = [userInfo objectForKey:@"aps"];
NSString *alert = [aps objectForKey:@"alert"]
UIAlertController *alertController = [UIAlertController
alertControllerWithTitle:nil
message:alert
preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction *okAction = [UIAlertAction
actionWithTitle:NSLocalizedString(@"OK", @"OK action")
style:UIAlertActionStyleDefault
handler:^(UIAlertAction *action)
{
//do on ok press
}];
[alertController addAction:okAction];
UIViewController *ob = [self getTopViewController];
[ob presentViewController:alertController animated:YES completion:nil];
}
}
-(id)getTopViewController{
UIViewController *topController = [UIApplication sharedApplication].keyWindow.rootViewController;
while (topController.presentedViewController) {
topController = topController.presentedViewController;
}
if (![topController isKindOfClass:[NSNull class]]) {
return topController;
}
}
这里我得到顶级viewcontorller并显示警告信息
答案 6 :(得分:0)
这是一个古老的问题,但我认为回应并未回答这个问题。显示整个JSON是因为我认为有效载荷的格式不正确。它应该看起来像这样:
{
"aps" : {
"category" : "NEW_MESSAGE_CATEGORY"
"alert" : {
"body" : "Acme message received from Johnny Appleseed", //the message
},
"badge" : 3,//This is the little number icon
"sound" : “chime.aiff" //The sound that will make on the device
}
}
您可以在此处找到更多信息:Apple Docs