Ionic推送通知甚至没有发送到iOS(更不用说收到了)生产

时间:2017-02-14 15:43:19

标签: ios macos ionic-framework push-notification certificate

我在生产模式下遇到iOS推送通知问题。

我首先开发了Push for development:

  • 在Mac上创建了开发配置文件
  • 在Mac上创建了开发证书
  • 在Ionic Dashboard中创建了一个开发安全配置文件
  • 将dev证书添加到dev安全配置文件Ionic dashboard

一切都适用于Android和iOS。


然后我转投制作:

  • 为Mac上的实时创建配置文件和证书
  • 在Ionic Dashboard中创建了一个实时安全配置文件,并添加了实时证书


我总是用Postman测试Push:

使用正文

POST 发送到https://api.ionic.io/push/notifications
{
    "tokens": [
        "<ios token>",
        "<android token>"
    ],
    "profile": "live",
    "notification": {
        "message": "test",
        "ios": {
            "priority": 10
        },
        "android": {
            "priority": "high"
        }
    }
}

响应:

{
  "data": {
    "status": "open",
    "config": {
      "profile": "live",
      "notification": {
        "android": {
          "priority": "high"
        },
        "ios": {
          "priority": 10
        },
        "message": "test"
      },
      "tokens": [
        "<ios token>",
        "<android token>"
      ]
    },
    "created": "2017-02-14T15:07:58.988762+00:00",
    "app_id": "<app id>",
    "uuid": "<uuid>",
    "state": "enqueued"
  },
  "meta": {
    "status": 201,
    "request_id": "<request id>",
    "version": "2.0.0-beta.0"
  }
}


要查看正在发生的情况,我随后会发送 GET https://api.ionic.io/push/notifications/ <uuid> /messages ({{ 1}}来自第一个响应)并得到以下响应:

uuid

我注意到响应中缺少相应{ "data": [ { "status": "sent", "created": "2017-02-14T15:07:59.165266+00:00", "user_id": null, "token": { "token": "<android token>", "valid": true, "type": "android", "app_id": "<app id>", "invalidated": null, "id": "<id>", "created": "2017-02-14T14:27:27.585235+00:00" }, "error": null, "notification": "<notification uuid>", "uuid": "<message uuid>" } ], "meta": { "status": 200, "request_id": "<request id>", "version": "2.0.0-beta.0" } } 的数据 我想知道为什么甚至没有Ionic Docs中列出的错误响应 如果我使用 dev 安全配置文件发送这两个请求,我会获取iOS的数据,说明“错误”(<ios token>) - 这是正确的。

我已经尝试重新创建证书和内容,这不会改变结果。我还等了一整天才收到通知,万一有些事情需要很长时间。我确信我在Xcode中使用正确的配置文件构建了应用程序。

我正在使用Xcode 8.2 - 并确定在功能中启用“推送通知”。

我错过了什么?

1 个答案:

答案 0 :(得分:0)

在联系Ionic支持后,他们提出了检查令牌是否有效的想法。

操作方法记录在their docs

(GET) https://api.ionic.io/push/tokens/:token_id(其中token_id是设备令牌的md5哈希值)

我在Postman中添加了一个预请求脚本,如:

var token = "<your-device-token-to-check>";
var hash = CryptoJS.MD5( token ).toString();
postman.setEnvironmentVariable('token_hash', token);

...并将新环境变量作为参数(不在请求网址中)添加为key: (leave empty); value: ":{{token_hash}}"

然后我发现,我的所有iOS令牌在注册后不久就失效了。这就是我们的第一次测试成功和进一步发展突然失败的原因 在检查Ionic API的通知状态时,我不知道为什么他们会在响应中被遗漏。我建议支持添加错误响应(据我所知,已经有一个:&#39; APNS_BAD_DEVICE_TOKEN&#39; as&#34; 指定的设备令牌是坏的。验证您是否指定了有效的令牌 [...]&#34;。)


因为我无法解释原因,我只是重新创建了新的配置文件和证书(再次!),并从Mac上的Keychain Access中删除了旧配置文件和证书。我重新构建了应用程序,一切都很顺利。奇怪的...