The iOS documentation shows notification actions buttons with the text center aligned: https://developer.apple.com/documentation/usernotifications/declaring-your-actionable-notification-types
But there's no apparent way for an app to control this. The buttons are controlled and rendered by the system and the text is always left aligned.
Is there some way to get the text center aligned?
Notifications
RSS for tagLearn about the technical aspects of notification delivery on device, including notification types, priorities, and notification center management.
Selecting any option will automatically load the page
Post
Replies
Boosts
Views
Activity
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?
After porting code to Swift 6 (Xcode 16.4), I get a consistent crash (on simulator) when using UNUserNotificationServiceConnection
It seems (searching on the web) that others have met the same issue. Is it a known Swift6 bug ? Or am I misusing UNUserNotification ?
I do not have the crash when compiling on Xcode 26 ß5, which hints at an issue in Xcode 16.4.
Crash log:
Thread 10 Queue : com.apple.usernotifications.UNUserNotificationServiceConnection.call-out (serial)
As far as I can tell, it seems error is when calling
nonisolated func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void)
I had to declare non isolated to solve a compiler error.
Main actor-isolated instance method 'userNotificationCenter(_:didReceive:withCompletionHandler:)' cannot be used to satisfy nonisolated requirement from protocol 'UNUserNotificationCenterDelegate'
I was advised to:
Add 'nonisolated' to 'userNotificationCenter(_:didReceive:withCompletionHandler:)' to make this instance method not isolated to the actor
I filed a bug report: Aug 10, 2025 at 2:43 PM – FB19519575
Topic:
App & System Services
SubTopic:
Notifications
Tags:
Swift
Xcode
Notification Center
User Notifications
Hello, we have recently started signing and building our applications using Xcode 16.3. Since we made this change, we’ve noticed that the applications have stopped receiving silent push notifications (content-available: 1) when they are distributed via TestFlight or the App Store, even though we haven’t changed anything in the way these notifications are sent.
As I mentioned, this started happening after migrating our project from Xcode 15 to Xcode 16.3. Regular push notifications are still working as expected, but silent ones are not being received by the apps.
We are desperate because we rely on these silent notifications to inform the apps of updates, and we haven’t been able to identify the root cause of the issue.
Does iOS provide a callback when a notification is manually removed from the notification tray ?
Could anyone play a sound from the Library/Sounds directory using alarmkit? Same file can play in app bundle, but not available in Library/Sounds directory. Is this by design?
Topic:
App & System Services
SubTopic:
Notifications
Push-notification token is properly requested and displayed from the iOS simulator / xcode, but not from the release in the AppStore... Both popups for permission (push-notifications and critical alert) appear and can be confirmed, but no callback takes place...
Topic:
App & System Services
SubTopic:
Notifications
I have a working AlarmKit app, but I've noticed that after any iOS update (e.g. the 26.0.1 update from a few days ago), my scheduled alarms seem to lose their UI strings, so instead of the Stop button saying "Stop", it says "alarm_ui_stop_button" (which is my localization key for the button text). If I delete the alarm and re-add it, then it works again... until the next software update.
It seems like OS updates are interfering with the link between scheduled alarms and app localization strings, which I believe are dynamically looked up at alarm time (not at configuration time).
I am settings the strings in the standard way like this:
AlarmManager.AlarmConfiguration(
schedule: .fixed(date),
attributes: AlarmAttributes<SDAlarmMetadata>(
presentation: AlarmPresentation(
alert: AlarmPresentation.Alert(
title: "alarm_ui_title",
stopButton: .init(text: "alarm_ui_stop_button", textColor: .yellow, systemImageName: "xmark")
)
),
metadata: SDAlarmMetadata(title: title, subtitle: subtitle),
tintColor: .yellow
),
sound: .default
)
Has anyone else noticed this or found a workaround? I guess I could use localization keys that are identical to the desired text, but this would only work for one language.
Topic:
App & System Services
SubTopic:
Notifications
We have a case when we send 8 push notifications more or less simultaneously over 1 HTTP 2.0 connection. Using .NET Core 8
Sometimes some of them fail with a strange message:
System.Net.Http.HttpRequestException: The response ended prematurely while waiting for the next frame from the server. (ResponseEnded)
---> System.Net.Http.HttpIOException: The response ended prematurely while waiting for the next frame from the server. (ResponseEnded)
at System.Net.Http.Http2Connection.ThrowRequestAborted(Exception innerException)
at System.Net.Http.Http2Connection.Http2Stream.TryEnsureHeaders()
at System.Net.Http.Http2Connection.Http2Stream.ReadResponseHeadersAsync(CancellationToken cancellationToken)
at System.Net.Http.Http2Connection.SendAsync(HttpRequestMessage request, Boolean async, CancellationToken cancellationToken)
--- End of inner exception stack trace ---
at System.Net.Http.Http2Connection.SendAsync(HttpRequestMessage request, Boolean async, CancellationToken cancellationToken)
at System.Net.Http.HttpConnectionPool.SendWithVersionDetectionAndRetryAsync(HttpRequestMessage request, Boolean async, Boolean doRequestAuth, CancellationToken cancellationToken)
at System.Net.Http.RedirectHandler.SendAsync(HttpRequestMessage request, Boolean async, CancellationToken cancellationToken)
at System.Net.Http.DecompressionHandler.SendAsync(HttpRequestMessage request, Boolean async, CancellationToken cancellationToken)
at Microsoft.Extensions.Http.Logging.HttpClientLoggerHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
We noticed that failure is always accompanied with a huge delay (~500ms) comparing to success (~20ms).
Also some of the burst messages are sent successfully (sometimes 2-4 of them)
What can we do about it?
I created an app. One if its functionalities is receive Remote Notification in the background, while app is monitoring Significant Location Changes (SLC). This functionality worked fine. I was receiving these notifications correctly. Sometimes instantly, sometime with small or large delay.
And then I send the app for review. It was rejected with 3 remarks:
The app or metadata includes information about third-party platforms that may not be relevant for App Store users, who are focused on experiences offered by the app itself (I wrote that app communication works both for iOS and Android.)
The app declares support for audio in the UIBackgroundModes key in your Info.plist but we are unable to locate any features that require persistent audio.
EULA (End User License Agreement) is missing for in-app purchases.
After the rejection the app is no longer receiving these notifications. They are there, since the app receives them, when I open app, or significant location change is detected. It also works, when I run the app directly from Xcode (in debug mode), not from TestFlight nor in Sandbox.
It seem to me like Apple somehow spoiled my background capabilities on purpose or accidentally. Is it possible? What can I do with it? Is it the case that I should just fix the review remarks and send the app back to review, and once the app passes it, it will work again? Or should I not count on it? Any suggestions? I asked Apple using:
https://developer.apple.com/contact/topic/#!/topic/select
but so far no response.
Topic:
App & System Services
SubTopic:
Notifications
Tags:
App Review
User Notifications
Background Tasks
Maps and Location
We have implemented Carplay in our voip based project and in this we have implemented Incoming call and chat notification feature for Carplay.
For Carplay we implemented siri.
Siri Object donated Successfully in Notification service Extension when notification didreceive method called.
Donation Code :-
func donateIncomingMessageIntent(sender: String, senderId: String, message: String, messageId: String, userInfo: [AnyHashable: Any],destination:String) {
// Create proper name components
clearAllinteraction()
var nameComponents = PersonNameComponents()
nameComponents.givenName = sender
//unknown
let senderPerson = INPerson(
personHandle: INPersonHandle(value: senderId, type: .unknown),
nameComponents: nameComponents,
displayName: sender,
image: nil,
contactIdentifier: senderId,
customIdentifier: "sender_\(senderId)"
)
let recipientPerson = INPerson(
personHandle: INPersonHandle(value: "me@example.com", type: .emailAddress),
nameComponents: nil,
displayName: "Me",
image: nil,
contactIdentifier: "me_id",
customIdentifier: "user_id"
)
let inMessage = INMessage(
identifier: messageId,
conversationIdentifier: "conversation_\(senderId)",
content: message,
dateSent: Date(),
sender: senderPerson,
recipients: [recipientPerson],
groupName: nil,
messageType: .text
)
let intent = INSearchForMessagesIntent(
recipients: [recipientPerson],
senders: [senderPerson],
searchTerms: [message],
attributes: .unread,
dateTime: nil,
identifiers: [messageId],
notificationIdentifiers: [messageId],
groupNames: ["Messages"]
)
let interaction = INInteraction(intent: intent, response: nil)
interaction.identifier = "message_\(messageId)"
interaction.direction = .incoming // Add direction
DispatchQueue.global(qos: .userInitiated).async {
interaction.donate { error in
if let error = error {
print("❌ Failed to donate INSearchForMessagesIntent: \(error.localizedDescription)")
} else {
print("✅ Donated INSearchForMessagesIntent successfully!")
let intentData: [String: Any] = [
"senderName": sender,
"senderId": senderId,
"message": message,
"messageId": messageId,
"timestamp": Date().timeIntervalSince1970,
"conversationId": "conversation_\(senderId)", // Add conversationId
"destination":destination
]
let defaults = UserDefaults(suiteName: "group.com.chatapp") // 🔁 Use your App Group ID
defaults?.removeObject(forKey: "lastCarPlayIntentData")
defaults?.set(intentData, forKey: "lastCarPlayIntentData")
defaults?.synchronize()
}
}
}
}
Here SenderID is like 3000@abc,2000@abc etc.
In siri ,When we handle INSearchForMessagesIntent at that time all data getting from Userdefaults because without Userdefaults INSearchForMessagesIntent value nil.
Even we enabled announcement using .allowAnnouncement.
We also tried to save same sender in contact Book because sometime siri search contact and not found then may be raise this type of issue.
So we need code level support for read incoming message in carplay when notification comes.
Thank you.
How do i add the red bubble badge notification on the app for unread in app messages
Topic:
App & System Services
SubTopic:
Notifications
Hello. I'm currently implementing Apple Notification v2 to prepare for refunds for in-app purchases, but I'm not receiving requests from Apple servers to my backend server.
I've applied HTTPS (TLS 1.2) and correctly registered production/sandbox notification URLs on App Store Connect.
After requesting a test notification, when I check the status of testNotificationToken, I receive an UNSUCCESSFUL_HTTP_RESPONSE_CODE as follows:
{"signedPayload":"......":[{"atteptDate":1752128001970,"sendAttemptResult":"UNSUCCESSFUL_HTTP_RESPONSE_CODE"}]}
The endpoint for receiving notifications is set to accept POST requests with application/json format, and it responds with 200 (OK) without any content. However, Apple notifications are not coming through.
Could anyone help me with this issue?
Topic:
App & System Services
SubTopic:
Notifications
We are currently developing a WebAPI service that uses APNs (HTTP/2) to send push notifications to iOS devices.
(Using PushSharp's HTTP/2 support)
The WebAPI service is running on IIS using .net framework 4.8 and c#.
The connection to APNs is always maintained, and the connection is checked every 30 minutes using a dummy token Ping.
KeepAlivePeriod = 30 minutes and KeepAliveRetryPeriod = 10 seconds have also been set.
However, the following issues are occurring.
Although the Ping sent immediately before was successful, a TimeoutException occurs in the notification request sent a few minutes later.
There is no explicit disconnection notification from APNs, and the connection appears to be silently disconnected.
Once a TimeoutException occurs, it occurs frequently afterwards.
Below is an excerpt from the log.
Apple Notification Failed for some unknown reason 1-1: One or more errors occurred.
Apple Notification Failed for some unknown reason 1-2:System.TimeoutException: The operation timed out.
In light of this issue, I would like to be advised on the following two points.
Are there any official specifications regarding the lifecycle and expiration date of APNs HTTP/2 connections?
Even if pings are sent periodically, is there a timeout or other setting that disables the connection on the APNs side?
What are the conditions that would cause APNs to silently terminate a connection?
For example, could this be due to inactivity, TLS restrictions, network maintenance, etc.?
If you have any official documentation or technical guidelines to improve the reliability of this system, we would appreciate it if you could share them with us.
Thank you in advance.
I dont want my server to be spammed. Currently I am only in payment-related notifs (eg: user successfully renewed his subscription, user didnt successfully renew his subscriptions, ..)
Where can I set that?
Topic:
App & System Services
SubTopic:
Notifications
Hi all,
I have a React web app that we use as a Progressive Web App (PWA). We currently:
Use PWA Builder to package it for Android and iOS
Host the app on a secure HTTPS URL
Use Firebase Cloud Messaging (FCM) for push notifications (working on Android)
However, on iOS, we are unable to get push notifications to work. I understand that PWAs on iOS have limited push support (Safari only, and not through WebView). So I explored using Capacitor, but:
Capacitor can load a server.url pointing to our hosted app (great for reuse), but push notifications don’t work
If we build the web app locally (npm run build) and embed it in the native iOS shell via Capacitor, push works
We would prefer not to fully merge our authentication and main app UIs if avoidable
Questions:
Is there any approved way to enable push notifications in an iOS .ipa built from a hosted web app (URL) using PWA Builder?
If not, is embedding the web assets locally the only Apple-approved way to get push support?
Are there any best practices or native plugin recommendations (e.g., APNs or FCM) for handling push notifications in iOS app?
Thanks in advance for any guidance. 🙏
Let me know if more technical details would help.
Our team also received this email regarding the APNS. I don't know if I need to do something or not, since I haven't found any information in SAP Forums either.
Our app uses the SAP Mobile Services push notifications.
If any of you know any information about this, please let me know.
Hello,
We are trying to implement Actionable Notifications on iOS via Remote Notifications.
According to Apple’s official documentation (Declaring Your Actionable Notification Types),
it is recommended to register notification categories at launch time.
However, in our use case, the number of buttons and their actions in the Actionable Notification are determined at the time of the Remote Notification request.
This means that we cannot predefine the categories at app launch but need to dynamically configure them based on the payload of the Remote Notification.
Our Approach
We are considering setting aps.mutable-content = 1 and using Notification Service Extension to modify the categoryIdentifier dynamically.
Below is the JSON payload we plan to use for Remote Notifications:
{
"aps": {
"alert": {
"title": "New Message Received!",
"body": "Check out the details."
},
"category": "DYNAMIC_CATEGORY",
"mutable-content": 1
},
"categoryData": {
"id": "DYNAMIC_CATEGORY",
"actions": [
{
"id": "REPLY_ACTION",
"title": "Reply",
"options": ["foreground"]
},
{
"id": "DELETE_ACTION",
"title": "Delete",
"options": ["destructive"]
}
]
}
}
Questions:
Can we dynamically configure Actionable Notifications based on the Remote Notification payload?
If we set categoryIdentifier in Notification Service Extension’s didReceive(_:withContentHandler:), will users still see the correct action buttons even if the app is terminated?
What is the recommended approach to dynamically configure Actionable Notifications at the time of receiving the Remote Notification, rather than at app launch?
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?
Topic:
App & System Services
SubTopic:
Notifications
Hi All,
im working on a project to send a push notification in CarPlay.
Current accepted by apple entitlements is driving.
Are custom actions / buttons allowed/supported in CarPlay notifications?
Topic:
App & System Services
SubTopic:
Notifications
Tags:
CarPlay
Notification Center
User Notifications