2014-12-24 32 views
3

林在我有一個服務器需要發送推送通知到兩個不同的客戶端應用程序而不知道它是哪個應用程序的情況下。是否可以將iOS推送通知發送到兩個不同的應用程序?

我有兩個不同的iOS應用程序(2個不同的包標識符),我有2套不同的所有必需的認證,每個應用程序一個。

我有一個PHP代碼,接收deviceToken和要推送的消息。 該代碼基於reywenderlich的SimplePush,可在此處找到:http://www.raywenderlich.com/32960/apple-push-notification-services-in-ios-6-tutorial-part-1

唯一需要更改的部分是ck.pem文件,它對於每個應用程序都會有所不同。

我能想到的一個解決方案是嘗試兩個不同的ck.pem文件,如果一個失敗的話嘗試另一個。

任何人都可以幫我實現這個PHP代碼?或者如果有更好的解決方案建議?

<?php 

// Put your device token here (without spaces): 
//$deviceToken = 'a6a543b5b19ef7b997b2328'; 

$deviceToken = $_GET["device_token"]; 
$message = $_GET["message"]; 
$elementID = $_GET["element_ID"]; 

// Put your private key's passphrase here: 
$passphrase = '123456'; 

// Put your alert message here: 
//$message = 'My first push notification! yay'; 

//////////////////////////////////////////////////////////////////////////////// 

$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|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' 
    ); 

// Create the extra data 
$body['extra'] = array(
    'element_id' => $elementID 
    ); 


// 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); 

UPDATE:

的解決方案是增加另一段代碼到了最後,以相同的有效載荷發送到第二個服務器:

//connecting to second server 

$ctx = stream_context_create(); 
stream_context_set_option($ctx, 'ssl', 'local_cert', 'SecondCk.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|STREAM_CLIENT_PERSISTENT, $ctx); 

if (!$fp) 
    exit("Failed to connect to note server: $err $errstr" . PHP_EOL); 

// connected to server sending note msg 
$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); 

回答

1

我不知道如何在PHP中執行此操作,但是您應該在打開第一個連接之前簡單地創建有效負載主體+二進制通知,然後創建2個連接(如果可能,則創建2個連接),並將相同的二進制通知發送到o f他們。

最好的問候,
加布裏埃爾Tomitsuka

+0

謝謝,這就是答案,相當簡單:) –

相關問題