如何通过Google Wallet API向通用通证发送更新推送通知?
解决Google Wallet通用通证更新推送通知不生效的问题
核心问题分析
你当前的实现误区在于:textModulesData中的enableNotification仅控制该文本模块是否会在通知中展示,并非触发推送通知的开关。真正触发推送的关键是在通证更新请求中添加sendNotification=true参数,同时需要确保文本模块的时间范围包含当前时间。
具体解决步骤
添加推送触发参数
在调用Google Wallet API更新通用通证对象时,必须在请求的参数中设置sendNotification=true。这个参数是触发推送通知的核心开关,它告诉Google Wallet服务向用户设备发送更新提醒。修正文本模块的时间范围
你设置的validTimeInterval是24小时后才开始生效,这意味着当前时间不在该区间内,文本模块不会被包含在通知内容中。需要将start时间调整为当前时间或更早,确保通知触发时该模块处于有效状态。验证权限与订阅状态
确认你的服务账号拥有wallet.genericObjects.update权限,且用户添加通证时未手动关闭推送通知(用户首次添加通证时会自动订阅推送)。
修正后的代码示例
const { google } = require('googleapis'); const moment = require('moment'); const wallet = google.wallet('v1'); async function updateGenericToken() { // 初始化授权(使用你的服务账号密钥) const auth = new google.auth.JWT( process.env.SERVICE_ACCOUNT_EMAIL, null, process.env.SERVICE_ACCOUNT_PRIVATE_KEY, ['https://www.googleapis.com/auth/wallet_object.issuer'] ); await auth.authorize(); // 更新通证对象并触发推送 const response = await wallet.genericObjects.patch({ auth: auth, resourceId: 'YOUR_GENERIC_OBJECT_ID', // 替换为你的通证对象ID requestBody: { textModulesData: [ { header: 'Last Notification', body: 'hello world 000', enableNotification: true, id: 'last_notification', validTimeInterval: { start: { date: moment().toISOString() }, // 设置为当前时间开始 end: { date: moment().add(48, 'hours').toISOString() } } } ] }, sendNotification: true // 关键:开启推送通知 }); console.log('通证更新成功,推送已触发:', response.data); }
验证方式
更新完成后,检查用户的Google Wallet应用是否收到推送,同时可以在Google Wallet开发者控制台的“事件日志”中查看通知是否被成功发送。
内容的提问来源于stack exchange,提问作者Ruben Perez
相关产品推荐
相关产品推荐

