如何使用Apple Wallet注册阶段获取的设备push token发送alert推送通知?
Apple Wallet通行证推送问题解答
不能直接使用PassKit注册阶段获取的设备推送token发送普通alert类通知,该token为PassKit专属,仅用于触发设备拉取通行证更新,无法直接承载自定义弹窗通知内容。
若要实现给Wallet通行证用户推送提醒,需按以下流程操作:
- 服务端向设备发送PassKit专用空推送,触发设备拉取最新通行证
- 服务端在通行证更新接口返回修改后的通行证包,在包内配置需要展示的通知内容及触发条件
- 设备校验到通行证版本更新后,自动弹出你配置的提醒内容
你提供的示例代码存在两处核心错误,是导致设备收不到提醒的原因:
- 推送类型配置错误:PassKit推送不可使用
apns2.PushTypeAlert,需替换为apns2.PushTypePass - 推送payload格式错误:PassKit推送不需要携带alert相关内容,仅需发送空的aps结构
{"aps":{}}即可,通知内容需配置在更新后的通行证文件中
修改后的参考代码如下:
package main import ( "crypto/tls" "github.com/rs/zerolog/log" "github.com/sideshow/apns2" "time" ) func main(){ pushToken := "device-pushToken" passTypeIdentifier := "my-passTypeIdentifier" var cert tls.Certificate // 此处初始化你的PassKit专用证书 notification := &apns2.Notification{} // 修改为Pass专用推送类型 notification.PushType = apns2.PushTypePass notification.DeviceToken = pushToken notification.Topic = passTypeIdentifier notification.Priority = 10 notification.Expiration = time.Now().Add(time.Hour * 4) // PassKit推送仅需要空aps payload即可 notification.Payload = []byte(`{"aps": {}}`) client := apns2.NewClient(cert).Production() res, err := client.Push(notification) if err != nil { log.Fatal().Msg(err.Error()) } log.Info().Int("status: ", res.StatusCode).Msg("push token apple status.") }
额外注意事项:
- 所用推送证书必须是PassKit专用证书,不可使用普通iOS应用的推送证书
- 设备收到推送后会向你预先配置的通行证web服务端点发起更新请求,需保证该接口可用,且返回的通行证
serialNumber与原通行证一致、modificationDate晚于本地版本、authenticationToken校验通过 - 通知内容需在通行证包的
pass.json中配置,你可以根据需求配置定时提醒、位置提醒,或者直接配置通行证更新时的全局提醒文本
内容的提问来源于stack exchange,提问作者Yasser Sinjab
相关产品推荐
相关产品推荐

