You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Apple Wallet注册阶段获取的设备push token发送alert推送通知?

Apple Wallet通行证推送问题解答

不能直接使用PassKit注册阶段获取的设备推送token发送普通alert类通知,该token为PassKit专属,仅用于触发设备拉取通行证更新,无法直接承载自定义弹窗通知内容。

若要实现给Wallet通行证用户推送提醒,需按以下流程操作:

  • 服务端向设备发送PassKit专用空推送,触发设备拉取最新通行证
  • 服务端在通行证更新接口返回修改后的通行证包,在包内配置需要展示的通知内容及触发条件
  • 设备校验到通行证版本更新后,自动弹出你配置的提醒内容

你提供的示例代码存在两处核心错误,是导致设备收不到提醒的原因:

  1. 推送类型配置错误:PassKit推送不可使用apns2.PushTypeAlert,需替换为apns2.PushTypePass
  2. 推送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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 18:45:08