Bagikan melalui


Cara menggunakan Notification Hubs dari PHP

Anda dapat mengakses semua fitur Notification Hubs dari back-end Java/PHP/Ruby menggunakan antarmuka Notification Hub REST seperti yang dijelaskan dalam topik MSDN Notification Hubs REST API.

Dalam topik ini kami menunjukkan cara:

Antarmuka klien

Antarmuka klien utama dapat menyediakan metode yang sama yang tersedia di .NET Notification Hubs SDK, yang memungkinkan Anda untuk secara langsung menerjemahkan semua tutorial dan sampel yang saat ini tersedia di situs ini, dan disumbangkan oleh komunitas di internet.

Anda dapat menemukan semua kode yang tersedia dalam sampel pembungkus PHP REST.

Misalnya, untuk membuat klien:

$hub = new NotificationHub("connection string", "hubname");

Untuk mengirim notifikasi native iOS:

$notification = new Notification("apple", '{"aps":{"alert": "Hello!"}}');
$hub->sendNotification($notification, null);

Implementasi

Jika Anda belum melakukannya, ikuti [Tutorial memulai] hingga bagian terakhir di mana Anda harus mengimplementasikan backend. Juga, jika Anda ingin Anda dapat menggunakan kode dari sampel pembungkus PHP REST dan langsung ke bagian Lengkapi tutorial.

Semua detail untuk mengimplementasikan pembungkus REST lengkap dapat ditemukan di MSDN. Di bagian ini, kami menjelaskan implementasi PHP dari langkah-langkah utama yang diperlukan untuk mengakses titik akhir Notification Hubs REST:

  1. Mendapatkan string koneksi
  2. Token otorisasi kedaluwarsa:
  3. Melakukan panggilan HTTP

Mendapatkan string koneksi

Berikut adalah kelas utama yang mengimplementasikan klien, yang konstruktornya yang mengurai string koneksi:

class NotificationHub {
    const API_VERSION = "?api-version=2013-10";

    private $endpoint;
    private $hubPath;
    private $sasKeyName;
    private $sasKeyValue;

    function __construct($connectionString, $hubPath) {
        $this->hubPath = $hubPath;

        $this->parseConnectionString($connectionString);
    }

    private function parseConnectionString($connectionString) {
        $parts = explode(";", $connectionString);
        if (sizeof($parts) != 3) {
            throw new Exception("Error parsing connection string: " . $connectionString);
        }

        foreach ($parts as $part) {
            if (strpos($part, "Endpoint") === 0) {
                $this->endpoint = "https" . substr($part, 11);
            } else if (strpos($part, "SharedAccessKeyName") === 0) {
                $this->sasKeyName = substr($part, 20);
            } else if (strpos($part, "SharedAccessKey") === 0) {
                $this->sasKeyValue = substr($part, 16);
            }
        }
    }
}

Buat peran keamanan

Lihat dokumentasi Azure untuk informasi tentang cara Membuat Token Keamanan SAS.

Tambahkan generateSasToken metode ke kelas NotificationHub untuk membuat token berdasarkan URI permintaan saat ini dan kredensial yang diekstrak dari string koneksi.

private function generateSasToken($uri) {
    $targetUri = strtolower(rawurlencode(strtolower($uri)));

    $expires = time();
    $expiresInMins = 60;
    $expires = $expires + $expiresInMins * 60;
    $toSign = $targetUri . "\n" . $expires;

    $signature = rawurlencode(base64_encode(hash_hmac('sha256', $toSign, $this->sasKeyValue, TRUE)));

    $token = "SharedAccessSignature sr=" . $targetUri . "&sig="
                . $signature . "&se=" . $expires . "&skn=" . $this->sasKeyName;

    return $token;
}

Uji kirim pemberitahuan

Pertama, mari kita mendefinisikan kelas yang mewakili notifikasi.

class Notification {
    public $format;
    public $payload;

    # array with keynames for headers
    # Note: Some headers are mandatory: Windows: X-WNS-Type, WindowsPhone: X-NotificationType
    # Note: For Apple you can set Expiry with header: ServiceBusNotification-ApnsExpiry in W3C DTF, YYYY-MM-DDThh:mmTZD (for example, 1997-07-16T19:20+01:00).
    public $headers;

    function __construct($format, $payload) {
        if (!in_array($format, ["template", "apple", "windows", "fcm", "windowsphone"])) {
            throw new Exception('Invalid format: ' . $format);
        }

        $this->format = $format;
        $this->payload = $payload;
    }
}

Kelas ini adalah wadah untuk badan pemberitahuan asli, atau sekumpulan properti pada kasus pemberitahuan template, dan satu set header, yang berisi format (platform atau template asli) dan properti khusus platform (seperti properti kedaluwarsa Apple dan header WNS).

Lihat dokumentasi API REST Microsoft Azure Notification Hubs dan format platform notifikasi tertentu untuk semua opsi yang tersedia.

Berbekal kelas ini, kita sekarang dapat menulis metode kirim pemberitahuan di dalam kelas NotificationHub:

public function sendNotification($notification, $tagsOrTagExpression="") {
    if (is_array($tagsOrTagExpression)) {
        $tagExpression = implode(" || ", $tagsOrTagExpression);
    } else {
        $tagExpression = $tagsOrTagExpression;
    }

    # build uri
    $uri = $this->endpoint . $this->hubPath . "/messages" . NotificationHub::API_VERSION;
    $ch = curl_init($uri);

    if (in_array($notification->format, ["template", "apple", "fcm"])) {
        $contentType = "application/json";
    } else {
        $contentType = "application/xml";
    }

    $token = $this->generateSasToken($uri);

    $headers = [
        'Authorization: '.$token,
        'Content-Type: '.$contentType,
        'ServiceBusNotification-Format: '.$notification->format
    ];

    if ("" !== $tagExpression) {
        $headers[] = 'ServiceBusNotification-Tags: '.$tagExpression;
    }

    # add headers for other platforms
    if (is_array($notification->headers)) {
        $headers = array_merge($headers, $notification->headers);
    }

    curl_setopt_array($ch, array(
        CURLOPT_POST => TRUE,
        CURLOPT_RETURNTRANSFER => TRUE,
        CURLOPT_SSL_VERIFYPEER => FALSE,
        CURLOPT_HTTPHEADER => $headers,
        CURLOPT_POSTFIELDS => $notification->payload
    ));

    // Send the request
    $response = curl_exec($ch);

    // Check for errors
    if($response === FALSE){
        throw new Exception(curl_error($ch));
    }

    $info = curl_getinfo($ch);

    if ($info['http_code'] <> 201) {
        throw new Exception('Error sending notification: '. $info['http_code'] . ' msg: ' . $response);
    }
} 

Metode di atas mengirim permintaan HTTP POST /messages ke titik akhir hub notifikasi Anda, dengan isi dan header yang benar untuk mengirim pemberitahuan.

Selesaikan tutorial

Sekarang Anda dapat menyelesaikan tutorial Memulai dengan mengirim pemberitahuan dari backend PHP.

Inisialisasi klien Microsoft Azure Notification Hubs Anda (ganti string koneksi dan nama hub seperti yang diinstruksikan dalam [Tutorial memulai]):

$hub = new NotificationHub("connection string", "hubname");

Kemudian tambahkan kode kirim tergantung pada platform seluler target Anda.

Windows Store dan Windows Phone 8.1 (non-Silverlight)

$toast = '<toast><visual><binding template="ToastText01"><text id="1">Hello from PHP!</text></binding></visual></toast>';
$notification = new Notification("windows", $toast);
$notification->headers[] = 'X-WNS-Type: wns/toast';
$hub->sendNotification($notification, null);

iOS

$alert = '{"aps":{"alert":"Hello from PHP!"}}';
$notification = new Notification("apple", $alert);
$hub->sendNotification($notification, null);

Android

$message = '{"data":{"msg":"Hello from PHP!"}}';
$notification = new Notification("fcm", $message);
$hub->sendNotification($notification, null);

Windows Phone 8.0 dan 8.1 Silverlight

$toast = '<?xml version="1.0" encoding="utf-8"?>' .
            '<wp:Notification xmlns:wp="WPNotification">' .
               '<wp:Toast>' .
                    '<wp:Text1>Hello from PHP!</wp:Text1>' .
               '</wp:Toast> ' .
            '</wp:Notification>';
$notification = new Notification("windowsphone", $toast);
$notification->headers[] = 'X-WindowsPhone-Target : toast';
$notification->headers[] = 'X-NotificationClass : 2';
$hub->sendNotification($notification, null);

Kindle Fire

$message = '{"data":{"msg":"Hello from PHP!"}}';
$notification = new Notification("adm", $message);
$hub->sendNotification($notification, null);

Menjalankan kode Java Anda sekarang akan menghasilkan pemberitahuan yang muncul di perangkat target Anda.

Langkah berikutnya

Topik ini menunjukkan cara membuat klien PHP REST sederhana untuk Notification Hubs. Setelahnya, Anda bisa:

  • Unduh sampel pembungkus PHP REST lengkap, yang berisi semua kode di atas.
  • Lanjutkan mempelajari tentang fitur penandaan Microsoft Azure Notification Hubs di [tutorial Breaking News]
  • Pelajari tentang pemberitahuan pushing kepada pengguna individual di [Beri Tahu Pengguna tutorial]

Untuk informasi selengkapnya, lihat juga Pusat Pengembang PHP.

Mengirim pemberitahuan push ke aplikasi iOS menggunakan Microsoft Azure Notification Hubs