2012-04-24 9 views
2

Интеграция APNS в моем приложении для iPhone. Я прошел через Apple Push Notification, предоставленный Apple. У меня есть сомнения на стороне сервера. Ниже вы найдете мои сомнения ниже,Как сохранить все DeviceTokens в php-сервере для приложения APNS iPhone?

1. Apple said to create a server from below steps, 

    Installing the SSL Certificate and Key on the Server: 
    You should install the SSL distribution certificate and private cryptographic key you obtained earlier on the server computer on which the provider code runs and from which it connects with the sandbox or production versions of APNs. To do so, complete the following steps: 
    1.1.Open Keychain Access utility and click the My Certificates category in the left pane. 
    1.2.Find the certificate you want to install and disclose its contents. 
    You'll see both a certificate and a private key. 
    1.3.Select both the certificate and key, choose File > Export Items, and export them as a Personal Information Exchange (.p12) file. 
    1.4.Servers implemented in languages such as Ruby and Perl often are better able to deal with certificates in the Personal Information Exchange format. To convert the certificate to this format, complete the following steps: 
     a.In KeyChain Access, select the certificate and choose File > Export Items. Select the Personal Information Exchange (.p12) option, select a save location, and click Save. 
     b.Launch the Terminal application and enter the following command after the prompt: openssl pkcs12 -in CertificateName.p12 -out CertificateName.pem -nodes 
    1.5.Copy the .pem certificate to the new computer and install it in the appropriate place. 

Am clear to create a server (i assume it will be .php server). Am doubt is how we storing all user's DeviceTokens in the server? 

2. How to send push notifications to all registered devicetokens? 
3. How to send push notifications to a specific user? 

Не могли бы вы дать некоторое предложение относительно моих вопросов? Я получил образец .php-файла по этой ссылке http://www.raywenderlich.com/3443/apple-push-notification-services-tutorial-part-12. Пожалуйста, помогите мне. Заранее спасибо.

ответ

4

Вы можете получить его на ServerSide с этим кодом:

-(void)application:(UIApplication*)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken 
{ 
NSLog(@"My token is: %@", deviceToken); 


    NSData *postData = [[NSString stringWithFormat:@"token=%@", deviceToken] dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES]; 

    NSString *postLength = [NSString stringWithFormat:@"%d",[postData length]]; 

    NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease]; 
    [request setURL:[NSURL URLWithString:[NSString stringWithFormat:@"YOURDOMAIN/FILE.php"]]]; 

    [request setHTTPMethod:@"POST"]; 

    [request setValue:postLength forHTTPHeaderField:@"Content-Length"]; 

    [request setHTTPBody:postData]; 

    NSURLConnection *conn = [[NSURLConnection alloc]initWithRequest:request delegate:self]; 
} 

Просто хранить ваши маркеры в БД ($ _POST [ «маркер»])

Для отправки уведомлений вы должны сделать цикл, который выглядит так:

//getTokens from database 
$deviceToken = getDeviceTokens(); 

foreach($arr AS $key => $val) 
    { 
     // Create the payload body 
     $body['aps'] = array(
       'alert' => 'Puuuuush', 
       'sound' => 'vuvzela.wav', 
       'badge' => ($badge != (null) ? $badge + 1 : 1) 
       ); 

// Encode the payload as JSON 
     $payload = json_encode($body); 

     // Build the binary notification 
     $msg = chr(0) . pack('n', 32) . pack('H*', $val) . 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; 

     $count++; 
    } 
+0

Привет, даниэль. Спасибо за отличный ответ. У меня есть еще одно сомнение, пожалуйста, уточните. 1. Как мы можем выбрать devicetoken конкретного пользователя и отправлять уведомления? 2. Apple подумала, что файл .pem будет сервером. некоторые учебные пособия думали, что сервер будет в php? Можете ли вы разобраться с этим? Заранее спасибо. –

+0

Если мы используем хранилище файлов .pem на локальном компьютере, который будет сервером. Итак, как мы можем закодировать (ваш код) в файле .pem. Не запущен процесс, ожидающий сертификата от босса. Тем не менее у меня много сомнений в APNS.Не могли бы вы мне помочь. Благодарю. –

+0

Я пытаюсь сделать то же самое. Я хочу отправить персонализированные push-уведомления. Я считаю, что я буду хранить токен устройства в локальном хранилище и получить его через javascript в своем приложении PhoneGap. Вот отличный учебник для .pem файла: http://www.raywenderlich.com/3443/apple-push-notification-services-tutorial-part-12 Просто следовать его шаг за шагом , Это мне очень помогло! @Yuvaray, вы должны получить его из своей базы данных, где вы его храните. Но имейте в виду, что вы не знаете, кто этот парень. У вас просто есть номер ... Для персонализации вы должны иметь пользовательский логин или что-то еще. – webprogrammer

1

Вам необходимо хранить все токены устройства на своем сервере. Для этого вам нужно будет создать базу данных. Чтобы отправить push-уведомления, вы отправите свое сообщение и данные токенов устройства в APNS с вашего сервера.

Если вы хотите отправить push-уведомление конкретному пользователю, ваше приложение должно отправить пользовательскую информацию на ваш сервер вместе с токенами устройства. И вам нужно хранить информацию о пользователе и токены устройства в своей базе данных. Если вам нужно отправить уведомление конкретному пользователю, выберите токен этого устройства, сформируйте сообщение и отправьте его в APNS.

В этом двухтомном учебнике вы указали все эти детали. У вас есть загружаемый скрипт в php, который вы можете попробовать.

+0

Большое спасибо за ваш ответ. Не могли бы вы прояснить этот вопрос, если наш сервер APNS будет находиться на платформе .net или должен находиться в файле .php. Можете ли вы поделиться любым примером кода, чтобы получить все токены устройства на сервере? Пожалуйста, помогите мне. Заранее спасибо. –

+0

Ваш сервер может находиться на любой платформе. Не нужно быть php. Дело в том, что ваш сервер должен связаться с APNS (Apple Notification Server) с указанным образом. Идентификаторы устройств отправляются из вашего приложения (устройства IOS) через обычные веб-службы. Ваше приложение будет вызывать веб-службу на вашем сервере с токеном устройства и другой информацией в виде данных POST. – zolio

+0

Здравствуйте, Zolio благодарит за ваш ответ. Не могли бы вы прояснить это. В документе Apple мы можем использовать файл .pem как сервер, который сохраняется на локальном компьютере. Итак, как мы можем использовать .pem-файл в качестве сервера. как мы можем кодировать на сервере? Заранее спасибо. –

 Смежные вопросы

  • Нет связанных вопросов^_^