How can I test Apple Push Notification Service without an iPhone?
Solution 1
Testing push notifications using the Xcode 11.4 iOS Simulator
As of Xcode 11.4, it is now possible to simulate push notifications by dragging and dropping an .apns
file onto the iOS simulator. The Xcode 11.4 release notes have the following to say about the new feature:
Simulator supports simulating remote push notifications, including background content fetch notifications. In Simulator, drag and drop an APNs file onto the target simulator. The file must be a JSON file with a valid Apple Push Notification Service payload, including the “aps” key. It must also contain a top-level “Simulator Target Bundle” with a string value matching the target application‘s bundle identifier.
simctl
also supports sending simulated push notifications. If the file contains “Simulator Target Bundle” the bundle identifier is not required, otherwise you must provide it as an argument (8164566):
xcrun simctl push <device> com.example.my-app ExamplePush.apns
Example
Here is an example for such an .apns
file, targeted towards the system settings app:
{
"Simulator Target Bundle": "com.apple.Preferences",
"aps": {
"alert": "This is a simulated notification!",
"badge": 3,
"sound": "default"
}
}
Dragging and dropping this onto the target simulator will present the notification and set the badge:
Now, to use this for debugging purposes, you only have to change the Simulator Target Bundle
to your own app's identifier and adjust the payload to your debugging needs!
Solution 2
This answer is outdated. As of 2020 / Xcode 11.4 it's now possible to test push notifications in the simulator
See this full explanation in an answer below
Sorry to say, but you'll need to find some hardware to test this functionality.
Push notifications are not available in the simulator. They require a provisioning profile from iTunes Connect, and thus are required to be installed on a device. That also means you'll probably have to be accepted into the apple iPhone developer program and pay your $99.
On the bright side, with the iPhone OS 3.0 update, you can test this functionality on any device, including the first gen iPhones.
Solution 3
You can't test real push notifications. However, you can test your app's response to a simulated push notification by creating one programmatically and manually triggering your AppDelegate's - application:application didReceiveRemoteNotification:notification
method.
To trigger this from a different class (like a UIViewController):
[[[UIApplication sharedApplication] delegate]
application:[UIApplication sharedApplication]
didReceiveRemoteNotification:testNotification];
The testNotification should have the same format as a real notification, namely an NSDictionary that contains property list objects plus NSNull.
Here's an example of how to provide the testNotification
above:
NSMutableDictionary *notification = [[NSMutableDictionary alloc] init];
[notification setValue:@"Test" forKey:@"alert"];
[notification setValue:@"default" forKey:@"sound"];
NSMutableDictionary *testNotification = [[NSMutableDictionary alloc] init];
[testNotification setValue:notification forKey:@"aps"];
This should create a reasonable notification NSDictionary to work with.
Solution 4
Nowadays, we can test push notifications with this library.
It's pretty easy to send push via terminal:
echo -n '{"message":"message"}' | nc -4u -w1 localhost 9930
echo -n '{"aps":{"alert" : "message","badge" : 99,"sound" : "default"}, "myField" : 54758}' | nc -4u -w1 localhost 9930
Solution 5
Apple has supporting push notification for simulators. iOS 13.4 and above or Xcode 11.4 and above.
as usually create Xcode project and implement a user notification and authorization permission.
run your application in simulator iOS 13.4 and above.
put your application in background.
- Create an APNS payload file named "payload.apns"
{
"aps": {
"alert": {
"title": "Test Push",
"body": "Success! Push notification in simulator! 🎉",
"sound": "default"
},
"badge": 10
},
"Simulator Target Bundle": "com.company.app"
}
- Drag and drop to your iOS simulator.
right now your push notification will appear on simulator.
And also you can simulate push notification by terminal
get your simulator identifier by opening Window->Devices and Simulators and choose your targeted simulator and right click and copy your identifier.
Now build a terminal command like
xcrun simctl push <simulator-identifier> <path-to-payload-file>
ex:
xcrun simctl push 27A23727-45A9-4C12-BE29-8C0E6D1E5360 payload.apns
run this command and simulate push notification in simulator
Related videos on Youtube
Comments
-
Zanoni about 2 years
Is it possible test the Apple Push Notification Services without an iPhone application? (Creating an emulator on windows?)
If isn't, how could I test that? Is there a free sample application compiled to do that?
I created the Server provider, but I need test the functionallity.
-
kaspartus almost 11 yearsIt's time to update best answer. Library from my answer is so useful, thanks 'acoomans' for that!
-
mfaani over 3 yearsWhile you can test payloads using the simulator. The simulator has a bug and still doesn't seem to honor the
mutable-content
key. See here
-
-
JackLeo over 13 yearsi ran into the same problem, you answer is not clear talking about second part of the question:
If isn't, how could I test that? Is there a free sample application compiled to do that? I created the Server provider, but I need test the functionallity.
-
mirageservo over 11 yearsis there any sample implementation of this found somewhere?
-
Jamon Holmgren over 11 yearsI don't have one (my test implementation takes a different route, although it really should do what I suggested above). Classic "do as I say, not as I do" scenario I guess.
-
Negar Moshtaghi over 5 yearsplease explain more!
-
Sagar Shirbhate over 5 years@NegarMoshtaghi Please open the link which I had provided with answer it have full process how to use and how its working and all.
-
Mark Han about 5 yearsThis library is 5-6 years old, is it still functional?
-
Kwnstantinos Nikoloutsos almost 5 yearsThis is a nice answer.
-
MeLean over 4 yearsThis is not a release version yet
-
Mark over 4 yearsDuplicate to a more clear and concise answer provided a week earlier.
-
Hardik Vyas over 4 yearsThis is tutorial link for support Push notification in Simulator. medium.com/swlh/…
-
Rajath Kornaya about 4 yearsBut I have some good news for you. Xcode 11.4 beta is out and the best part about this release for me is that we can finally test push notifications in the iOS Simulator! Following is the sample implementation - medium.com/better-programming/…
-
Lukasz Ciastko about 4 yearsOk, but this doesn't trigger didReceiveRemoteNotification? I can't get anything from tapping on the message.
-
fredpi about 4 yearsDid you try using
didReceiveLocalNotification
(just for simulation purposes)? Apart from that: You should probably just use the methods provided by theUserNotifications
framework; I guess those will work... -
axunic almost 4 yearsdo you know a way to simulate this using OneSignal push notification?
-
fredpi almost 4 years@mnemonic23 If you want to test the handling of incoming OneSignal notifications via this method, you will have to find out how the OneSignal push notification payload looks like and replicate that exact payload. But I can't think of a scenario where that would make sense: If you want to test your app's handling of the payload, that's independent from the OneSignal delivery mechanism; if you want to test whether the OneSignal delivery mechanism works, this lokal push mocking won't help you.
-
Chris Prince over 3 yearsElaboration on
You can't test real push notifications.
-- on the simulator, you will still fail if you callUIApplication.shared.registerForRemoteNotifications()
-- you will get2021-01-16T13:11:35-0700 error : didFailToRegisterForRemoteNotificationsWithError: Error Domain=NSCocoaErrorDomain Code=3010 "remote notifications are not supported in the simulator" UserInfo={NSLocalizedDescription=remote notifications are not supported in the simulator}
-
pkamb over 2 years