簡體   English   中英

從服務器向所有設備發送推送通知

[英]Send Push Notifications to all devices from server

我想向所有設備發送推送通知。 我通過將所有設備令牌保留在數據庫中來做到這一點。 然后loop將我的消息發送到所有設備。

這是我將設備令牌發送到服務器的代碼:

NSString *deviceTokenString = [[[deviceToken description]
                           stringByReplacingOccurrencesOfString: @"<" withString: @""]
                          stringByReplacingOccurrencesOfString: @">" withString: @""];


NSString *devicedeviceTokenForRealNow = deviceTokenString;

deviceTokenString = [deviceTokenString stringByReplacingOccurrencesOfString:@" " withString:@"+"];

NSString *strURL = [NSString stringWithFormat:@"http://website/DeviceToken.php?devicetoken=%@",deviceTokenString];
NSLog(@"%@", strURL);
NSData *dataURL = [NSData dataWithContentsOfURL:[NSURL URLWithString:strURL]];

NSString *strResult = [[NSString alloc] initWithData:dataURL encoding:NSUTF8StringEncoding];

NSLog(@"%@", strResult);

NSLog(@"%@", devicedeviceTokenForRealNow);

這是我的PHP代碼:

<?PHP

if($_POST['message']){

///COUNT THE NUMBER OF DEVICES THAT IS IN THE DATABASE TO USE IN LOOP

    $con = mysql_connect(localhost,load2unet_root,hzXC3rUm) or die(mysql_error());
    mysql_select_db(load2unet_db,$con) or die(mysql_error());

    $sql = "SELECT COUNT(DeviceID) FROM DeviceToken";
    $res = mysql_query($sql,$con) or die(mysql_error());

    $row = mysql_fetch_array($res);

    $hello .= "\"" . $row["COUNT(DeviceID)"] . "\"";

    while($row = mysql_fetch_array($res)){
        $hello .= " , \"" . $row["COUNT(DeviceID)"] . "\"";

    }


/// USE LOOP TO SEND THE PUSH NOTIFICATION TO ALL DEVICES

for ($i=1; $i<=$hello; $i++){


    $con = mysql_connect($DB_HostName,$DB_User,$DB_Pass) or die(mysql_error());
    mysql_select_db($DB_Name,$con) or die(mysql_error());

    $sql = "SELECT DeviceToken FROM $DB_Table WHERE DeviceID = $i;";
    $res = mysql_query($sql,$con) or die(mysql_error());

    $row = mysql_fetch_array($res);

    //$result .= "\"" . $row["DeviceToken"] . "\"";
    $deviceToken .= "" . $row["DeviceToken"] . "";
    while($row = mysql_fetch_array($res)){
        $deviceToken .= "" . $row["DeviceToken"] . "";

    }


$message = stripslashes($_POST['message']);

$payload = '{
                "aps" : 

                    { "alert" : "'.$message.'",
                      "badge" : 1,
                      "sound" : "bingbong.aiff"
                    } 
            }';

$ctx = stream_context_create();
stream_context_set_option($ctx, 'ssl', 'local_cert', 'no');
stream_context_set_option($ctx, 'ssl', 'passphrase', 'no');
$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 "Notifications sent!";
}

$devArray = array();
$devArray[] = $deviceToken;

foreach($devArray as $deviceToken){
    $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);
print "This is the Device Token Sent Each Time".$deviceToken."\n";

}

}

使用此代碼,我嘗試for ($i=1; $i<=1; $i++)並且此方法有效。 但是不適合for ($i=1; $i<=6; $i++)嗎?

誰能幫忙嗎? 任何幫助將不勝感激! :D

試試ApnsPHP庫,

它也有很多演示在這里sample_push_many.php

希望這可以幫到你。

謝謝

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM