Wie kann ich den Apple Push Notification Service ohne iPhone testen?

78

Ist es möglich, die Apple Push Notification Services ohne iPhone-Anwendung zu testen? (Erstellen eines Emulators unter Windows?)

Wenn nicht, wie könnte ich das testen? Gibt es dafür eine kostenlose Beispielanwendung?

Ich habe den Server-Provider erstellt, muss aber die Funktionalität testen.

Zanoni
quelle
1
Es ist Zeit, die beste Antwort zu aktualisieren. Bibliothek aus meiner Antwort ist so nützlich, danke 'acoomans' dafür!
Kaspartus
Während Sie Nutzdaten mit dem Simulator testen können. Der Simulator hat einen Fehler und scheint den mutable-contentSchlüssel immer noch nicht zu ehren . Siehe hier
Honey

Antworten:

79

Diese Antwort ist veraltet . Ab 2020 / Xcode 11.4 ist es nun möglich, Push-Benachrichtigungen im Simulator zu testen

Siehe diese vollständige Erklärung in einer Antwort unten

Tut mir leid, aber Sie müssen Hardware finden, um diese Funktionalität zu testen.

Push-Benachrichtigungen sind im Simulator nicht verfügbar. Sie benötigen ein Bereitstellungsprofil von iTunes Connect und müssen daher auf einem Gerät installiert sein. Das bedeutet auch, dass Sie wahrscheinlich in das Apple iPhone-Entwicklerprogramm aufgenommen werden müssen und Ihre 99 US-Dollar bezahlen müssen.

Positiv zu vermerken ist, dass Sie mit dem iPhone OS 3.0-Update diese Funktionalität auf jedem Gerät testen können, einschließlich der iPhones der ersten Generation.

casademora
quelle
2
Ich bin auf das gleiche Problem 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.
gestoßen. Ihre
Dies ist ein Tutorial-Link zur Unterstützung der Push-Benachrichtigung in Simulator. medium.com/swlh/…
Hardik Vyas
Aber ich habe gute Nachrichten für Sie. Xcode 11.4 Beta ist da und das Beste an dieser Version ist für mich, dass wir endlich Push-Benachrichtigungen im iOS-Simulator testen können! Es folgt die Beispielimplementierung - medium.com/better-programming/…
Rajath Kornaya
55

Sie können keine echten Push-Benachrichtigungen testen. Allerdings können Sie Ihre App testen Antwort auf eine simulierte Push - Benachrichtigung durch eine programmatisch erstellen und manuell AppDelegate des auslösenden - application:application didReceiveRemoteNotification:notificationMethode.

So lösen Sie dies von einer anderen Klasse aus (z. B. einem UIViewController):

[[[UIApplication sharedApplication] delegate]
                    application:[UIApplication sharedApplication]
   didReceiveRemoteNotification:testNotification];

Die testNotification sollte das gleiche Format wie eine echte Benachrichtigung haben, nämlich ein NSDictionary, das Eigenschaftslistenobjekte plus NSNull enthält.

Hier ist ein Beispiel für die Bereitstellung der testNotificationoben genannten Informationen:

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"];

Dies sollte ein angemessenes Benachrichtigungs-NSDictionary erstellen, mit dem gearbeitet werden kann.

Jamon Holmgren
quelle
1
Gibt es irgendwo eine Beispielimplementierung dafür?
Mirageservo
Ich habe keine (meine Testimplementierung geht einen anderen Weg, obwohl sie wirklich das tun sollte, was ich oben vorgeschlagen habe). Klassisches "Mach was ich sage, nicht wie ich" Szenario, denke ich.
Jamon Holmgren
1
Das ist eine schöne Antwort.
Kwnstantinos Nikoloutsos
30

Heutzutage können wir Push-Benachrichtigungen mit dieser Bibliothek testen .

Es ist ziemlich einfach, Push über das Terminal zu senden:

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
Kaspartus
quelle
14

Testen von Push-Benachrichtigungen mit dem Xcode 11.4 iOS Simulator

Ab Xcode 11.4 ist es jetzt möglich, Push-Benachrichtigungen durch Ziehen und Ablegen einer .apnsDatei auf den iOS-Simulator zu simulieren . Die Versionshinweise zu Xcode 11.4 enthalten Folgendes zu der neuen Funktion:

Simulator unterstützt die Simulation von Remote-Push-Benachrichtigungen, einschließlich Benachrichtigungen zum Abrufen von Hintergrundinhalten. Ziehen Sie im Simulator eine APN-Datei per Drag & Drop auf den Zielsimulator . Die Datei muss eine JSON-Datei mit einer gültigen Nutzlast des Apple Push Notification Service sein, einschließlich des Schlüssels "aps" . Es muss auch ein „Simulator-Zielpaket“ der obersten Ebene mit einem Zeichenfolgenwert enthalten, der mit der Bundle- ID der Zielanwendung übereinstimmt.

simctlunterstützt auch das Senden simulierter Push-Benachrichtigungen. Wenn die Datei "Simulator Target Bundle" enthält, ist die Bundle-ID nicht erforderlich, andernfalls müssen Sie sie als Argument angeben (8164566):

xcrun simctl push <device> com.example.my-app ExamplePush.apns

Beispiel

Hier ist ein Beispiel für eine solche .apnsDatei, die auf die Systemeinstellungs-App ausgerichtet ist:

{
    "Simulator Target Bundle": "com.apple.Preferences",
    "aps": {
        "alert": "This is a simulated notification!",
        "badge": 3,
        "sound": "default"
    }
}

Durch Ziehen und Ablegen auf den Zielsimulator wird die Benachrichtigung angezeigt und das Abzeichen festgelegt:

Benachrichtigung auf dem iOS-Simulator

Um dies für Debugging-Zwecke zu verwenden, müssen Sie nur die ID Simulator Target BundleIhrer eigenen App ändern und die Nutzdaten an Ihre Debugging-Anforderungen anpassen !

Fredpi
quelle
Dies ist noch keine Release-Version
MeLine
1
Ok, aber das löst nicht didReceiveRemoteNotification aus? Ich kann nichts davon bekommen, auf die Nachricht zu tippen.
Lukasz Ciastko
Haben Sie versucht didReceiveLocalNotification(nur zu Simulationszwecken)? Abgesehen davon: Sie sollten wahrscheinlich nur die vom UserNotificationsFramework bereitgestellten Methoden verwenden . Ich denke, die werden funktionieren ...
Fredpi
Kennen Sie eine Möglichkeit, dies mithilfe der OneSignal-Push-Benachrichtigung zu simulieren?
mnemonic23
@ mnemonic23 Wenn Sie die Behandlung eingehender OneSignal-Benachrichtigungen über diese Methode testen möchten, müssen Sie herausfinden, wie die Nutzdaten für OneSignal-Push-Benachrichtigungen aussehen, und genau diese Nutzdaten replizieren. Ich kann mir jedoch kein Szenario vorstellen, in dem dies sinnvoll wäre: Wenn Sie die Handhabung der Nutzdaten durch Ihre App testen möchten, ist dies unabhängig vom OneSignal-Übermittlungsmechanismus. Wenn Sie testen möchten, ob der OneSignal-Übermittlungsmechanismus funktioniert, hilft Ihnen diese lokale Push-Verspottung nicht weiter.
Fredpi
6

Der Simulator führt keine Push-Benachrichtigungen aus.

Und um von einem Server zu pushen, müssen Sie Geräte haben, auf die Sie pushen können, sowie Ihre App auf diesem Gerät.

Das Token enthält die App-Identität sowie die Geräte-ID.


quelle
4

Apple unterstützt Push-Benachrichtigungen für Simulatoren. iOS 13.4 und höher oder Xcode 11.4 und höher.

Erstellen Sie wie gewohnt ein Xcode- Projekt und implementieren Sie eine Benutzerbenachrichtigung und Autorisierungsberechtigung.

Führen Sie Ihre Anwendung in Simulator iOS 13.4 und höher aus .

Stellen Sie Ihre Bewerbung in den Hintergrund.

  1. Erstellen Sie eine APNS-Nutzdaten-Datei mit dem Namen " payload.apns ".
{
  "aps": {
    "alert": {
      "title": "Test Push",
      "body": "Success! Push notification in simulator! 🎉",
      "sound": "default"
    },
    "badge": 10
  },
  "Simulator Target Bundle": "com.company.app"
}
  1. Drag & Drop auf Ihren iOS-Simulator.

Im Moment wird Ihre Push-Benachrichtigung im Simulator angezeigt.

Außerdem können Sie eine Push-Benachrichtigung per Terminal simulieren

Holen Sie sich Ihre Simulator- ID, indem Sie Fenster-> Geräte und Simulatoren öffnen und Ihren Zielsimulator auswählen. Klicken Sie mit der rechten Maustaste und kopieren Sie Ihre ID .

Erstellen Sie nun einen Terminalbefehl wie

xcrun simctl push <simulator-identifier> <path-to-payload-file>

Ex:

xcrun simctl push 27A23727-45A9-4C12-BE29-8C0E6D1E5360 payload.apns

Führen Sie diesen Befehl aus und simulieren Sie die Push-Benachrichtigung im Simulator

Kathiresan Murugan
quelle
3

du musst verwenden

NSString *notificationString = @"{\"aps\":{\"alert\":\"Test alert\",\"sound\":\"default\"}}";

NSData *notificationData = [notificationString dataUsingEncoding:NSUTF8StringEncoding];

NSDictionary *testNotification = [NSJSONSerialization JSONObjectWithData:notificationData options:0 error:&error];

[[[UIApplication sharedApplication] delegate] application:[UIApplication sharedApplication] didReceiveRemoteNotification:testNotification  fetchCompletionHandler:nil];
user2894794
quelle
3

Xcode 11.4 Beta unterstützt die Push-Benachrichtigung in Simulator

Simulator unterstützt die Simulation von Remote-Push-Benachrichtigungen, einschließlich Benachrichtigungen zum Abrufen von Hintergrundinhalten. Ziehen Sie im Simulator eine APN-Datei per Drag & Drop auf den Zielsimulator. Die Datei muss eine JSON-Datei mit einer gültigen Nutzlast des Apple Push Notification Service sein, einschließlich des Schlüssels "aps". Es muss außerdem ein „Simulator-Zielpaket“ der obersten Ebene mit einem Zeichenfolgenwert enthalten, der mit der Paketkennung der Zielanwendung übereinstimmt.

simctl unterstützt auch das Senden simulierter Push-Benachrichtigungen. Wenn die Datei "Simulator Target Bundle" enthält, ist die Bundle-ID nicht erforderlich, andernfalls müssen Sie sie als Argument angeben (8164566):

$ xcrun simctl push <device> com.example.my-app ExamplePush.apns

Versionshinweise: https://developer.apple.com/documentation/xcode_release_notes/xcode_11_4_beta_release_notes

Mohammad Parvez
quelle
Duplizieren Sie eine Woche zuvor, um eine klarere und präzisere Antwort zu erhalten .
Mark
2

Neben der Antwort von @ fredpi können Sie auch das Poes- Befehlszeilentool verwenden. Es ermöglicht uns, Remote-Push-Benachrichtigungen auf dem iOS-Simulator schnell zu testen, ohne eine JSON-Payload-Datei erstellen zu müssen.

Poes --help
OVERVIEW: A Swift command-line tool to easily send push notifications to the iOS simulator

USAGE: Poes <options>

OPTIONS:
  --body, -b            The body of the Push Notification
  --bundle-identifier   The bundle identifier to push to
  --mutable, -m         Adds the mutable-content key to the payload
  --title, -t           The title of the Push Notification
  --verbose             Show extra logging for debugging purposes
  --help                Display available options

Der folgende Befehl kann ausreichen, um eine einfache Push-Benachrichtigung mit einem Standardtitel und -text zu senden:

$ Poes --bundle-identifier com.wetransfer.app --verbose
Generated payload:

{
  "aps" : {
    "alert" : {
      "title" : "Default title",
      "body" : "Default body"
    },
    "mutable-content" : false
  }
}

Sending push notification...
Push notification sent successfully
Antoine
quelle
1

Ja, Sie können die Push-Benachrichtigung auf dem Simulator überprüfen, müssen jedoch in Ihrer App eine Bibliothek mit dem Namen SimulatorRemoteNotifications verwenden . Mit nur 4-5 Schritten können Sie die Push-Benachrichtigung auf dem Simulator testen.

Sie bieten auch PODs:

pod 'SimulatorRemoteNotifications', '~> 0.0.3'
Sagar Shirbhate
quelle
Bitte erklären Sie mehr!
Negar Moshtaghi
2
@NegarMoshtaghi Bitte öffnen Sie den Link, den ich mit der Antwort versehen hatte.
Sagar Shirbhate
Diese Bibliothek ist 5-6 Jahre alt, ist sie noch funktionsfähig?
Mark Han