直接显示apns payload消息json格式

时间:2016-09-01 05:08:45

标签: ios objective-c push-notification apple-push-notifications

我们已经实施了apple apns推送通知。在python中配置pem文件和设备令牌。它们像这样触发json有效载荷

  

{" APS" :{    "警报" :"获得了1个新优惠。要查看,请点按此处。"   }," notification_type":"新优惠   历史"" redirect_link。”:”报价”}

我们收到通知,但完整的json显示在消息中。我们只需要在通知消息

上显示警报消息

7 个答案:

答案 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