苹果推送通知与发送自定义数据

58

我正在使用php工作应用程序向iPhone手机发送推送通知。我正在发送关于新工作的推送通知。这是否可能使用户在点击弹出式推送通知的视图时,重定向到设备上的特定工作。

我的意思是,我想知道是否可以通过推送通知发送任何自定义数据,例如工作ID或其他内容...以便iPhone端可以检索并显示特定的工作?

谢谢。


3
哦,抱歉rckones,我不知道如何接受答案,是我的错,现在解决了... :) - vikas
6
我们在这里都是来学习的。 - rckoenes
3个回答

125

不论你使用的语言和库是什么,推送通知的载荷都是 JSON 格式的:

{
    "aps": {
         "badge": 10,
         "alert": "Hello world!",
         "sound": "cat.caf"
    }
}

aps令牌是苹果APN数据。您也可以将自定义数据添加到负载中:

{
    "aps": {
         "badge": 10,
         "alert": "Hello world!",
         "sound": "cat.caf"
    },
    "job_id": 1
}
当你在应用程序中收到通知时,请检查通知字典中的参数:
- (void)handleBackgroundNotification:(NSDictionary *)notification
{
    NSDictionary *aps = (NSDictionary *)[notification objectForKey:@"aps"];
    NSMutableString *alert = [NSMutableString stringWithString:@""];
    if ([aps objectForKey:@"alert"])
    {
        [alert appendString:(NSString *)[aps objectForKey:@"alert"]];
    }
    if ([notification objectForKey:@"job_id"])
    {
        // do something with job id
        int jobID = [[notification objectForKey:@"job_id"] intValue];
    }
}

请注意负载的总大小为256 字节,这当然包括您自定义的参数。因此,您可能需要(冒着降低可读性的风险)将自定义参数称为“ji”,而不是“job_id”来压缩字节。

所有这些都有文档记录在iOS文档中的本地和推送通知编程指南中。强烈建议阅读,因为它比最初听起来要复杂得多(至少,我是这样认为的)。


如何向有效载荷中添加自定义数据? - Haring10
@JoshHarington "job_id": 1 是负载中的自定义数据。 - Khaled Annajar
12
从 iOS 8 开始,有效载荷大小已从 256 字节增加到 2KB :) - Durai Amuthan.H
你是否在iOS 10中获取自定义数据负载? - Sunil Zalavadiya

8

是的,您可以发送自定义数据,请查看apns-php库,以满足所有推送通知需求:


嗨:你能否解释一下 PHP 中 Push 的格式。 - Asim Khan
@Asim,我对格式没有太多信息,但你可以使用我提到的PHP库。你可以进行反向工程以查看格式。 - Arfeen

-1

我们可以添加多个自定义数据,但是如果我使用sub_action作为名称,我的iPhone将无法接收推送消息。

Java:

PayLoad payLoad = new PayLoad();
payLoad.addCustomDictionary("action", action_type);
payLoad.addCustomDictionary("subaction", sub_action_type);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接