According to the documentation, the character limit is around 4000 (4kB minus some other things in the payload, such as the device token). However, not all 4000 characters will be shown to the user; it will depend on whether the notification is shown as an alert or banner, and if it's shown in the notification center, on the lock screen or when the iPhone is actively used. There are two things that help:
- Keep your message as short as possible, and invite users to open the app if they need to read more.
- Test your messages and see how they are truncated in various situations. Sometimes, the intention of the message is almost completely lost; sometimes, it will only be a very minor annoyance.
title key in the APNS payload was introduced in iOS 8.2, according to table 9.2 in the documentation. So you should be safe if you're aiming for iOS 9.0 and up.
You should note that iOS 10 introduced Rich Notifications, which enables all kinds of formatting, images and videos to be shown when the user interacts with your notification (even when not actually opening the application).
: if you're using a legacy library to send push notifications, the limit is half of that, so around 2000 characters.