We are reaching out to report a critical issue we are facing with Apple Push Notification Service (APNs) for our application. Since yesterday, push notifications have stopped working, and we are consistently encountering connection reset errors when attempting to connect to Apple’s push notification servers.
The issue specifically involves the following endpoints:
gateway.push.apple.com – 17.188.170.74
feedback.push.apple.com – 17.188.178.87
These connections were functioning properly until yesterday. No changes have been made on our end, and we have verified our server configurations.
We kindly request your assistance in investigating this matter. Please confirm whether there are any known issues or restrictions related to the above IPs or endpoints that could be affecting our service.
This issue is impacting our production environment and affecting user experience, so your prompt support would be greatly appreciated.
APNS
RSS for tagSend push notifications to Mac, iOS, iPadOS, tvOS devices through your app using the Apple Push Notifications service (APNs).
Posts under APNS tag
200 Posts
Selecting any option will automatically load the page
Post
Replies
Boosts
Views
Activity
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}
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?
It seems our company server is sending to Apple push service the push notifications that are supposed to be transferred to devices our app is installed on – but you it seems you are blocking the request
We can see traffic going out from our server side towards the apple gateway notification server using port 2195 and we can see that the traffic gets "server-rst" meaning that the apple gateway server kills the connection
You might need to whitelist our external IP's
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.
When performing the P12 certificate sending test, there was an error stating that authentication failed due to the remote party closing the transport stream. May I ask how to solve this?
This error has been continuously occurring for about 9 hours. We have not replaced the certificate, modified the server code, or changed the firewall policy. Some requests succeed, but many are timing out, with several timeouts occurring every minute. We are unable to find the cause. Please help.
APNS Exception io netty channel ConnecttimeException: Connection timed out
APNSOutboundHandler
api.push.apple.com/17.188.169.28:443
api.push.apple.com/(other ip):443
api.push.apple.com/(other ip):443
api.push.apple.com/(other ip):443
api.push.apple.com/(other ip):443
...
I am sending push notification using HTTP/2 to https://api.push.apple.com:443 api but I am getting Operation TimeOut error in response . Can someone help
Apple's push cannot receive information, use the open-source library JdSoft. Apple.Apns.Notifications
Because I am not familiar with it, I modified Tls12. Does anyone know how to modify this open-source library to achieve push functionality
apnsStream.AuthenticateAsClient(this.Host, this.certificates, System.Security.Authentication.SslProtocols.Tls12, false)
this is our code foe fetching the apnstoken - and registering for the FCM and snding it to our servers. - we are consistently getting apns == null
import 'dart:io';
import 'package:firebase_messaging/firebase_messaging.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_messaging/firebase_messaging.dart';
import 'package:solaris/services/fetch_deviceId.dart';
Future initializeFCM() async {
final FirebaseMessaging _firebaseMessaging = FirebaseMessaging.instance;
// Request notification permissions for iOS
final settings = await _firebaseMessaging.requestPermission();
print('Notifcation Permission Status: ${settings.authorizationStatus}');
String? apnsToken;
int retries = 0;
const int maxRetries = 60;
const Duration retryDelay = Duration(seconds: 2);
// Retry fetching the APNs token until it's available or max retries are reached
while (apnsToken == null && retries < maxRetries) {
print(retries);
apnsToken = await _firebaseMessaging.getAPNSToken();
if (apnsToken == null) {
await Future.delayed(retryDelay);
retries++;
}
}
if (apnsToken != null) {
// APNs token is available, proceed to get FCM token
String? fcmToken = await _firebaseMessaging.getToken();
if (fcmToken != null) {
// Register the device and token with your backend
await registerDeviceAndToken(fcmToken);
} else {
// Handle the case where FCM token is still null
print('FCM token is null.');
}
} else {
// Handle the case where APNs token is not available after retries
print('APNs token not available after retries.');
}
}
Future registerDeviceAndToken(String fcmToken) async {
//fcmToken = fcmToken;
print(fcmToken);
final user = FirebaseAuth.instance.currentUser;
if (user == null) {
print('❌ User not logged in');
return;
}
final deviceId = await DeviceInfoService.getUniqueDeviceId();
//final fcmToken = await FirebaseMessaging.instance.getToken();
print('📱 Device ID from register_fcm: $deviceId');
print('📩 FCM Token from mew getapnd function: $fcmToken');
if (deviceId == null || fcmToken == null) {
print('❌ Failed to get deviceId or fcmToken');
return;
}
final docRef = FirebaseFirestore.instance
.collection('master_users')
.doc(user.uid)
.collection('deviceId')
.doc(user.uid); // This document holds a map: { deviceId: fcmToken }
print(docRef);
try {
// Get current data, fallback to empty map
final snapshot = await docRef.get();
final data = snapshot.data() ?? <String, dynamic>{};
print(data);
// Update or add current deviceId key
data[deviceId] = fcmToken;
// Save updated map back to Firestore
await docRef.set(data);
print(data);
print('✅ Device ID and FCM token updated/stored under correct structure');
} catch (e) {
print('❌ Firestore write error: $e');
}
}
I have referred the provided link Establishing a connection to Apple Push Notification service (APNs). And wanted to highlight that although our APNs certificate is valid until 09 August 2025, we have been unable to send notifications since 22nd April 2025. The error we are encountering is:
"java.io.IOException: keystore password was incorrect".
After encountering the above APNs exception, we created a new APNs certificate, but unfortunately, we are still facing the same issue. We are receiving the following notification response, but the users are not receiving notifications on the iOS mobile application.
Message(Id=1; Token=9C105A434496F9C8E6A47819DAA4C402CF0C231F8219F22AD4FFBD5D0300D832;
Payload={"aps":{"alert":{"title":"Message from : ta785","body":"Sender Contact Number : 2341561726\nMessage : test"},"sound":"default"}})
We suspect this issue may be related to recent changes in the APNs certificate authority, specifically the transition to the USERTrust RSA Certification Authority. Given that we are still using a valid APNs certificate, we are unsure whether this transition has impacted our configuration or caused the issue.
Could you please guide us or provide support to troubleshoot this error? Any assistance in resolving this issue will be greatly appreciated.
So I submitted my app for TestFlight external testing and got this email:
ITMS-90078: Missing potentially required entitlement - Your app, or a library that’s included in your app, uses Apple Push Notification service (APNs) registration APIs, but the APS Environment Entitlement isn’t included in the app signature’s entitlements. If your app uses APNs, make sure the App ID is enabled for push notifications in Certificates, Identifiers & Profiles, sign the app with a distribution provisioning profile that includes the APS Environment Entitlement, and upload a new build to ensure that push notifications function as intended. For details, visit: https://developer.apple.com/documentation/usernotifications/registering-your-app-with-apns.
But here's the thing: everything this says is 100% bogus. My app uses no libraries and no push notification service registration APIs.
The term register is used in my app, because I use table view cell registrations. Could that be the cause of this bogus warning?
Dear Apple Developer Support,
I am currently developing an iOS application that uses push notifications with custom .caf audio and a Notification Service Extension.
I have implemented the extension to download and play a dynamic sound file from a remote sound_url. It works well when the app is in the foreground or background.
However, when the app is force-closed (swiped up from multitasking), the Notification Service Extension does not seem to run. As a result, the custom sound is not downloaded or played.
I would like to confirm:
Is it possible to trigger the Notification Service Extension when the app is killed?
If not, what is the correct way to play a custom .caf sound when the app is terminated? Should I preload and save the .caf file in App Group storage and reference it by name in the sound field?
Are there any best practices or limitations regarding push notification customization when the app is killed?
I appreciate your help in clarifying this issue. Thank you very much!
Best regards,
Phan Van Tung
Hi everyone,
I'm working on an app for parents and kids where parents can define screen time goals or restrict usage of certain app categories (like social media or games). If the kid follows those rules—for example, by using their device less or avoiding restricted categories—they would earn points or rewards in the app.
I’ve been exploring if the Apple Screen Time API allows developers to access this kind of data (like total screen time, app usage by category, etc.) so that I can track the kid’s behavior and reward them accordingly.
Is it possible to programmatically access this data and implement such a reward system within my app? If so, what’s the best way to get started or which APIs should I look into?
Thanks in advance for your help!
Hi Apple Support team,
I would like to inform you that we were receiving push notifications to all regions. Recently we were facing push notifications are not receiving to brazil region. For all other regions we are receiving. We are using same APSN certificate. Any region specific permissions do we need to add. Please let me know. Thanks.
PLATFORM AND VERSION: iOS
Development environment: Other: .net MAUI with vscode
Run-time configuration: iOS 18.1.1
DESCRIPTION OF PROBLEM
APNS notifications of apns-push-type pushtotalk sometimes stop arriving after switching networks.
STEPS TO REPRODUCE
We have created a simple app which can be used to deminstrate this issue. When you launch the app it displays the APNS token which you can then use fromn the Apple Push Console to manually send it PTT push notifications.
https://github.com/trampster/PttPushNotificationIssue
On an iPhone SE (we havn't been able to reproduce on our iPhone 11)
Start the APP to register for the APNS push notifications
Turn off the WiFi wait for 5 seconds
Attempt a push to the app manually using the Push Notifications Console (this should fail, which is fine)
Turn on Cellular and wait for it to connect
Attempt to push to the app manually using the Push Notifications Console
-> This fails, and all attempts to send an pushtotalk push notifications fail until the we switch network again.
Send a push while offline before connecting to the new network seems to make it happen more often but hard to tell for sure.
The results of the failed push in the console look like this:
Delivery LogLast updated: 30/01/25, 16:45:06 GMT+13 Refresh
30 Jan 2025, 16:45:03.661 GMT+13
received by APNS Server
30 Jan 2025, 16:45:03.662 GMT+13
discarded as device was offline
The device is actually very much online.
Switching networks again oftern makes things come right. But it doesn't seem to come right by itself.
We can't respond to network changes and do anything as the whole point of using push-to-talk push notifications is to wake up the app when in the background to answer a call, this means we are not running and therefore cannot respond to network changes to try to work arround this issue.
We are attempting to update our app to use the PTT framework, as it has been made clear that this will be required in a future iOS version as opposed to using the Unrestricted VoIP entitlement we are using for several features of our app.
However, the behavior of this framework poses some problems with implementing our app's functionality:
It is not possible to programmatically join a channel when the app is not in the foreground. This hinders our ability to implement the Automatically activate radio stream feature of our app, which allows users who have opted into this feature to immediately begin hearing live PTT audio from their agency following an incident alert. Having the app constantly "joined to a channel" and using the restoration delegate could potentially work, however this is not ideal as this would result in the PTT UI needing to be displayed at all times, even when no radio stream is activated.
We have a "Text to Speech" option that, when enabled, reads out the content of an incident alert after the alert sound has played. This currently happens by triggering an AVSpeechSynthesizer in the PushKit incoming push callback. It may be possible to render TTS audio on the fly in a Notification Service Extension and assign it as the notification's sound, if that is possible this is less of a problem.
We also use the PushKit callback to, again if the user has enabled it, activate a "Shake to Respond" feature, allowing a short period of time after receiving an incident alert in which the user can shake their device to indicate that they are responding to the incident. There does not appear to be any way to have the level of background execution required to implement this using an NSE, and this is of course beyond the scope of the PTT framework.
What options do we have to be able to continue to provide this functionality, without risk of it being disabled in a future iOS version?
Hello,
We are using the Firebase Admin SDK (firebase-admin framework) to send push notifications via Firebase Cloud Messaging (FCM) for Live Activity updates in our iOS app.
With the introduction of iOS 18, a new key "input-push-token": 1 has been added to the Live Activities push payload structure.
1) Can this new key ("input-push-token": 1) be used when sending payloads via FCM?
We noticed that FCM is still using the push update format introduced in iOS 17.2. Will FCM be updated to support the new push structure introduced with iOS 18? Or is the "input-push-token" feature only available when sending notifications via direct APNs?
2) We are concerned about the expiration of the Live Activity start push token.
If a user doesn't open the app for a long time, the token may expire, and this could result in failed updates. That’s why we are looking into the new "input-push-token" behavior in iOS 18.
Do you have any recommendations on how to manage or prevent token expiration?
Is there any official guidance on the lifespan of the Live Activity push tokens?
Will FCM support the delivery of start/update/end Live Activity actions even when the app is completely terminated?
We would highly appreciate any official clarification or roadmap regarding this. It would help us determine whether we should wait for FCM support or switch to sending notifications directly via APNs.
Thank you for your help!
Version: iOS 18.1 and later (works as expected on iOS 18.0 and earlier)
Area: SpringBoard / Notification Center / App Icon Rendering
Description: When changing the app's alternate icon using UIApplication.setAlternateIconName(_:completionHandler:), the icon is updated correctly on the Home Screen and App Switcher. However, in Notification Center, the old app icon is still shown for notifications, even after the change has completed. This issue only occurs on iOS 18.1 and later. In iOS 18.0 and earlier, Notification Center correctly reflects the updated icon.
- Steps to reproduce:
Create an iOS app with alternate app icons configured in the Info.plist.
Use UIApplication.shared.setAlternateIconName("IconName") to change the icon at runtime.
Send a notification.
Pull down Notification Center and observe the icon shown beside the notification.
- Expected Behavior:
Notification Center should reflect the updated (alternate) app icon immediately after the change.
- Actual Behavior:
Notification Center continues to display the old (primary) app icon. The new icon appears correctly on the Home Screen and App Switcher. Restarting the device does cause Notification Center to update and reflect the correct icon, which suggests a cache or refresh issue in SpringBoard or Notification Center.
- Notes:
Issue introduced in iOS 18.1; not present in 18.0.
Reproduces on both physical devices and simulators.
Occurs with both scheduled local notifications and remote notifications.
Restarting the device updates the Notification Center icon, but this is not a viable user-facing workaround.
Topic:
App & System Services
SubTopic:
Notifications
Tags:
Swift
APNS
User Notifications
Notification Center
When changing the app's alternate icon using UIApplication.setAlternateIconName(_:completionHandler:), the icon is updated correctly on the Home Screen and App Switcher. However, in Notification Center, the old app icon is still shown for notifications, even after the change has completed. Rebooting or change the device's language causes the correct icon to appear.
This issue only occurs on iOS 18.1 and later. In iOS 18.0 and earlier, Notification Center correctly reflects the updated icon.
Could you provide insights into how iOS caches notification icons and how we can force a refresh for all users?