Programming

registerForRemoteNotificationTypes is not supported in iOS 80 and later

27 September 2026 · 8 min read

registerForRemoteNotificationTypes is not supported in iOS 80 and later

If you’re wrestling with push notifications in older iOS projects, you’ve likely encountered the frustrating deprecation of registerForRemoteNotificationTypes:. This method, crucial for registering your app to receive push notifications in earlier versions of iOS, became obsolete in iOS 8.0 and later. Consequently, developers faced the challenge of adapting their code to the new, more granular system. This change required a shift in how applications request and handle user permissions for different types of notifications, impacting everything from user experience to backend infrastructure. Understanding the reasons behind this change and the proper migration paths is critical for maintaining functionality and providing a seamless experience for users on newer iOS versions. This article dives deep into why registerForRemoteNotificationTypes: is not supported in iOS 8.0 and later, and how to effectively transition to the modern alternatives.

Understanding the Deprecation of registerForRemoteNotificationTypes:

The deprecation of registerForRemoteNotificationTypes: in iOS 8.0 marked a significant turning point in how push notifications were handled. Apple’s decision stemmed from a desire to provide users with more control over the types of notifications they receive. The older method requested permission for all notification types (badge, sound, and alert) simultaneously, offering users a binary choice: either allow all or deny all. The new system, introduced with UIUserNotificationSettings and registerUserNotificationSettings:, allows developers to request permission for each notification type independently. This granular control empowers users to customize their notification preferences, enhancing user experience and potentially increasing the likelihood of users accepting notifications.

Furthermore, the previous approach lacked flexibility in handling different notification behaviors. Apple wanted to encourage best practices around notification management. The new APIs provide clearer separation of concerns and enable more sophisticated handling of notification registration and response. This change also aligns with Apple’s broader focus on user privacy and data control, ensuring that users are fully informed about the permissions they grant to apps. For example, a game might request permission for badge updates without requiring sound alerts, a scenario not easily achievable with the older method. According to Apple’s documentation, this updated approach promotes a more transparent and user-centric notification experience [Apple Documentation].

In essence, the move away from registerForRemoteNotificationTypes: was driven by the need for greater user control, enhanced flexibility, and improved privacy. Developers who have not migrated their code will encounter warnings and potential issues when targeting newer iOS versions. Migration ensures that your application remains compliant with Apple’s guidelines and delivers the best possible user experience.

Migrating to registerUserNotificationSettings: and registerForRemoteNotifications

Migrating from the deprecated method to the modern alternatives involves a few key steps. First, you need to replace the calls to registerForRemoteNotificationTypes: with the new UIUserNotificationSettings and registerUserNotificationSettings: methods. This requires creating a UIUserNotificationSettings object that specifies the desired notification types (badge, sound, alert). Then, you register these settings with the application using registerUserNotificationSettings:. After this, you call registerForRemoteNotifications to initiate the remote registration process with Apple’s Push Notification Service (APNs). This separation of concerns allows for more control over the notification request process.

Here’s a step-by-step guide to help you migrate your code:

  1. Create a UIUserNotificationSettings object specifying the desired notification types (e.g., badge, sound, alert).
  2. Register the UIUserNotificationSettings object with the application using registerUserNotificationSettings:.
  3. Call registerForRemoteNotifications to initiate the remote registration process.
  4. Implement the application:didRegisterForRemoteNotificationsWithDeviceToken: and application:didFailToRegisterForRemoteNotificationsWithError: delegate methods to handle the registration result.

Remember to handle the delegate methods appropriately. The application:didRegisterForRemoteNotificationsWithDeviceToken: method is called when registration is successful, providing you with the device token. The application:didFailToRegisterForRemoteNotificationsWithError: method is called if registration fails, allowing you to handle errors gracefully. Properly handling these delegate methods ensures a robust and reliable push notification implementation. Neglecting these steps can lead to silent failures and a poor user experience. This migration ensures your app leverages features available with the latest notification framework.

Handling User Permissions and Notification Types

One of the key advantages of the new notification system is the ability to handle user permissions and notification types independently. This allows you to tailor your notification requests to the specific needs of your application. For example, you might request permission for badge updates initially and then request permission for sound alerts later, based on user interaction or application context. This adaptive approach can improve user engagement and reduce the likelihood of users disabling notifications altogether. According to a study by Localytics, apps that request permissions contextually see a 20% higher opt-in rate [Localytics].

The UIUserNotificationType enum defines the available notification types (UIUserNotificationTypeBadge, UIUserNotificationTypeSound, UIUserNotificationTypeAlert). You can combine these types to request permission for multiple notification types simultaneously. However, it’s generally recommended to request permissions incrementally, providing users with a clear explanation of why each permission is needed. This transparency builds trust and encourages users to grant the necessary permissions. For example, a messaging app might initially request permission for alert notifications to inform users of new messages. Later, it might request permission for sound alerts to provide more immediate feedback.

Here are some key points to consider when handling user permissions:

  • Request permissions incrementally, providing context and justification for each request.
  • Handle the user’s response gracefully, adjusting your application’s behavior accordingly.
  • Respect the user’s preferences and avoid repeatedly prompting for permissions that have been denied.

Properly handling user permissions is crucial for creating a positive user experience and maximizing the effectiveness of your push notifications. By adopting a thoughtful and user-centric approach, you can increase engagement and build trust with your users.

Best Practices and Troubleshooting

When working with push notifications, several best practices can help ensure a smooth and reliable implementation. First, always test your push notification setup thoroughly, using both development and production environments. This helps identify any potential issues early on and prevents unexpected behavior in the live app. Second, monitor your push notification delivery rates and error logs to identify any problems with your APNs configuration or backend infrastructure. Third, keep your APNs certificates up to date to avoid interruptions in service. According to Firebase documentation, expired certificates are a common cause of push notification failures [Firebase].

If you encounter issues with push notifications, start by checking your APNs certificates, device token, and payload format. Ensure that your device token is valid and that your payload adheres to the APNs specification. Also, verify that your app is properly configured to receive remote notifications in the Xcode project settings. Enable the “Push Notifications” capability in the “Signing & Capabilities” tab. This step is often overlooked but is essential for enabling push notification functionality.

Here are some common troubleshooting tips:

  • Verify your APNs certificates are valid and correctly configured.
  • Check your device token for validity.
  • Ensure your push notification payload is correctly formatted JSON.
  • Verify the “Push Notifications” capability is enabled in your Xcode project.

By following these best practices and troubleshooting tips, you can minimize the risk of encountering issues with push notifications and ensure a reliable and engaging user experience. Remember to consult Apple’s documentation and online forums for additional guidance and support. The following paragraph is optimized to be a featured snippet:

A common issue is that registerForRemoteNotificationTypes: is not supported in iOS 8.0 and later because Apple replaced it with registerUserNotificationSettings: and registerForRemoteNotifications. The new method requires you to specify which notification types you want to request (badge, sound, alert) and allows users to grant or deny permission for each type individually. This change gives users more control over their notification preferences and improves the overall user experience.

Infographic here: Comparison of old vs. new push notification registration process.
FAQ: Common Questions About Push Notifications in iOS -----------------------------------------------------
Why did Apple deprecate `registerForRemoteNotificationTypes:`?
Apple deprecated `registerForRemoteNotificationTypes:` to provide users with more granular control over notification permissions and to improve the overall user experience.
What are the alternatives to `registerForRemoteNotificationTypes:`?
The alternatives are `registerUserNotificationSettings:` and `registerForRemoteNotifications`. These methods allow you to request specific notification types (badge, sound, alert) and handle user permissions more effectively.
How do I handle user permissions for push notifications in iOS 8.0 and later?
Use the `UIUserNotificationSettings` class to specify the desired notification types and register these settings with the application using `registerUserNotificationSettings:`. Then, call `registerForRemoteNotifications` to initiate the remote registration process.
What should I do if my push notifications are not working?
Check your APNs certificates, device token, and payload format. Ensure that your app is properly configured to receive remote notifications in the Xcode project settings.
Moving away from the deprecated `registerForRemoteNotificationTypes:` method requires a bit of initial effort, but it ultimately leads to a more robust and user-friendly notification system. Embracing the new APIs and understanding the underlying principles will allow you to deliver engaging and relevant notifications to your users, enhancing their overall experience with your app. Don't let those legacy calls hold you back – update your code and unlock the full potential of iOS push notifications. Explore related topics such as background modes and silent notifications to further optimize your app's notification strategy.

Question & Answer :
When trying to register for push notifications under iOS 8.x:

application.registerForRemoteNotificationTypes(UIRemoteNotificationType.Alert | UIRemoteNotificationType.Badge | UIRemoteNotificationType.Sound) 

I get the following error:

registerForRemoteNotificationTypes: is not supported in iOS 8.0 and later. 

Any ideas what is the new way of doing it? It does work when I run this Swift app on iOS 7.x.

EDIT

On iOS 7.x when I include the conditional code I get (either SystemVersion conditional or #if __IPHONE_OS_VERSION_MAX_ALLOWED >= 80000)

dyld: Symbol not found: _OBJC_CLASS_$_UIUserNotificationSettings 

For iOS<10

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions { //-- Set Notification if ([application respondsToSelector:@selector(isRegisteredForRemoteNotifications)]) { // iOS 8 Notifications [application registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeSound | UIUserNotificationTypeAlert | UIUserNotificationTypeBadge) categories:nil]]; [application registerForRemoteNotifications]; } else { // iOS < 8 Notifications [application registerForRemoteNotificationTypes: (UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeSound)]; } //--- your custom code return YES; } 

For iOS10

https://stackoverflow.com/a/39383027/3560390