Notifications

RSS for tag

Learn about the technical aspects of notification delivery on device, including notification types, priorities, and notification center management.

Notifications Documentation

Posts under Notifications subtopic

Post

Replies

Boosts

Views

Activity

Unable to Receive APNs Device Token in Unity iOS App Despite Proper Configuration
I’m currently developing an iOS app built in Unity, exported to Xcode for signing and deployment. The app needs to register for Apple Push Notifications (APNs) to retrieve the device token and register it with a backend service (PlayFab). Despite enabling the required capabilities and entitlements, the app never receives a device token — the authorization request succeeds, but the token remains empty (req.DeviceToken is null in Unity). I’ve confirmed that the issue occurs before PlayFab or Firebase are involved, meaning the app never receives the token from Apple Push Notification service (APNs) itself. The Unity script I am using is: #if UNITY_IOS using UnityEngine; using Unity.Notifications.iOS; using PlayFab; using PlayFab.ClientModels; using System.Collections; using System; public class iOSPushInit : MonoBehaviour { private const int MaxRetries = 5; private const float RetryDelay = 2f; // seconds void Start() { Debug.Log("🛠 iOSPushInitDebug starting..."); StartCoroutine(RequestAuthorizationAndRegister()); } private IEnumerator RequestAuthorizationAndRegister() { // Request Alert + Badge + Sound permissions and register for remote notifications var authOptions = AuthorizationOption.Alert | AuthorizationOption.Badge | AuthorizationOption.Sound; using (var req = new AuthorizationRequest(authOptions, true)) { Debug.Log("⏳ Waiting for user authorization..."); while (!req.IsFinished) { yield return null; } Debug.Log($"🔔 Authorization finished at {DateTime.Now}: granted={req.Granted}, error={req.Error}"); if (!req.Granted) { Debug.LogError("❌ User denied notification permissions! Cannot get APNs token."); yield break; } // Authorization granted → check for device token int attempt = 0; string token = req.DeviceToken; Debug.Log($"req.DeviceToken: {req.DeviceToken}"); while (string.IsNullOrEmpty(token) && attempt < MaxRetries) { attempt++; Debug.Log($"ℹ️ APNs token not available yet. Attempt {attempt}/{MaxRetries}. Waiting {RetryDelay} seconds..."); yield return new WaitForSeconds(RetryDelay); token = req.DeviceToken; } if (string.IsNullOrEmpty(token)) { Debug.LogWarning("⚠️ APNs token still null after multiple attempts. Try again on next app launch."); yield break; } Debug.Log($"📱 APNs Token acquired at {DateTime.Now}: {token}"); // Register with PlayFab var request = new RegisterForIOSPushNotificationRequest { DeviceToken = token, SendPushNotificationConfirmation = false }; PlayFabClientAPI.RegisterForIOSPushNotification(request, result => Debug.Log("✅ APNs token successfully registered with PlayFab."), error => Debug.LogError("❌ Failed to register APNs token with PlayFab: " + error.GenerateErrorReport())); } } } #endif When running on a real device (not simulator), the following is logged in Xcode: 🔔 Authorization finished: granted=True, error= ℹ️ APNs token not yet available. Try again on next app launch. In the Xcode console, I do not see the expected APNs registration message: [Device] Registered for remote notifications with token: <...> Environment Details: Engine: Unity 6000.2.6f2 Notifications package: com.unity.mobile.notifications 2.4.2 Xcode: 16.4 (16F6) iOS Device: iPhone 12, iOS 26.0.1 Testing Method: Building directly from Unity → Xcode → real device Signing mode: Automatic (with correct Team selected) Certificates in account: Apple Development certificate (active) Apple Distribution certificate (active) Provisioning Profile: Type: App Store (also tested Development profile) Enabled Capabilities: Push Notifications, In-App Purchase App ID Capabilities: Push Notifications: Enabled Development SSL certificate: Present Production SSL certificate: Not generated (yet) Background Modes -> remote notifications What I Have Verified: ✅ Push Notifications capability is enabled in the Xcode target (not UnityFramework). ✅ Team and Bundle Identifier match my Apple Developer App ID. ✅ App ID has Push Notifications enabled in the Developer Portal. ✅ Tested on a real iOS device with working internet. ✅ Rebuilt and reinstalled app after enabling Push Notifications. ✅ Authorization dialog appears and permission is granted by user. How can I resolve this issue?
1
0
79
Jan ’26
Notifications not working
I’m receiving notifications from all third-party apps that I use however, most of the time there is no sound or haptics with the notification. In some cases, very seldomly I will receive a sound when a notification comes in, but that’s only with one of the many third-party apps that I use. I’ve spoken to Apple about this when this whole problem started during an update that you guys rolled out sometime between September and November 2024. They blamed it on the app programmers but I think at this point we all know that it’s Apple’s inability to accept that the problem is on their end. I never had problems receiving notifications from any of the apps prior to that. I guess my question is will Apple ever fix this or are they going to sweep it under the rug and pretend like it doesn’t exist?
1
0
249
Jul ’25
Questions for AlarmKit
We are so interested in AlarmKit which is presented at WWDC25. While we planning our app using AlarmKit, We had a few questions come to mind and were hoping you could provide some clarity. Please excuse the rather long list of questions, as we don't currently have a device available to test these features ourselves. System Actions Related Is there a limit to the number of alarms that can be scheduled using AlarmKit? Are alarms scheduled with AlarmKit persistent across device reboots? When an alarm is dismissed (either by swiping or pressing the power button), can our app detect this action and execute code in response? Can we control the behavior of the physical Lock Screen buttons when an AlarmKit alarm is active, for instance, to trigger a snooze action? Does AlarmKit function correctly during Do Not Disturb or Low Power Mode? What is the expected behavior when an alarm from our app (using AlarmKit) overlaps with an alarm from another app that also uses AlarmKit? Which one is going to get its priority? Thank you for your help. Sincerely
1
0
246
Aug ’25
Push notification volume for custom sound
Is there a way to configure the APNS notification sound volume to be louder? I am implementing some custom sounds(narrative sentences) for APNS, it does play the custom sound, but the volume of the custom sound is not loud enough even though I had set the device's volume and "RingTone and Alerts" volume to max. I tried to amplify the custom sound file, it does play louder but the result is minimum if I want to maintain the quality of the sound without it been distorted. I tried to use Notification Service Extension, AVAudioPlayer and AVAudioSession to play the sound, it does play louder in max volume compare with relying on default sound payload in APNS, but the problem is AVAudioPlayer and AVAudioSession do not seems to be usable when the application is in background or killed state, is there any other alternative I could use?
3
0
197
Apr ’25
Game Center and Push Notifications
I have used the Push Notifications Console and verify that the test notification reaches my device (it says "not necessarily the app"). However, GameCenter notifications are not reaching the app. When one device passes the turn, the turn is successfully passed as seen in the Matchmaker VC. However, the app does not get the turn pass notification whether or not it is running. No banner appears if the app is not running (but it does when using the Push Notifications Console). Please advise.
1
0
142
Jan ’26
Silent Push Notification Handling Behavior
I'm observing that when a silent push notification is sent to our app, is is started up in the background for 30 seconds before being suspended until the app is launched by the user. This causes data to persist from the silent push notification to the user app launch. I couldn't find documentation on this behavior for silent push notifications, and was wondering if it's possible to have the app terminate after handling the silent push notification. Is there documentation on the general flow of silent push notifications as well? I'm able to handle the edge cases if the app has to be suspended until user launch, but just want to confirm that this is the expected behavior before I go about handling it this way.
1
0
118
Apr ’25
Push notifications don't deliver when device is idle on iOS 18.7 and 26.0
There's a list of bug reports: FB19778882 FB19813796 FB19852724 FB19767262 FB20378888 FB20379383 FB20394663 Me and many other users have issue with push notifications. To reproduce this you should do this steps: Lock iPhone and make it idle for 10+ minutes; Send any message from other device via third-party app that uses push notifications (WhatsApp, Telegram and etc.); After few attempts you can see, that messages don't deliver. They delivers immediately when I unlock iPhone or go to the app. This bug reproduces on iOS 18.7 and 27. As I think iPhone goes to deep sleep after 10+ minutes after it locked and don't get push notifications. I've tried everything: many of settings, DFU without backup, but nothing helps to resolve this issue. Pay attention, please, cause this bug is very annoying and present on iOS 18.7 (that is the last for many devices) and latest iOS 26. Thanks!
1
0
466
Sep ’25
Audio Session in Notification Service Extension
Is there anyway that I could use AVAudioSession, AVAudioPlayer or anything similar in Notification Service Extension? I am trying to implement Audio Playback in the Notification Service Extension to play specific audio file when receiving Notification regardless the app state(foreground, background or killed), but I am not able to activate audio session in Notification Service Extension. NSError *sessionError = nil; BOOL success = [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:&sessionError]; success = [[AVAudioSession sharedInstance] setActive:YES error:&sessionError]; if (!success) { NSLog(@"Error activating audio session: %@", sessionError); } Below is the error that I got when I am trying to run the code above in Notification Service Extension. Error Domain=NSOSStatusErrorDomain Code=561015905 "Session activation failed" UserInfo={NSLocalizedDescription=Session activation failed}
1
0
151
May ’25
Reliability and latency for Appsore server side notifications v2
Hi Team, We are building oru subscrption app and want to rely on server side purchase / subscription related notifications. We went through https://developer.apple.com/documentation/appstoreservernotifications/enabling-app-store-server-notifications We wanted to understand the reliability and latency for server side notifciations provided by Appstore.
0
0
73
Nov ’25
Notification Service Extension is killed during startup
We are observing an issue where the iOS Notification Service Extension (NSE) is terminated by the system during startup, before either didReceive(_:withContentHandler:) or serviceExtensionTimeWillExpire(_:) is invoked. When this occurs, the notification is delivered without modification (for example, an encrypted payload is shown to the user). System logs frequently contain the message “Extension will be killed because it used its runtime in starting up”. During testing, we observed that CPU-intensive operations or heavy initialization performed early in the extension lifecycle — especially inside init() or directly on the main thread in didReceive often cause the system to kill the NSE almost immediately. These terminations happen significantly earlier than the commonly observed ~30-second execution window where the OS normally invokes serviceExtensionTimeWillExpire(_:) before ending the extension. When these early terminations occur, there is no call to the expiry handler, and the process appears to be forcefully shut down. Moving the same operations to a background thread changes the behavior: the extension eventually expires around the usual 30-second window, after which the OS calls serviceExtensionTimeWillExpire(_:). We also observed that memory usage plays a role in early termination. During tests involving large memory allocations, the system consistently killed the extension once memory consumption exceeded a certain threshold (in our measurements, this occurred around 150–180 MB). Again, unlike normal time-based expiration, the system did not call the expiry handler and no crash report was produced. Since Apple’s documentation does not specify concrete CPU, memory, or startup-cost constraints for Notification Service Extensions or any other extensions beyond the general execution limit, we are seeking clarification and best-practice guidance on expected behaviors, particularly around initialization cost and the differences between startup termination. NSE Setup: class NotificationService: UNNotificationServiceExtension { static var notificationContentHandler: ((UNNotificationContent) -> Void)? static var notificationContent: UNMutableNotificationContent? static var shoudLoop = true override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) { NotificationService.notificationContentHandler = contentHandler NotificationService.notificationContent = request.content.mutableCopy() as? UNMutableNotificationContent NotificationService.notificationContent!.title = "Weekly meeting" NotificationService.notificationContent!.body = "Updated inside didReceive" // Failing scenarios } override func serviceExtensionTimeWillExpire() { NotificationService.shoudLoop = false guard let handler = NotificationService.notificationContentHandler, let content = NotificationService.notificationContent else { return } content.body = "Updated inside serviceExtensionTimeWillExpire()" handler(content) } }
2
0
187
Nov ’25
Alarm.Schedule.Relative gets scheduled to next day if too close?
Hi there, Thank you for the framework 🙏 if I use Alarm.Schedule.Relative with Alarm.Schedule.Relative.Time(hour: hour, minute: minute) and Alarm.Schedule.Relative.Recurrence.never it seems like there is some (odd?) limit where alarm will get scheduled to next day if too close? For example, lets say the current time is 12:00 PM, if I schedule alarm for 12:02 PM, it will schedule it for next day, while if I do 12:05 PM it will work as expected. Is that expected? If yes, what's the behavior and is that documented anywhere? I would expect any alarm thats scheduled in the future to fire for the current day (maybe if it's only 1 minute it gets tricky). One problem is also that even if the framework says an alarm is scheduled, I don't have access to the "next alarm date"? I wish I did as otherwise I have to compute it (by "guessing" the AlarmKit calculation) if I want to do anything with that date. Honestly, sometimes I think I am just going crazy when the alarm doesn't fire, but there SEEMS to be some odd behavior around this? (of course, feel free to correct me on anything - I could be missing documentation or not understanding something)
3
0
171
Aug ’25