Heim >Backend-Entwicklung >PHP-Problem >So implementieren Sie iOS Push in PHP

So implementieren Sie iOS Push in PHP

藏色散人
藏色散人Original
2020-09-07 10:48:094181Durchsuche

So implementieren Sie iOS Push in PHP: Verpacken Sie zuerst die zu sendende Nachricht und das iPhone-Logo und senden Sie sie an APNS. Suchen Sie dann das iPhone mit dem entsprechenden Logo und senden Sie die Nachricht schließlich an das iPhone entsprechende Anwendung, und die Push-Benachrichtigung wird entsprechend den Einstellungen angezeigt.

So implementieren Sie iOS Push in PHP

Empfohlen: „php-Video-Tutorial

IOS-Push-Nachrichten sind eine Funktion, die viele IOS-Anwendungen haben. Nachdem ich viele Informationen gelesen habe, habe ich sie endlich verstanden Hier sind die Schritte. Nehmen Sie es heraus und teilen Sie es:

Der Funktionsmechanismus von iOS Message Push lässt sich einfach durch die folgende Abbildung zusammenfassen:


Provider bezieht sich auf den Push-Server eines bestimmte iPhone-Software, und APNS ist Apple Push Notification Service. Die Abkürzung für Apple Server.

Das obige Bild kann in drei Phasen unterteilt werden:

Phase 1: Die Anwendung verpackt die zu sendende Nachricht und die Identifizierung des Ziel-iPhones und sendet sie an APNS.

Der zweite Schritt: APNS sucht in seiner eigenen Liste der für den Push-Dienst registrierten iPhones nach dem iPhone mit der entsprechenden Identifikation und sendet die Nachricht an das iPhone.

Die dritte Stufe: Das iPhone leitet die gesendete Nachricht an die entsprechende Anwendung weiter und zeigt entsprechend den Einstellungen eine Push-Benachrichtigung an.

Auf dem Bild oben sehen wir:

1.

2. iOS erhält das Geräte-Token vom APNS-Server und die Anwendung erhält das Geräte-Token.

3. Die Anwendung sendet das Geräte-Token an das PUSH-Serverprogramm.

4. Das Serverprogramm sendet eine Nachricht an den APNS-Dienst.

5. Der APNS-Dienst sendet Nachrichten an iPhone-Anwendungen.

Ob es sich um den iPhone-Client und APNS oder den Provider und APNS handelt, sie alle müssen über ein Zertifikat eine Verbindung herstellen.

Jetzt stelle ich einige verwendete Zertifikate vor.

1. CSR-Datei

1. Zertifikatssignaturanfrage (CSR) erstellen


2. Geben Sie Ihre E-Mail-Adresse und Ihren allgemeinen Namen ein und speichern Sie sie auf Ihrer Festplatte.


Klicken Sie, um fortzufahren:


Dadurch wird lokal eine Push.certSigningRequest-Datei generiert.

2. p12-Datei

1.


2. Geben Sie Ihr Passwort ein.

Dadurch wird eine Push.p12-Datei generiert.

3. SSL-Zertifikatsdatei

1. Melden Sie sich mit Ihrem kostenpflichtigen Konto an und erstellen Sie eine neue App-ID. Informationen zu diesem Vorgang finden Sie unter: Real-Machine-Debugging von iOS-Anwendungen Eintrag:

2. Klicken Sie rechts auf Konfigurieren:

3. Klicken Sie nach der Zeile „Development Push SSL Certificate“ auf „Weiter“: 5. Klicken Sie für die zuvor generierte Push.certSigningRequest-Datei auf „Generieren“ und die folgende Seite wird angezeigt:

6. Klicken Sie auf „Weiter“:


7. Klicken Sie auf „Herunterladen“ und benennen Sie die Datei „aps_developer_identity.cer“.


8. Klicken Sie auf „Fertig“ und Sie werden feststellen, dass sich der Status in „Aktiviert“ ändert:

Bisher haben wir drei Dateien generiert:

1, Push.certSigningRequest

2, Push.p12

3, aps_developer_identity.cer

Doppelklicken Sie auf aps_developer_dientity.cer, um es in Ihrem Schlüsselbund zu registrieren dass Ihr Schlüsselbund haben wird

2. Bereiten Sie das Profilzertifikat vor, da Push-Nachrichten nur auf echten Maschinen getestet werden können, daher müssen Sie ein Profilzertifikat erstellen


Klicken Sie auf „Neues Profil“, um das oben stehende zu erstellen Erstellen Sie ein Profil mit der APP-ID und laden Sie nach Erfolg *_Dev_Profile.mobileprovision herunter, um es den Bereitstellungsprofilen von xcode hinzuzufügen.

Bevor Sie dies zu xcode hinzugefügt haben, sollten Sie Folgendes beachten , Sie müssen es vorher hinzufügen. Wenn es mehr als eines gibt, tritt ein Fehler auf.

3. Projektcode

Als nächstes erstellen wir ein neues Testprojekt in xcode.

Beachten Sie, dass die Bundle-ID des Projekts mit der oben erstellten APP-ID übereinstimmen muss

Fügen Sie etwas Code in didFinishLaunchingWithOptions hinzu Token ist:

2f471ebd99470b40b57c0049667e7ee8


Viertens: Verwenden Sie PHP, um die Nachricht an APNS zu senden.

1. PHP erfordert auch ein Zertifikat, um eine Verbindung zu APNS herzustellen Was wir oben erhalten haben Wie viele Zertifikate gibt es? Öffnen Sie das Terminal und verarbeiten Sie das obige Zertifikat wie folgt:

cd Geben Sie das Verzeichnis ein, in dem sich das Zertifikat befindet.

Konvertieren Sie die .cer-Datei in eine .pem-Datei:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
 
[self.window makeKeyAndVisible];
    [[UIApplication sharedApplication] registerForRemoteNotificationTypes: UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert];
    return YES;
 
}
 
 
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)pToken {
    NSLog(@"regisger success:%@", pToken);
    
    //注册成功,将deviceToken保存到应用服务器数据库中
    
}
 
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo{
    // 处理推送消息
    UIAlertView *alert=[[UIAlertView alloc]initWithTitle:@"通知" message:@"我的信息" delegate:selfcancelButtonTitle:@"取消" otherButtonTitles:nil, nil];
    [alert show];
    [alert release];
NSLog(@"%@", userInfo);
}
- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error {
    NSLog(@"Regist fail%@",error); 
    
  
}

Konvertieren Sie den privaten Schlüssel. Drücken Sie .p12-Datei in .pem-Datei:

$ openssl pkcs12 -nocerts -out PushChatKey.pem -in Push.p12
Enter Import Password:
MAC verified OK
Enter PEM pass phrase:
Verifying – Enter PEM pass phrase:

你首先需要为.p12文件输入passphrase密码短语,这样OpenSSL可以读它。然后你需要键入一个新的密码短语来加密PEM文件。还是使用”pushchat”来作为PEM的密码短语。你需要选择一些更安全的密码短语。

注意:如果你没有键入一个PEM passphrase,OpenSSL将不会返回一个错误信息,但是产生的.pem文件里面将不会含有私钥。

最后。把私钥和证书整合到一个.pem文件里:

$ cat PushChatCert.pem PushChatKey.pem > ck.pem

为了测试证书是否工作,执行下面的命令

$ telnet gateway.sandbox.push.apple.com 2195
Trying 17.172.232.226…
Connected to gateway.sandbox.push-apple.com.akadns.net.
Escape character is ‘^]’.

它将尝试发送一个规则的,不加密的连接到APNS服务。如果你看到上面的反馈,那说明你的MAC能够到达APNS。按下Ctrl+C 关闭连接。如果得到一个错误信息,那么你需要确保你的防火墙允许2195端口。

然后再次连接,这次用我们的SSL证书和私钥来设置一个安全的连接:

$ openssl s_client -connect gateway.sandbox.push.apple.com:2195
-cert PushChatCert.pem -key PushChatKey.pem
Enter pass phrase for PushChatKey.pem:

你会看到一个完整的输出,让你明白OpenSSL在后台做什么。如果连接是成功的,你可以键入一些字符。当你按下回车后,服务就会断开连接。如果在建立连接时有问题,OpenSSL将会给你一个错误消息

ck.pem文件就是我们需要得到php连接APNS 的文件,将ck.pem和push.php放入同一目录上传到服务器,push.php的代码如下:

<?php
// 这里是我们上面得到的deviceToken,直接复制过来(记得去掉空格)
$deviceToken = &#39;740f4707bebcf74f 9b7c25d4 8e3358945f6aa01da5ddb387462c7eaf 61bb78ad&#39;;
// Put your private key&#39;s passphrase here:
$passphrase = &#39;abc123456&#39;;
// Put your alert message here:
$message = &#39;My first push test!&#39;;
$ctx = stream_context_create();
stream_context_set_option($ctx, &#39;ssl&#39;, &#39;local_cert&#39;, &#39;ck.pem&#39;);
stream_context_set_option($ctx, &#39;ssl&#39;, &#39;passphrase&#39;, $passphrase);
// Open a connection to the APNS server
//这个为正是的发布地址
 //$fp = stream_socket_client(“ssl://gateway.push.apple.com:2195“, $err, $errstr, 60, //STREAM_CLIENT_CONNECT, $ctx);
//这个是沙盒测试地址,发布到appstore后记得修改哦
$fp = stream_socket_client(
&#39;ssl://gateway.sandbox.push.apple.com:2195&#39;, $err,
$errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);
if (!$fp)
exit("Failed to connect: $err $errstr" . PHP_EOL);
echo &#39;Connected to APNS&#39; . PHP_EOL;
// Create the payload body
$body[&#39;aps&#39;] = array(
&#39;alert&#39; => $message,
&#39;sound&#39; => &#39;default&#39;
);
// Encode the payload as JSON
$payload = json_encode($body);
// Build the binary notification
$msg = chr(0) . pack(&#39;n&#39;, 32) . pack(&#39;H*&#39;, $deviceToken) . pack(&#39;n&#39;,
 strlen($payload)) . $payload;
// Send it to the server
$result = fwrite($fp, $msg, strlen($msg));
if (!$result)
echo &#39;Message not delivered&#39; . PHP_EOL;
else
echo &#39;Message successfully delivered&#39; . PHP_EOL;
// Close the connection to the server
fclose($fp);
?>

接下来我们访问http://localhost/push/push.php

iphone就会接收到一条推送消息了,如果有问题的话就检查上面的操作步骤,特别是加红的部分

 另外去除标记的方法为,在viewDidApper中加入

int badge = [UIApplication sharedApplication].applicationIconBadgeNumber;
    if(badge > 0)
    {
        badge--;
        [UIApplication sharedApplication].applicationIconBadgeNumber = badge;
    }

Das obige ist der detaillierte Inhalt vonSo implementieren Sie iOS Push in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn