Gerade falls jemand auf dem Testen voip Push-Benachrichtigungen mit Pushkit interessiert ist, hier verließ ich eine kleine Prozedur, die ich erfolgreich gefolgt:
1 - Erstellen, wenn Sie es nicht bereits haben, ein CSR mit Schlüsselbund und speichern Sie Ihre CSR lokal.
2 - Gehen Sie zu Apple Developer und erhalten Sie Zugang Zertifikate, Kennzeichnungen & Profile. Auf dem Mitgliedszentrum.
- Innen Identifiers-> App-IDs Erstellen Sie eine neue App-ID
- Innen Geräte-> Alle Geräte hinzufügen UDID Sie zum Testen von VoIP nutzen möchten
- Innen Zertifikate-> Alle ein Zertifikat neue Produktions erstellen schiebt: VoIP-Dienstezertifikat Wählen Sie die zuvor erstellte App-ID für Ihr VoIP-Servicezertifikat aus. Wählen Sie vorher CSR erstellt (Certificate Signing Request) und einmal erstellt herunterladen Ihre neuen voip_services.cer
Einmal heruntergeladen Doppelklick auf voip_services.cer um Schlüsselbund Anwendung zu öffnen und Export private Schlüssel für generierte Zertifikat: rechts button Export zertifikat.p12 datei.
Speichern voip_services.cer und certificate.p12 Datei in einem Ordner, um Ihren Server-Push-Benachrichtigung Generator
Schließlich Apple Entwickler-Website wieder und innerhalb Provisioning Profile- gehen erstellen> Distribution ein neuen Ad-Hoc-Verteilungsprofil erstellen einschließlich darauf alle Geräte UDID, die Sie zum Testen von VoIP-Push verwenden möchten. Laden Sie dieses Profil herunter und ziehen Sie es auf Ihren xcode, um es in Ihrer Anwendung zu verwenden.
lässt nun die iOS-App erstellen, die VoIP-Push-Benachrichtigungen erhalten:
- Erstellen Sie eine neue Single View Anwendung von Xcode neues Projekt Menü.
- Füllen Sie das Bündel Identifier gemäß der erstellten App-ID im vorherigen Abschnitt.
- Fügen Sie PushKit.framework in Allgemein-> Verknüpfte Frameworks und Bibliotheken hinzu.
- In den Funktionen Hintergrundmodus aktivieren und Voice over IP-Option auswählen.
- In den Buildeinstellungen -> Code Signing wählen Sie das Provisionierungsprofil aus, das Sie zuvor heruntergeladen haben, und wählen Sie Verteilung als Code Signing Identity.
Lets in der App fügen Sie den Code Pasquale in seiner Frage hinzugefügt:
In Ihrem Root-View-Controller-Header (ViewController.h ) einen Import für PushKit.framework:
#import <PushKit/PushKit.h>
Delegierten hinzufügen, um seine Funktionen zu implementieren:
@interface ViewController : UIViewController <PKPushRegistryDelegate>
In 363.210
in viewDidLoad Funktion Ihres Root-View-Controller (ViewController.m) Push-Anmeldung:
- (void)viewDidLoad {
[super viewDidLoad];
PKPushRegistry *pushRegistry = [[PKPushRegistry alloc] initWithQueue:dispatch_get_main_queue()];
pushRegistry.delegate = self;
pushRegistry.desiredPushTypes = [NSSet setWithObject:PKPushTypeVoIP];
}
Implementieren erforderlich delegieren Funktionen:
- (void)pushRegistry:(PKPushRegistry *)registry didUpdatePushCredentials:(PKPushCredentials *)credentials forType:(NSString *)type{
if([credentials.token length] == 0) {
NSLog(@"voip token NULL");
return;
}
NSLog(@"PushCredentials: %@", credentials.token);
}
- (void)pushRegistry:(PKPushRegistry *)registry didReceiveIncomingPushWithPayload:(PKPushPayload *)payload forType:(NSString *)type
{
NSLog(@"didReceiveIncomingPushWithPayload");
}
Sobald alles kompiliert und ok, archivieren Sie Ihre Projekt- und Export Ihre ipa-Datei, um sie auf Testgeräten zu installieren (Sie können zum Beispiel Testflight verwenden).
Führen Sie es aus und rufen Sie die PushCredentials ab, die wir verwenden werden, um Pushs zu senden.
Jetzt auf Server-Seite gehen lässt (ich diesen großen Führer von raywenderlich tutorials gefolgt):
zurück zum Ordner Erhalten Sie waren platziert Sie die drei Dateien:
- voip_services.cer
- Zertifikat.p12
1 - öffnen Sie einen Terminal und pem-Datei aus dem Zertifikat-Datei erstellen:
#openssl x509 -in voip_services.cer -inform der -out PushVoipCert.pem
2 - Erstellen pem-Datei aus exportierte privaten Schlüsseldatei:
#openssl pkcs12 -nocerts -out PushVoipKey.pem -in certificate.p12
3 - Join sowohl pem Dateien in einem:
#cat PushVoipCert.pem PushVoipKey.pem > ck.pem
Um zu senden schiebt yo u kann Pusher von raywenderlich tutorials Tutorial oder einen einfachen PHP-Skript:
<?php
// Put your device token here (without spaces):
$deviceToken = '0f744707bebcf74f9b7c25d48e3358945f6aa01da5ddb387462c7eaf61bbad78';
// Put your private key's passphrase here:
$passphrase = 'pushchat';
// Put your alert message here:
$message = 'My first push notification!';
////////////////////////////////////////////////////////////////////////////////
$ctx = stream_context_create();
stream_context_set_option($ctx, 'ssl', 'local_cert', 'ck.pem');
stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase);
// Open a connection to the APNS server
$fp = stream_socket_client(
'ssl://gateway.sandbox.push.apple.com:2195', $err,
$errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);
if (!$fp)
exit("Failed to connect: $err $errstr" . PHP_EOL);
echo 'Connected to APNS' . PHP_EOL;
// Create the payload body
$body['aps'] = array(
'alert' => $message,
'sound' => 'default'
);
// Encode the payload as JSON
$payload = json_encode($body);
// Build the binary notification
$msg = chr(0) . pack('n', 32) . pack('H*', $deviceToken) . pack('n', strlen($payload)) . $payload;
// Send it to the server
$result = fwrite($fp, $msg, strlen($msg));
if (!$result)
echo 'Message not delivered' . PHP_EOL;
else
echo 'Message successfully delivered' . PHP_EOL;
// Close the connection to the server
fclose($fp);
Sie in Skript ändern sollten:
- $ deviceToken von Ihrem PushCredentials Zugabe (von App-Protokollen)
- $ Passwort durch die Passphrase, die Sie in Schritt 2 bei der Erstellung von PushVoipKey.pem hinzugefügt haben
Das war's. Führen Sie PHP-Skript:
#php simplePushScript.php
und Sie sollten Ihre VoIP-Push-Benachrichtigung erhalten (Sie sollten App Protokoll anzeigen: "didReceiveIncomingPushWithPayload")
Nach diesem Test habe ich gefragt, wie ich Standard-Push-Benachrichtigungen durch pushkit Rahmen empfangen konnten, aber leider habe ich keine Antwort, wenn die Push-Typ Registrierung ich keine andere PKPushType finden konnten, aber die PKPushTypeVoIP ...
pushRegistry.desiredPushTypes = [NSSet setWithObject:PKPushTypeVoIP];
das ist alles! Danke fürs Lesen!
Ich habe keine Callbacks bekommen, die weder aufgerufen werden ... noch werden sie aufgerufen. Ich bin nicht sicher, wie ich Token bekommen soll, um es zu testen. Irgendwelche Fortschritte dabei? –
Nein. Ich kann diesen Service nicht nutzen. – Pasquale
Ich habe Callbacks angerufen! Ich habe es versäumt, die voip-Hintergrundfunktionen der App zu überprüfen. –