APS:缺少主题

时间:2016-10-31 21:54:37

标签: ios apple-push-notifications node-apn

我有一个需要推送功能的iOS应用程序,为此已经创建了必要的dev和Prod SSL证书,并将它们加载到通知提供程序(node-apn)上;

通知在APNs沙箱环境中正常工作,但是,在生产设置上发送通知时,提供商从APN网关收到错过的主题错误。

在检查产品证书时,我看到证书扩展名下列出了三个项目:

  1. app.bundle.id
  2. app.bundle.id.voip和
  3. app.bundle.id.complication
  4. APSd登录手机,显示当应用程序向操作系统注册其通知设置时,相关主题(app.bundle.id)已启用。因此,在应用程序方面,我的设置看起来很好。

    根据Apple文档,来自提供商的通知发布POST必须包含apn-topic标头iff,该应用程序支持多个主题。

    我的理解是,voip和并发症节点会自动添加到证书扩展中,并不一定意味着单独的主题。

    问题:

    1. apn-topic标题是强制性的还是可选的?

    2. 上述设置是否被视为多主题或单个主题?

    3. 每个通知提供商是否需要知道它支持的每个应用的捆绑ID /主题,并使用该值将apn-topic标头发送到APN?

    4. 请告知。

2 个答案:

答案 0 :(得分:1)

我在dev和prod之间有类似的问题,在我的情况下,它在标题中的问题,与文档相关说:

  

用于apns-id,apns-expiration和apns-collapse-id请求标头的适当编码因其是初始操作还是后续POST操作的一部分而有所不同,如下所示:   第一次发送这些标头时,使用增量索引对它们进行编码,以允许将标头名称添加到动态表中   随后您将发送这些标头,将它们编码为文字标题字段而不编制索引

HTTP/2 Request to APNs

所以在PHP中,请求的标题是这样的:

 $headers[] = 'content-length: ' . strlen($data);
 $headers[] = 'apns-topic: ' . $message->topic;
 $headers[] = 'apns-expiration: ' . ($message->time_to_live ? (int)$message->time_to_live + time() : 0);

没有姓名或密钥。

我希望它有助于某人

答案 1 :(得分:0)

使用Legacy证书,开发人员为其应用支持的每种类型的功能获得一个证书:常规PUSH通知,VoIP等。每个都只配置一个主题,因此当通知提供程序使用旧版证书与APNs网关连接时,主题规范是可选的。

通过新的http2接口和Universal证书的引入,开发人员现在可以获得一个证书,如果他们愿意,可以提供标准推送,VoIP推送和watchkit通知。这意味着同一个证书可以有多个主题(就像我的情况一样)。因此,当通知提供程序使用新的通用证书与APNs网关连接时,必须在http标头中指定主题,并且主题需要与证书中存在的主题匹配。

主题标题不再是可选的。

相关问题