移动推送对于已成功送入APNs但未收到通知的排查方法

问题描述

移动推送对于已成功送入APNs但未收到通知的排查方法。

解决方案

客户反馈未收到消息,这边排查推送日志又是APNs2 sent success for ${deviceid} - ${deviceToken},说明消息成功发送到厂商服务端。

对于已成功送入APNs的通知:

  1. 是必现还是偶现。

  2. 如果是必现,则用Shell直接向APNs推送,看能否推送成功。

  3. 如果是iOSMutableContent=true的,收到后应该会在设备上留下日志,看一下是否存在日志。

  4. 如果未设置iOSMutableContent的,建议推送时设置iOSMutableContent=true,这样在通知展示前会通知extension来处理,可以在日志里记录一下通知收到的信息。

第2步的Shell脚本如下,客户创建push-ios-example.sh文件,替换对应的信息,终端运行sh push-ios-example.sh,看客户端上是否能收到消息。

#!/bin/bash
#推送p12证书的路径
CERT_FILE=${cert_filename.p12}
#推送证书的密码
CERT_PASSWORD=${cert_password}
#true是开发环境,false是生产环境
SANDBOX=true
#安装包的bundleId
BUNDLE_ID=${bundle_id}
#安装包获取的APNs的Token
DEVICE_TOKEN=${deviceToken}

if [ "${SANDBOX}" = true ]; then
  HOST=api.sandbox.push.apple.com
else
  HOST=api.push.apple.com
fi
curl -v \
  -d '{"aps":{"alert":"Test Push Message! --EMAS"}}' \
  --cert-type P12 \
  --cert ${CERT_FILE}:${CERT_PASSWORD} \
  -H "apns-topic:${BUNDLE_ID}" \
  https://${HOST}/3/device/${DEVICE_TOKEN}

适用于

  • 移动推送