Maison > Article > développement back-end > Comment implémenter iOS Push en php
Comment implémenter ios push en PHP : emballez d'abord le message à envoyer et le logo de l'iPhone, et envoyez-le à APNS puis recherchez l'iPhone avec le logo correspondant et envoyez enfin le message à l'iPhone ; envoyez le message Passez-le à l'application correspondante et la notification Push apparaîtra en fonction des paramètres.
Recommandé : "Tutoriel vidéo php"
Les messages push IOS sont de nombreuses applications IOS Ils ont tous des fonctions. J'ai également fait des recherches sur cette fonction récemment. Après avoir consulté de nombreuses informations, je l'ai finalement obtenue. Je vais partager les étapes ci-dessous :
Le mécanisme de fonctionnement. Le push de message iOS peut être simple. Utilisez la figure suivante pour résumer :
Le fournisseur fait référence au serveur Push d'un certain iPhone. logiciel, APNS est Apple Push Notification Service. L'abréviation d'Apple Server.
L'image ci-dessus peut être divisée en trois étapes :
La première étape : l'application conditionne le message à envoyer et l'identification de l'iPhone de destination et l'envoie à APNS.
La deuxième étape : APNS recherche l'iPhone avec l'identification correspondante dans sa propre liste d'iPhone enregistrés au service Push, et envoie le message à l'iPhone.
La troisième étape : l'iPhone transmet le message envoyé à l'application correspondante et affiche une notification Push en fonction des paramètres.
Sur l'image ci-dessus, nous pouvons voir :
1.
2. iOS obtient le jeton de l'appareil du serveur APNS et l'application reçoit le jeton de l'appareil.
3. L'application envoie le jeton de l'appareil au programme serveur PUSH.
4. Le programme serveur envoie un message au service APNS.
5. Le service APNS envoie le message à l'application iPhone.
Qu'il s'agisse du client iPhone et de l'APNS, ou du fournisseur et de l'APNS, ils doivent tous se connecter via un certificat.
Permettez-moi de vous présenter plusieurs certificats utilisés.
1. Fichier CSR
1. Générer une demande de signature de certificat (CSR)
2. et Nom commun et choisissez d'enregistrer sur le disque dur.
Cliquez pour continuer :
Cela générera un fichier Push.certSigningRequest localement.
2. Fichier p12
1. Exportez la clé.
2. Saisissez votre mot de passe.
Cela génère un fichier Push.p12.
3. Fichier de certificat SSL
1. Connectez-vous au portail de provisionnement iOS avec votre compte payant et créez un nouvel identifiant d'application. Pour ce processus, veuillez vous référer à : Débogage de l'appareil réel. Applications iOS. Cela générera l'enregistrement suivant :
2. Cliquez sur Configurer à droite :
3. Cliquez sur Configurer après la ligne de certificat SSL Development Push :
4. Cliquez sur Continuer :
5. Sélectionnez Pour le fichier Push.certSigningRequest généré précédemment, cliquez sur Générer et la page suivante apparaîtra :
6. Cliquez sur Continuer :
7. Cliquez sur Télécharger et nommez le fichier aps_developer_identity.cer.
8. Cliquez sur Terminé et vous constaterez que le statut passe à Activé :
Jusqu'à présent, nous avons généré trois fichiers :
1, Push.certSigningRequest
2, Push.p12
3 . aps_developer_identity.cer
Double-cliquez sur aps_developer_dientity.cer pour l'enregistrer dans votre trousseau, afin que votre trousseau en ait
Préparez le certificat de profil. . Étant donné que les messages push ne peuvent être testés que sur des machines réelles, vous devez créer un certificat de profil
Cliquez sur "nouveau profil" pour créer un profil pour l'ID d'application nouvellement créé ci-dessus. Téléchargez *_Dev_Profile.mobileprovision
Double-cliquez pour l'ajouter aux profils d'approvisionnement de xcode Une chose à noter ici est qu'avant de l'ajouter à xcode, s'il a déjà été ajouté, assurez-vous de le faire. supprimez-le, une erreur se produira s’il y en a plusieurs.
3. Code du projet
Le certificat est maintenant prêt. Ensuite, nous créons un nouveau projet de test dans xcode. Faites attention à la configuration. le projet L'identifiant du bundle doit être le même que celui de l'ID de l'APP construit ci-dessus
Ajoutez le code dans didFinishLaunchingWithOptions
- (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); }
Si tout se passe bien ici, nous pouvons l'exécuter sur la vraie machine. Si l'enregistrement réussit, nous obtiendrons le DeviceToken de l'iPhone,
<.>Mon jeton est :
2f471ebd99470b40b57c0049667e7ee8
Quatrièmement, utilisez php pour envoyer le message vers APNS.
1. PHP nécessite également un certificat pour se connecter à APNS Vous souvenez-vous des certificats que nous avons obtenus ci-dessus ? Ouvrez le terminal et traitez le certificat ci-dessus comme suit :
cd Entrez le répertoire où se trouve le certificat
Convertissez le fichier .cer en .pem fichier :
$ openssl x509 -in aps_developer_identity.cer -inform der -out PushChatCert.pemConvertir le fichier de clé privée Push.p12 en fichier .pem :
$ 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 = '740f4707bebcf74f 9b7c25d4 8e3358945f6aa01da5ddb387462c7eaf 61bb78ad'; // Put your private key's passphrase here: $passphrase = 'abc123456'; // Put your alert message here: $message = 'My first push test!'; $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.push.apple.com:2195“, $err, $errstr, 60, //STREAM_CLIENT_CONNECT, $ctx); //这个是沙盒测试地址,发布到appstore后记得修改哦 $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); ?>
接下来我们访问http://localhost/push/push.php
iphone就会接收到一条推送消息了,如果有问题的话就检查上面的操作步骤,特别是加红的部分
另外去除标记的方法为,在viewDidApper中加入
int badge = [UIApplication sharedApplication].applicationIconBadgeNumber; if(badge > 0) { badge--; [UIApplication sharedApplication].applicationIconBadgeNumber = badge; }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!