Mobil

Apple Push Notifications - Php ile bildirim gönderme

Merhaba arkadaşlar sırada php ile bildirim göndermeyi yapacağız. Bu son aşama için sizinle aşağıdaki iki fonksiyonu paylaşıyorum.

Fonksiyonun içerisinde Oluşturduğunuz şifre alanını pem dosyasını oluştururken belirlediğiniz şifre ile değiştirmeyi unutmayın!

1.pushNotificationSingle

Bu fonksiyonun kullanım şekli;

$deviceId = ""; // bu kısım göndereceğiniz kişinin device id si
$message = "Deneme bildirim"; // bu kısım gidecek olan mesaj
$sound = "default"; // bu kısmı değiştirmeyin bu kısmı bildirim sesini farklı bir ses ile iletmek istediğimiz zaman kullanıyoruz bu konu için ayrıca bir yazım olacak şimidilik bu şekilde kalsın.
$title = "Murat Bayri";

pushNotificationSingle($message,$deviceId,$sound,$title);

 

2. pushNotificationAll

$deviceToken = array(); // Birden fazla kişiye göndermek için array oluşturuyoruz.
$message = "Deneme bildirim"; // bu kısım gidecek olan mesaj
$title = "Murat Bayri";
        
$query = mysql_query("select * from notification order by id DESC "); // notification adında bir tablomuz olduğunu düşünelim
while($queryFetch= mysql_fetch_array($query)){
         $deviceToken[] = $queryFetch['deviceid']; // tablonun içerisinde deviceid adında kolonumuz olsun
} 
$count =  pushNotificationAll($message,$title,$deviceToken);

Buradaki $count bize kaç kişiye başarılı bir şekilde bildirim gidip gitmediğini dönecek.

function pushNotificationSingle($message, $deviceId, $sound, $title) {

$ctx = stream_context_create();
stream_context_set_option($ctx, 'ssl', 'local_cert', 'pushcert.pem');
stream_context_set_option($ctx, 'ssl', 'passphrase', "Oluşturduğunuz şifre");
 
// development için ssl://gateway.sandbox.push.apple.com:2195
// production için ssl://gateway.push.apple.com:2195
$fp = stream_socket_client('ssl://gateway.push.apple.com:2195', 
    $hataKodu, 
    $hataMesaji, 
    60, 
    STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, 
    $ctx);
 
if (!$fp)
exit("Bağlantı başarısız: $hataKodu $hataMesaji");
$body['aps'] = array(
    'badge' => 1,
    'sound' => $sound,
    'alert' => array(
        'title' => $title,
        'body' => $message,
        'category' => 'notification'
    ),
);

$body['title'] = $title;

$payload = json_encode($body);
$msg = chr(0) . pack('n', 32) . pack('H*', $deviceId) . pack('n', strlen($payload)) . $payload;
$result = fwrite($fp, $msg, strlen($msg));
fclose($fp);

}



function pushNotificationAll($message,$title,$tokenArray){
    
    $kaccihaz = 0; 
    $ctx = stream_context_create();
    stream_context_set_option($ctx, 'ssl', 'local_cert', 'pushcert.pem');
    stream_context_set_option($ctx, 'ssl', 'passphrase', 'Oluşturduğunuz şifre');
     
    // development için ssl://gateway.sandbox.push.apple.com:2195
    // production için ssl://gateway.push.apple.com:2195
    $fp = stream_socket_client('ssl://gateway.push.apple.com:2195', 
        $hataKodu, 
        $hataMesaji, 
        60, 
        STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, 
        $ctx);
     
    if (!$fp)
    exit("Bağlantı başarısız: $hataKodu $hataMesaji");
    $body['aps'] = array(
        'badge' => 1,
        'alert' => array(
            'title' => $title,
            'body' => $message,
            'category' => 'notification'
        ),
        'sound' => 'default'
    );
    $payload = json_encode($body);
    
    foreach($tokenArray as $token){
        $msg = chr(0) . pack("n",32) . pack('H*', str_replace(' ', '', $token)) . pack("n",strlen($payload)) . $payload;
        $result = fwrite($fp, $msg, strlen($msg));
        if ($result){
            $kaccihaz++;
        }else{
            continue;   
        }
    }
    fclose($fp);
    
    return $kaccihaz;
}