كيفية استخدام مراكز الإشعارات من PHP

يمكنك الوصول إلى جميع ميزات مراكز الإشعارات من الواجهة الخلفية Java/PHP/Ruby باستخدام واجهة Notification Hub REST كما هو موضح في واجهات برمجة تطبيقات REST لمركز الإشعارات لموضوع MSDN.

في هذا الموضوع نوضح كيفية:

واجهة العميل

يمكن أن توفر واجهة العميل الرئيسية نفس الطرق المتوفرة في . NET Notification Hubs SDK ، والتي تسمح لك بترجمة جميع البرامج التعليمية والعينات المتوفرة حاليا على هذا الموقع مباشرة ، والتي يساهم بها المجتمع على الإنترنت.

يمكنك العثور على جميع التعليمات البرمجية المتوفرة في عينة غلاف PHP REST.

على سبيل المثال، لإنشاء عميل:

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

لإرسال إشعار أصلي لنظام التشغيل iOS:

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

التنفيذ

إذا لم تكن قد قمت بذلك بالفعل ، فاتبع [البرنامج التعليمي للبدء] حتى القسم الأخير حيث يتعين عليك تنفيذ الواجهة الخلفية. أيضا ، إذا كنت تريد يمكنك استخدام التعليمات البرمجية من عينة غلاف PHP REST والانتقال مباشرة إلى قسم إكمال البرنامج التعليمي .

يمكن العثور على جميع التفاصيل لتنفيذ غلاف REST كامل على MSDN. في هذا القسم، نصف تنفيذ PHP للخطوات الرئيسية المطلوبة للوصول إلى نقاط نهاية REST لمراكز الإشعارات:

  1. تحليل سلسلة الاتصال
  2. إنشاء الرمز المميز للتفويض
  3. إجراء مكالمة HTTP

تحليل سلسلة الاتصال

فيما يلي الفئة الرئيسية التي تنفذ العميل ، الذي يقوم منشئه بتحليل سلسلة الاتصال:

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

إنشاء رمز أمان مميز

راجع وثائق Azure للحصول على معلومات حول كيفية إنشاء رمز أمان SAS.

أضف الطريقة generateSasToken إلى NotificationHub الفئة لإنشاء الرمز المميز استنادا إلى عنوان URI للطلب الحالي وبيانات الاعتماد المستخرجة من سلسلة الاتصال.

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;
}

إرسال إشعار

أولا، دعونا نحدد فئة تمثل إشعارا.

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;
    }
}

هذه الفئة عبارة عن حاوية لنص إعلام أصلي ، أو مجموعة من الخصائص في حالة إعلام قالب ، ومجموعة من الرؤوس ، والتي تحتوي على تنسيق (النظام الأساسي الأصلي أو القالب) وخصائص خاصة بالنظام الأساسي (مثل خاصية انتهاء صلاحية Apple ورؤوس WNS).

ارجع إلى وثائق واجهات برمجة تطبيقات REST لمراكز الإشعارات وتنسيقات الأنظمة الأساسية المحددة للإشعارات للاطلاع على جميع الخيارات المتاحة.

مسلحين بهذه الفئة ، يمكننا الآن كتابة طرق إرسال الإشعارات داخل الفصل 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);
    }
} 

ترسل الطرق المذكورة أعلاه طلب HTTP POST إلى /messages نقطة النهاية في مركز الإشعارات الخاص بك ، مع النص الصحيح والرؤوس لإرسال الإشعار.

أكمل البرنامج التعليمي

الآن يمكنك إكمال البرنامج التعليمي بدء الاستخدام عن طريق إرسال الإشعار من الواجهة الخلفية PHP.

قم بتهيئة عميل Notification Hubs (استبدل سلسلة الاتصال واسم الموزع وفقا للتعليمات الواردة في [البرنامج التعليمي للبدء]):

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

ثم أضف رمز الإرسال اعتمادا على النظام الأساسي المستهدف للجوال.

Windows المتجر Windows Phone 8.1 (غير الفضي)

$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 و 8.1 سيلفرلايت

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

أوقد النار

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

يجب أن ينتج عن تشغيل رمز PHP الخاص بك الآن إشعارا يظهر على جهازك المستهدف.

الخطوات التالية

في هذا الموضوع ، أوضحنا كيفية إنشاء عميل PHP REST بسيط لمراكز الإشعارات. من هنا يمكنك:

  • قم بتنزيل عينة غلاف PHP REST الكاملة ، والتي تحتوي على جميع التعليمات البرمجية أعلاه.
  • مواصلة التعرف على ميزة وضع علامات على مراكز الإشعارات في [البرنامج التعليمي للأخبار العاجلة]
  • تعرف على كيفية دفع الإشعارات إلى المستخدمين الفرديين في [البرنامج التعليمي لإعلام المستخدمين]

لمزيد من المعلومات، راجع أيضا مركز مطوري PHP.

إرسال إعلامات منبثقة إلى تطبيقات iOS باستخدام Azure Notification Hubs