Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dostęp do wszystkich funkcji usługi Notification Hubs można uzyskać z zaplecza Java/PHP/Ruby przy użyciu interfejsu REST centrum powiadomień zgodnie z opisem w temacie MSDN Notification Hubs API REST.
W tym temacie pokazano, jak:
- Tworzenie klienta REST dla funkcji usługi Notification Hubs w języku PHP;
- Postępuj zgodnie z instrukcją 'Wysyłanie powiadomień push' do aplikacji iOS przy użyciu usługi Azure Notification Hubs dla preferowanej platformy mobilnej, tworząc backend w PHP.
Interfejs klienta
Główny interfejs klienta może zapewnić te same metody, które są dostępne w .NET Notification Hubs SDK, co umożliwia bezpośrednie tłumaczenie wszystkich samouczków i przykładów dostępnych obecnie w tej witrynie, przyczynione przez społeczność w Internecie.
Cały dostępny kod można znaleźć w przykładzie otoczki REST dla PHP.
Aby na przykład utworzyć klienta:
$hub = new NotificationHub("connection string", "hubname");
Aby wysłać powiadomienie natywne dla systemu iOS:
$notification = new Notification("apple", '{"aps":{"alert": "Hello!"}}');
$hub->sendNotification($notification, null);
Implementacja
Jeśli jeszcze tego nie zrobiono, postępuj zgodnie z sekcją [Samouczek rozpoczynania pracy] do ostatniej sekcji, w której musisz zaimplementować zaplecze. Ponadto, jeśli chcesz, możesz użyć kodu z przykładowego wrappera REST w PHP i przejść bezpośrednio do sekcji Zakończenie samouczka.
Wszystkie szczegóły dotyczące implementacji pełnej warstwy REST można znaleźć na witrynie MSDN. W tej sekcji opisano implementację php głównych kroków wymaganych do uzyskania dostępu do punktów końcowych REST usługi Notification Hubs:
- Analizowanie parametrów połączenia
- Generowanie tokenu autoryzacji
- Wykonywanie wywołania HTTP
Analizowanie parametrów połączenia
Oto klasa główna implementująca klienta, której konstruktor analizuje łańcuch połączenia.
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);
}
}
}
}
Tworzenie tokenu zabezpieczającego
Zapoznaj się z dokumentacją platformy Azure, aby uzyskać informacje na temat tworzenia tokenu zabezpieczającego SAS.
Dodaj metodę generateSasToken do klasy NotificationHub, aby utworzyć token na podstawie identyfikatora URI bieżącego żądania i poświadczeń wyodrębnionych z ciągu połączenia.
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;
}
Wysyłanie powiadomienia
Najpierw zdefiniujmy klasę reprezentującą powiadomienie.
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;
}
}
Ta klasa jest kontenerem dla natywnej treści powiadomień lub zestawu właściwości w przypadku powiadomienia opartego na szablonie, oraz zestawu nagłówków, zawierających format (platforma natywna lub szablon) i właściwości związane z daną platformą (takie jak właściwość wygasania Apple i nagłówki WNS).
Zapoznaj się z dokumentacją interfejsów API REST usługi Notification Hubs i formatami określonych platform powiadomień, aby zapoznać się ze wszystkimi dostępnymi opcjami.
Uzbrojony w tę klasę możemy teraz napisać metody wysyłania powiadomień wewnątrz NotificationHub klasy:
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);
}
}
Powyższe metody wysyłają żądanie HTTP POST do /messages punktu końcowego centrum powiadomień z prawidłową treścią i nagłówkami w celu wysłania powiadomienia.
Ukończ samouczek
Teraz możesz ukończyć samouczek Wprowadzenie, wysyłając powiadomienie z zaplecza PHP.
Zainicjuj klienta usługi Notification Hubs (zastąp parametry połączenia i nazwę centrum, jak pokazano w samouczku [Wprowadzenie]):
$hub = new NotificationHub("connection string", "hubname");
Następnie dodaj kod wysyłania w zależności od docelowej platformy mobilnej.
Sklep Windows i Windows Phone 8.1 (niewykorzystujący 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 i 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);
Uruchomienie kodu PHP powinno teraz spowodować wyświetlenie powiadomienia na urządzeniu docelowym.
Następne kroki
W tym temacie pokazano, jak utworzyć prostego klienta REST JĘZYKA PHP dla usługi Notification Hubs. W tym miejscu można wykonywać następujące czynności:
- Pobierz pełny przykład otoki REST języka PHP, który zawiera cały powyższy kod.
- Kontynuuj naukę o funkcji tagowania usługi Notification Hubs w samouczku [Breaking News]
- Dowiedz się więcej o wypychaniu powiadomień do poszczególnych użytkowników w samouczku [Samouczek powiadamiania użytkowników]
Aby uzyskać więcej informacji, zobacz również Centrum deweloperów JĘZYKA PHP.
Wysyłanie powiadomień push do aplikacji iOS przy użyciu usługi Azure Notification Hubs