Amazon sns(推送通知)不发送到 IOS 应用程序

Amazon sns (push notification) does not send to IOS application

最近应用收不到通知,android端正常,ios端失效

所以这是我的尝试:

1) generate token from apple apn service
2) create the endpoint at amazon backend
3) publish the message at amazon backend
4) it does not receive message and the endpoint will go to disabled after a while.

我检查了以下内容:

1) try serveal ios device , including iphone/ ipad/ipod touch also the same result
2) checked the secret key/ platform arn it is matched
3) created another platform ARN but still the same.

所以,我应该继续调试什么方向,例如是推送通知证书吗?我应该检查编码的哪一部分,因为它以前有效但最近才失败。

非常感谢。

如果 SNS 端点在一段时间后被禁用,这意味着您的 APNS 证书有问题。您是否错误地将沙盒证书用于产品,反之亦然?您有正确的证书和私钥组合吗?有关详细信息,请参阅 http://docs.aws.amazon.com/sns/latest/dg/mobile-push-apns.html

  1. 创建您的 APNs 沙箱(开发)证书(确保您正在 selecting 开发证书的捆绑标识符)

  2. 创建沙盒证书后,验证推送通知服务是否已为您的配置文件启用(您不能使用 APNS 证书创建配置文件,您必须使用使用开发证书创建的配置文件)

  3. 如果您已经安装了开发配置文件,则从以下路径删除 "xcode-prefrences-select apple developer account - view details - provisiong profile"

  4. 从会员中心下载开发配置文件并安装。 Select 新安装的配置文件和证书

  5. 登录 Amazon SNS 和 select 最近的位置(右上角),如下图红色椭圆所示。 Change Location place

  6. 在 "Mobile Services" 部分下 select SNS(推送通知服务)

  7. 现在您将进入 SNS 主屏幕,现在 select 从侧面菜单申请

  8. 单击 "Create Platform Application"。输入应用程序名称,然后输入 select 推送通知平台 "Apple Development" 和推送证书类型 "iOS Push Certificate"

  9. 现在你必须上传privateKey.p12

获取privateKey.p12的过程

要获取privateKey.p12,请下载APNs(sandbox) 证书并将其安装到krychain 中。然后打开钥匙串访问并展开证书然后 select 开发者帐户持有人的姓名(它将有钥匙图标和种类 "private key") 现在右键单击帐户持有人姓名并单击导出(如果需要,请输入文件密码或留空)然后名称为 privatekey.p12 并将其存储在桌面上

  1. 从桌面选择 privateKey.p12 然后输入密码(如果已设置)然后单击 "Load Certificate from File" 然后证书和私钥字段将填充从 privateKey.p12 导出的值。

  2. 单击 "Create Application Platform",您的新 ios 应用程序已创建。

  3. 单击 ARN,它将进入您的应用程序。现在点击 "Create Platform Endpoint"

  4. 运行 您的移动应用并获取 deviceToken

  5. 在"Device token"字段中输入设备令牌并在用户数据中提供设备名称。现在点击 "Add Endpoint"

  6. Select 添加端点并单击 "Publish to Endpoint"

Select 消息格式根据您的需要然后输入您的消息然后单击 "Publish Message"。

做出如下回应: 如果您从 android 使用 GCM 或 ios 使用 APNS_SANDBOX

$sns = AWS::createClient('sns');
    $message = json_encode(['default' => '', 'APNS_SANDBOX' => json_encode($data), 'GCM' => json_encode(['data' => $data])]);
    $sns->publish([
        'TargetArn' => $arn,
        'Message' => $message,
        'MessageStructure' => 'json'
    ]);