Comment connaître tous les dispositifs de jetons pour envoyer des notifications push (APN) dans une boucle?
Je suis en train d'utiliser un code php pour envoyer à tous les jetons qui ont téléchargé mon application iPhone. Pourriez-vous me dire comment faire pour envoyer à plusieurs appareils et comment entrer dans une boucle de dispositifs de jetons?
c'est mon code:
<?php
$deviceToken = ''; //HERE I CAN SEND TO ONE DEVICE
//Passphrase for the private key (ck.pem file)
//$pass = '';
//Get the parameters from http get or from command line
$message = $_GET['message'] or $message = $argv[1] or $message = 'MY NOTIFICATION BODY';
$badge = (int)$_GET['badge'] or $badge = (int)$argv[2];
$sound = $_GET['sound'] or $sound = $argv[3];
//Construct the notification payload
$body = array();
$body['aps'] = array('alert' => $message);
if ($badge)
$body['aps']['badge'] = $badge;
if ($sound)
$body['aps']['sound'] = $sound;
/* End of Configurable Items */
$ctx = stream_context_create();
stream_context_set_option($ctx, 'ssl', 'local_cert', 'apns-dev.pem');
//assume the private key passphase was removed.
//stream_context_set_option($ctx, 'ssl', 'passphrase', $pass);
$fp = stream_socket_client('ssl://gateway.sandbox.push.apple.com:2195', $err, $errstr, 60,STREAM_CLIENT_CONNECT, $ctx);
if (!$fp) {
print "Failed to connect $err $errstrn";
return;
}
else {
print "Connection OK\n";
}
$payload = json_encode($body);
$msg = chr(0) . pack("n",32) . pack('H*', str_replace(' ', '', $deviceToken)) . pack("n",strlen($payload)) . $payload;
print "sending message :" . $payload . "\n";
fwrite($fp, $msg);
fclose($fp);
?>
Cochez cette question stackoverflow.com/q/14563097/1868660
OriginalL'auteur SalehAlmusallam | 2011-06-17
Vous devez vous connecter pour publier un commentaire.
J'ai écrit un tutoriel sur les notifications push. Je vous suggère de le lire afin de mieux comprendre ce que vous êtes censé faire:
http://www.raywenderlich.com/3443/apple-push-notification-services-tutorial-part-12
Vous devez envisager les notifications multiples. Chaque appareil doit avoir son propre avis. Donc, si vous suivez ce que mon tutoriel ne et de mettre un enregistrement dans la base de données pour chaque notification que vous souhaitez envoyer, vous mettez 100 enregistrements dans la base de données si vous vouliez envoyer à la même notification à 100 appareils. Si c'est quelque chose que vous ferez souvent -- envoi exactement la même notification à plusieurs périphériques, puis une autre structure de base de données pourrait faire plus de sens.
Vous voulez dire que je dois créer mon propre base de données sur mon serveur et de stocker tous les appareils jetons en leur envoyant de l'app délégué application:didRegisterForRemoteNotificationswithdevicetoken méthode à mon serveur, puis en exécutant une boucle pour la notification push?ou il y a un moyen de les récupérer depuis le serveur apple?
Correct. Lorsque votre application est installée sur l'appareil d'un utilisateur, il envoie le jeton à votre serveur. Votre serveur a besoin de garder une trace de ces jetons en quelque sorte, par exemple dans une base de données. Puis, quand vous avez besoin de pousser une notification à ces jetons, vous les obtenez à partir de la base de données et envoyer une notification à chacun. Il n'existe aucun moyen pour obtenir une liste des périphériques jetons d'Apple, vous devez rassembler vous-même. (Vous ne pouvez les envoyer à des appareils qui ont votre application, par le chemin. Si vous envoyez trop de notifications qui ne peut être livré, Apple peut la liste noire de votre certificat.)
Merci beaucoup Hollance c'est génial. Je vous envoie une notification push à tous les clients tous les 2-3 jours, est-ce trop? Je ne pouvais pas trouver n'importe quel article sur la façon dont beaucoup que je peux envoyer sans être sur la liste noire.
OriginalL'auteur Hollance
Pousser les messages doivent être envoyés un par un. Vous aurez à utiliser un
foreach
boucle pour boucle à travers le dispositif des jetons:Voici un exemple simple:
Où
$device_tokens
est un tableau de dispositif de jetons.Pas de. L'iphone app vous envoyez l'appareil des jetons pour vous (en supposant que c'est programmé pour le faire) et c'est à vous de stocker l'appareil jetons dans une base de données. Lorsque vous souhaitez envoyer des notifications push, vous devez tirer les enregistrements à partir de votre propre base de données et les envoyer. Donc, pour répondre à votre question, l' $device_tokens tableau est pour vous de remplir avec des données (c'est à dire à partir d'une requête SQL à votre propre base de données).
Grand François, qui m'a beaucoup aidé, alors vous recommandons j'ai envoyer l'appareil jeton à partir de cette méthode
- (void)application:(UIApplication *)app didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { NSString *str = [NSString stringWithFormat:@"Device Token=%@",deviceToken]; NSLog(@"%@",str); }
à ma base de données MySQL à l'aide de PHP et puis les récupérer, de les mettre sur une boucle. MerciOriginalL'auteur Francois Deschenes