Push Notifications Reference
Updated March 02, 2026
TL;DR: How to send notifications to wallet pass holders.
- Apple: Requires pass update + APNs + web service
- Google: Direct API call, no pass update required
- Apple: ~20 notifications/day limit (unofficial)
- Google: 3 notifications/day limit (enforced)
- Keep notifications time-sensitive and under 140 characters
Overview
This reference covers push notifications for Apple Wallet and Google Wallet passes. The platforms use fundamentally different architectures — Apple requires a cooperative web service, while Google provides a direct API.
Quick Reference
| Spec | Apple Wallet | Google Wallet |
|---|---|---|
| Notification trigger | Pass must be updated | Message API (no update required) |
| Daily limit | ~20 per pass | 3 per pass |
| Requires web service | Yes | No |
| Requires APNs | Yes | No |
| Silent updates | Yes (no changeMessage) | Yes (TEXT type) |
| Marketing allowed | No | Limited |
| Character limit | ~140 (60-80 on Watch) | ~140 |
Apple Wallet
How It Works
Apple Wallet notifications require a 4-step cooperative process:
- Device registers with your server (stores push token)
- Pass content changes on your server
- Your server sends push notification via APNs
- Device fetches updated pass from your web service
You cannot send arbitrary notifications. Notifications are tied to actual pass updates.
| Behavior | Result |
|---|---|
changeMessage included | User sees notification |
changeMessage omitted | Silent background update |
Multiple fields with changeMessage | Summarized as "Pass was changed" |
Notifications are for time-sensitive information that requires immediate attention.
Limits and Restrictions
| Restriction | Details |
|---|---|
| Daily limit | ~20 notifications per pass (not officially documented) |
| Testing | Physical device only (Simulator does not register) |
| Environment | Production APNs only |
| Authentication token | Never change after pass creation |
Google Wallet
How It Works
Google Wallet notifications use the AddMessage API:
- Call AddMessage API with TEXTANDNOTIFY
- Google sends push notification
- User taps notification → opens pass
- Message displayed on back of pass
No web service required. No pass update required. Direct API call.
Message Types
| Type | Behavior |
|---|---|
TEXT_AND_NOTIFY | Sends push notification + adds message |
TEXT | Adds message silently (no notification) |
API Endpoint
POST https://walletobjects.googleapis.com/walletobjects/v1/{resourceType}/{resourceId}/addMessage
Resource types:
- loyaltyObject
- eventTicketObject
- offerObject
- giftCardObject
- genericObject
| Field | Required | Description |
|---|---|---|
header | Yes | Notification title |
body | Yes | Notification body |
id | Yes | Unique message identifier |
messageType | Yes | TEXT_AND_NOTIFY or TEXT |
Notification Limits
| Limit | Value |
|---|---|
| Notifications per 24 hours | 3 per pass |
| Exceeding limit | QuotaExceededException |
| Throttling | Google may throttle if spam detected |
Expiry Notifications
Google can automatically send notifications before pass expiration:
| Notification Type | Timing |
|---|---|
expiryNotification | 2 days before expiration |
upcomingNotification | 1 day before pass becomes valid |
Platform Comparison
Architecture
| Aspect | Apple Wallet | Google Wallet |
|---|---|---|
| Infrastructure | Your server + APNs | Google API only |
| Complexity | High (web service required) | Low (API call) |
| Pass update required | Yes | No |
| Real-time control | Yes (your server) | Limited (API quota) |
Notification Triggers
| Trigger | Apple Wallet | Google Wallet |
|---|---|---|
| Field value change | Yes (with changeMessage) | No (use AddMessage) |
| Arbitrary message | No | Yes (within limits) |
| Expiration reminder | Manual | Automatic (optional) |
| Location-based | Via relevantText | Via locations |
Best Practices
| Practice | Apple | |
|---|---|---|
| Max daily notifications | ~3 recommended | 3 enforced |
| Character length | <140 chars | <140 chars |
| Time-sensitive only | Required | Recommended |
| Marketing messages | Not allowed | Limited |
Common Mistakes
Sending empty push without pass change (Apple) — Device will fetch pass but find no changes
Exceeding Google's 3/day limit — Results in
QuotaExceededExceptionUsing sandbox APNs (Apple) — Wallet notifications only work in production
Forgetting changeMessage (Apple) — Update happens silently, user sees nothing
Sending identical messages (Google) — May be flagged as spam
Including marketing in Apple notifications — Violates guidelines
Not monitoring APNs feedback (Apple) — Invalid tokens accumulate
Long notification text — Truncated on lock screen and Apple Watch