Erste Schritte mit Notification Hubs mit Baidu

Baidu Cloud Push ist ein chinesischer Clouddienst, mit dem Sie Pushbenachrichtigungen an mobile Geräte senden können.

Da Google Play und FCM (Firebase Cloud Messaging) nicht in China verfügbar sind, ist es notwendig, verschiedene App-Stores und Pushdienste zu verwenden. Baidu ist einer von ihnen und wird derzeit vom Notification Hub verwendet.

Voraussetzungen

Dieses Lernprogramm erfordert:

Hinweis

Sie benötigen ein aktives Azure-Konto, um dieses Lernprogramm abzuschließen. Wenn Sie über kein Konto verfügen, können Sie in nur wenigen Minuten ein kostenloses Testkonto erstellen. Ausführliche Informationen finden Sie in der kostenlosen Azure-Testversion.

Führen Sie zunächst die folgenden Schritte aus:

  1. Erstellen Sie ein Baidu-Konto.
  2. Erstellen Sie ein Baidu-Cloud-Pushprojekt, und notieren Sie sich den API-Schlüssel und den geheimen Schlüssel.

Konfigurieren eines neuen Benachrichtigungshubs

  1. Melden Sie sich beim Azure-Portal an.

  2. Wählen Sie im Menü links Alle Dienste aus. Screenshot: Auswählen aller Dienste für einen vorhandenen Namespace

  3. Geben Sie Notification Hubs in das Textfeld Dienste filtern ein. Wählen Sie das Sternsymbol neben dem Dienstnamen aus, um den Dienst im linken Menü zum Abschnitt FAVORITEN hinzuzufügen. Wählen Sie Notification Hubs aus.

    Screenshot: Filtern nach Notification Hubs

  4. Wählen Sie auf der Seite Notification Hubs in der Symbolleiste die Option Erstellen aus.

    Screenshot: Erstellen eines neuen Notification Hubs

  5. Führen Sie auf der Registerkarte Grundlagen der Seite Notification Hub die folgenden Schritte aus:

    1. Wählen Sie unter Abonnement den Namen des Azure-Abonnements aus, das Sie verwenden möchten, und wählen Sie dann eine vorhandene Ressourcengruppe aus, oder erstellen Sie eine neue Ressourcengruppe.

    2. Geben Sie unter Namespacedetails einen eindeutigen Namen für den neuen Namespace ein.

    3. Ein Namespace enthält mindestens einen Notification Hub. Geben Sie daher unter Notification Hub-Details einen Namen für den Hub ein.

    4. Wählen Sie im Dropdown-Listenfeld Standort einen Wert aus. Dieser Wert gibt den Standort an, an dem der Hub erstellt werden soll.

      Screenshot mit Notification Hub-Details.

    5. Überprüfen Sie die Option Verfügbarkeitszonen. Wenn Sie eine Region mit Verfügbarkeitszonen ausgewählt haben, ist das Kontrollkästchen standardmäßig aktiviert. Verfügbarkeitszonen sind ein kostenpflichtiges Feature, für das in Ihrem Tarif zusätzliche Gebühren anfallen.

    6. Wählen Sie Ihre Option für die Notfallwiederherstellung aus: Keine, Gekoppelte Wiederherstellungsregion oder Flexible Wiederherstellungsregion. Wenn Sie Gekoppelte Wiederherstellungsregion auswählen, wird die Failoverregion angezeigt. Wenn Sie Flexible Wiederherstellungsregion auswählen, verwenden Sie die Dropdownliste, um aus einer Liste mit Wiederherstellungsregionen auszuwählen.

      Screenshot der Details der Verfügbarkeitszone.

    7. Wählen Sie "Erstellen" aus.

  6. Wählen Sie nach Abschluss der Bereitstellung Zur Ressource wechseln.

  6. Wählen Sie in Ihrem Benachrichtigungshub Benachrichtigungsdienste und dann Baidu (Android China) aus.

     Azure Notification Hubs – Baidu

  7. Scrollen Sie nach unten zum Abschnitt "Baidu-Benachrichtigungseinstellungen". Geben Sie den API-Schlüssel und den geheimen Schlüssel ein, den Sie aus der Baidu-Konsole erhalten haben, im Baidu-Cloud-Pushprojekt. Klicken Sie dann auf "Speichern".

     Azure Notification Hubs – Baidu Secrets

Ihr Benachrichtigungshub ist jetzt für die Arbeit mit Baidu konfiguriert. Außerdem verfügen Sie über die Verbindungszeichenfolgen zum Registrieren Ihrer App zum Senden und Empfangen von Pushbenachrichtigungen.You also have the connection strings to register your app to send and receive push notifications.

Notieren Sie sich die Werte für DefaultListenSharedAccessSignature und DefaultFullSharedAccessSignature aus dem Fenster „Verbindungsinformationen aufrufen“.

Verbinden Ihrer App mit dem Notification Hub

  1. Erstellen Sie in Android Studio ein neues Android-Projekt (Datei > neues > Projekt).

    Azure Notification Hubs – Baidu New Project

  2. Geben Sie einen Anwendungsnamen ein, und stellen Sie sicher, dass die mindestens erforderliche SDK-Version auf API 16 festgelegt ist: Android 4.1. Stellen Sie außerdem sicher, dass der Paketname (应用包名) mit dem im Baidu Cloud Push Portal identisch ist.

    Azure Notification Hubs – Baidu Min SDK1 Azure Notification Hubs – Baidu Min SDK2

  3. Klicken Sie auf "Weiter", und folgen Sie dem Assistenten, bis das Fenster "Aktivität erstellen" angezeigt wird. Stellen Sie sicher, dass "Leere Aktivität" ausgewählt ist, und wählen Sie schließlich "Fertig stellen" aus, um eine neue Android-Anwendung zu erstellen.

    Azure Notification Hubs – Baidu-Aktivität hinzufügen

  4. Stellen Sie sicher, dass das Projekt-Build-Ziel korrekt eingestellt ist.

  5. Fügen Sie dann Azure Notification Hubs-Bibliotheken hinzu. Fügen Sie in der Build.Gradle Datei für die App die folgenden Zeilen im Abschnitt "Abhängigkeiten" hinzu.

    implementation 'com.microsoft.azure:notification-hubs-android-sdk:0.6@aar'
    implementation 'com.microsoft.azure:azure-notifications-handler:1.0.1@aar'
    

    Fügen Sie nach dem Abschnitt „dependencies“ das folgende Repository hinzu:

    repositories {
        maven {
            url "https://dl.bintray.com/microsoftazuremobile/SDK"
        }
    }
    

    Um den Listenkonflikt zu vermeiden, fügen Sie den folgenden Code in der Datei des Manifest.xml Projekts hinzu:

    <manifest package="YOUR.PACKAGE.NAME"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:android="http://schemas.android.com/apk/res/android">
    

    und im <application/> Tag:

    <application
        tools:replace="android:allowBackup,icon,theme,label">
    
  6. Laden Sie das Baidu Push Android SDK herunter und entpacken Sie es. Kopieren Sie die pushservice-x.y.z jar Datei im Ordner "libs". Kopieren Sie dann die .so Dateien in die src/main/jniLibs Ordner (erstellen Sie einen neuen Ordner) Ihrer Android-Anwendung.

    Azure Notification Hubs – Baidu SDK Libs

  7. Klicken Sie im Ordner des libs Projekts mit der rechten Maustaste auf die pushervice-x.y.z.jar Datei. Wählen Sie "Als Bibliothek hinzufügen " aus, um diese Bibliothek in das Projekt einzufügen.

    Azure Notification Hubs – Baidu Als Bibliothek hinzufügen

  8. Öffnen Sie die Datei des AndroidManifest.xml Android-Projekts, und fügen Sie die vom Baidu SDK erforderlichen Berechtigungen hinzu. Ersetzen Sie YOURPACKAGENAME durch Ihren Paketnamen.

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
    <uses-permission android:name="android.permission.WRITE_SETTINGS" />
    <uses-permission android:name="android.permission.VIBRATE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.ACCESS_DOWNLOAD_MANAGER" />
    <uses-permission android:name="android.permission.DOWNLOAD_WITHOUT_NOTIFICATION" />
    <uses-permission android:name="android.permission.EXPAND_STATUS_BAR" />
    !! <uses-permission android:name="baidu.push.permission.WRITE_PUSHINFOPROVIDER.YOURPACKAGENAME" />
    !!<permission android:name="baidu.push.permission.WRITE_PUSHINFOPROVIDER.YOURPACKAGENAME" android:protectionLevel="normal" />
    
    
  9. Fügen Sie die folgende Konfiguration innerhalb des Anwendungselements nach dem .MainActivity-Aktivitätselement hinzu, und ersetzen Sie den Projektnamen (z. B. com.example.BaiduTest).

    <activity
        android:name="com.baidu.android.pushservice.richmedia.MediaViewActivity"
        android:configChanges="orientation|keyboardHidden"
        android:label="MediaViewActivity" />
    <activity
        android:name="com.baidu.android.pushservice.richmedia.MediaListActivity"
        android:configChanges="orientation|keyboardHidden"
        android:label="MediaListActivity"
        android:launchMode="singleTask" />
    
    <!-- Push application definition message -->
    <receiver android:name=".MyPushMessageReceiver">
        <intent-filter>
    
            <!-- receive push message-->
            <action android:name="com.baidu.android.pushservice.action.MESSAGE" />
            <!-- receive bind,unbind,fetch,delete.. message-->
            <action android:name="com.baidu.android.pushservice.action.RECEIVE" />
            <action android:name="com.baidu.android.pushservice.action.notification.CLICK" />
        </intent-filter>
    </receiver>
    
    <receiver
        android:name="com.baidu.android.pushservice.PushServiceReceiver"
        android:process=":bdservice_v1">
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED" />
            <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
            <action android:name="com.baidu.android.pushservice.action.notification.SHOW" />
            <action android:name="com.baidu.android.pushservice.action.media.CLICK" />
            <action android:name="android.intent.action.MEDIA_MOUNTED" />
            <action android:name="android.intent.action.USER_PRESENT" />
            <action android:name="android.intent.action.ACTION_POWER_CONNECTED" />
            <action android:name="android.intent.action.ACTION_POWER_DISCONNECTED" />
        </intent-filter>
    </receiver>
    
    <receiver
        android:name="com.baidu.android.pushservice.RegistrationReceiver"
        android:process=":bdservice_v1">
        <intent-filter>
            <action android:name="com.baidu.android.pushservice.action.METHOD" />
            <action android:name="com.baidu.android.pushservice.action.BIND_SYNC" />
        </intent-filter>
        <intent-filter>
            <action android:name="android.intent.action.PACKAGE_REMOVED" />
    
            <data android:scheme="package" />
        </intent-filter>
    </receiver>
    
    <service
        android:name="com.baidu.android.pushservice.PushService"
        android:exported="true"
        android:process=":bdservice_v1">
        <intent-filter>
            <action android:name="com.baidu.android.pushservice.action.PUSH_SERVICE" />
        </intent-filter>
    </service>
    
    <service
        android:name="com.baidu.android.pushservice.CommandService"
        android:exported="true" />
    
    <!-- Adapt the ContentProvider declaration required for the Android N system, and the write permissions include the application package name-->
    <provider
        android:name="com.baidu.android.pushservice.PushInfoProvider"
        android:authorities="com.baidu.push.example.bdpush"
        android:exported="true"
        android:protectionLevel="signature"
        android:writePermission="baidu.push.permission.WRITE_PUSHINFOPROVIDER. yourprojectname  " />
    
    <!-- API Key of the Baidu application -->
    <meta-data
        android:name="api_key"
        !!   android:value="api_key" />
    </application>
    
  10. Fügen Sie dem Projekt eine neue Klasse namens ConfigurationSettings.java hinzu.

    public class ConfigurationSettings {
        public static String API_KEY = "...";
        public static String NotificationHubName = "...";
        public static String NotificationHubConnectionString = "...";
    }
    

    Legen Sie den Wert der API_KEY Zeichenfolge mit dem API_KEY aus dem Baidu Cloud-Projekt fest.

    Setzen Sie den Wert der Zeichenfolge NotificationHubName mit dem Namen Ihres Notification Hubs aus dem Azure-Portal und dann NotificationHubConnectionString mit DefaultListenSharedAccessSignature aus dem Azure-Portal.

  11. Öffnen Sie MainActivity.java, und fügen Sie der onCreate-Methode Folgendes hinzu:

    PushManager.startWork(this, PushConstants.LOGIN_TYPE_API_KEY,  API_KEY );
    
  12. Fügen Sie eine neue Klasse mit dem Namen MyPushMessageReceiver.javahinzu, und fügen Sie ihr den folgenden Code hinzu. Es ist die Klasse, die die Pushbenachrichtigungen verarbeitet, die vom Baidu-Pushserver empfangen werden.

    package your.package.name;
    
    import android.content.Context;
    import android.content.Intent;
    import android.os.AsyncTask;
    import android.text.TextUtils;
    import android.util.Log;
    
    import com.baidu.android.pushservice.PushMessageReceiver;
    import com.microsoft.windowsazure.messaging.NotificationHub;
    import org.json.JSONException;
    import org.json.JSONObject;
    
    import java.util.List;
    
    public class MyPushMessageReceiver extends PushMessageReceiver {
    
        public static final String TAG = MyPushMessageReceiver.class
                .getSimpleName();
        public static NotificationHub hub = null;
        public static String mChannelId, mUserId;
    
        @Override
        public void onBind(Context context, int errorCode, String appid,
                        String userId, String channelId, String requestId) {
            String responseString = "onBind errorCode=" + errorCode + " appid="
                    + appid + " userId=" + userId + " channelId=" + channelId
                    + " requestId=" + requestId;
            Log.d(TAG, responseString);
    
            if (errorCode == 0) {
                // Binding successful
                Log.d(TAG, " Binding successful");
            }
            try {
                if (hub == null) {
                    hub = new NotificationHub(
                            ConfigurationSettings.NotificationHubName,
                            ConfigurationSettings.NotificationHubConnectionString,
                            context);
                    Log.i(TAG, "Notification hub initialized");
                }
            } catch (Exception e) {
                Log.e(TAG, e.getMessage());
            }
            mChannelId = channelId;
            mUserId = userId;
    
            registerWithNotificationHubs();
        }
        private void registerWithNotificationHubs() {
    
            new AsyncTask<Void, Void, Void>() {
                @Override
                protected Void doInBackground(Void... params) {
                    try {
                        hub.registerBaidu(mUserId, mChannelId);
                        Log.i(TAG, "Registered with Notification Hub - '"
                                + ConfigurationSettings.NotificationHubName + "'"
                                + " with UserId - '"
                                + mUserId + "' and Channel Id - '"
                                + mChannelId + "'");
                    } catch (Exception e) {
                        Log.e(TAG, e.getMessage());
                    }
                    return null;
                }
            }.execute(null, null, null);
        }
    
        @Override
        public void onMessage(Context context, String message,
                            String customContentString) {
            String messageString = " onMessage=\"" + message
                    + "\" customContentString=" + customContentString;
            Log.d(TAG, messageString);
            if (!TextUtils.isEmpty(customContentString)) {
                JSONObject customJson = null;
                try {
                    customJson = new JSONObject(customContentString);
                    String myvalue = null;
                    if (!customJson.isNull("mykey")) {
                        myvalue = customJson.getString("mykey");
                    }
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
    
        }
    
        @Override
        public void onNotificationArrived(Context context, String title, String description, String customContentString) {
            String notifyString = " Notice Arrives onNotificationArrived  title=\"" + title
                    + "\" description=\"" + description + "\" customContent="
                    + customContentString;
            Log.d(TAG, notifyString);
            if (!TextUtils.isEmpty(customContentString)) {
                JSONObject customJson = null;
                try {
                    customJson = new JSONObject(customContentString);
                    String myvalue = null;
                    if (!customJson.isNull("mykey")) {
                        myvalue = customJson.getString("mykey");
                    }
                } catch (JSONException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
    
        @Override
        public void onNotificationClicked(Context context, String title, String description, String customContentString) {
            String notifyString = " onNotificationClicked title=\"" + title + "\" description=\""
                    + description + "\" customContent=" + customContentString;
            Log.d(TAG, notifyString);
            Intent intent = new Intent(context.getApplicationContext(),MainActivity.class);
            intent.putExtra("title",title);
            intent.putExtra("description",description);
            intent.putExtra("isFromNotify",true);
            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            context.getApplicationContext().startActivity(intent);
    
        }
    
        @Override
        public void onSetTags(Context context, int errorCode,
                            List<String> successTags, List<String> failTags, String requestId) {
            String responseString = "onSetTags errorCode=" + errorCode
                    + " successTags=" + successTags + " failTags=" + failTags
                    + " requestId=" + requestId;
            Log.d(TAG, responseString);
    
        }
    
        @Override
        public void onDelTags(Context context, int errorCode,
                            List<String> successTags, List<String> failTags, String requestId) {
            String responseString = "onDelTags errorCode=" + errorCode
                    + " successTags=" + successTags + " failTags=" + failTags
                    + " requestId=" + requestId;
            Log.d(TAG, responseString);
    
        }
    
        @Override
        public void onListTags(Context context, int errorCode, List<String> tags,
                            String requestId) {
            String responseString = "onListTags errorCode=" + errorCode + " tags="
                    + tags;
            Log.d(TAG, responseString);
    
        }
    
        @Override
        public void onUnbind(Context context, int errorCode, String requestId) {
            String responseString = "onUnbind errorCode=" + errorCode
                    + " requestId = " + requestId;
            Log.d(TAG, responseString);
    
            if (errorCode == 0) {
                // Unbinding is successful
                Log.d(TAG, " Unbinding is successful ");
            }
        }
    }
    

Senden von Benachrichtigungen an Ihre App

Sie können den Empfang von Benachrichtigungen über das Azure-Portal schnell über die Schaltfläche " Senden " im Konfigurationsbildschirm des Benachrichtigungshubs testen, wie in den folgenden Bildschirmen dargestellt:

Screenshot des Azure-Portals mit der Option Screenshot zur Seite

Pushbenachrichtigungen werden normalerweise in einem Back-End-Dienst wie Mobile Services oder ASP.NET mithilfe einer kompatiblen Bibliothek gesendet. Wenn eine Bibliothek für Ihr Back-End nicht verfügbar ist, können Sie die REST-API direkt zum Senden von Benachrichtigungen verwenden.

Aus Gründen der Einfachheit verwendet dieses Lernprogramm eine Konsolen-App als Demonstration zum Senden einer Benachrichtigung mit dem .NET SDK. Wir empfehlen jedoch die Verwendung von Benachrichtigungshubs, um Benachrichtigungen an Benutzer zu übertragen , als nächster Schritt zum Senden von Benachrichtigungen von einem ASP.NET-Back-End.

Hier sind unterschiedliche Ansätze zum Senden von Benachrichtigungen:

(Optional) Senden von Benachrichtigungen von einer .NET-Konsolen-App.

In diesem Abschnitt wird das Senden einer Benachrichtigung mithilfe einer .NET-Konsolen-App angezeigt.

  1. Erstellen Sie eine neue Visual C#-Konsolenanwendung:

    Screenshot des Dialogfelds

  2. Legen Sie im Konsolenfenster des Paket-Managers das Standardprojekt auf das neue Konsolenanwendungsprojekt fest, und führen Sie dann im Konsolenfenster den folgenden Befehl aus:

    Install-Package Microsoft.Azure.NotificationHubs
    

    Diese Anweisung fügt einen Verweis auf das Azure Notification Hubs SDK mithilfe des Microsoft.Azure.Notification Hubs NuGet-Pakets hinzu.

    Screenshot des Dialogfelds

  3. Öffnen Sie die Datei Program.cs und fügen Sie die folgende using-Anweisung hinzu:

    using Microsoft.Azure.NotificationHubs;
    
  4. Fügen Sie in Ihrer Program Klasse die folgende Methode hinzu und ersetzen Sie DefaultFullSharedAccessSignatureSASConnectionString und NotificationHubName mit den Werten, die Sie haben.

    private static async void SendNotificationAsync()
    {
        NotificationHubClient hub = NotificationHubClient.CreateClientFromConnectionString("DefaultFullSharedAccessSignatureSASConnectionString", "NotificationHubName");
        string message = "{\"title\":\"((Notification title))\",\"description\":\"Hello from Azure\"}";
        var result = await hub.SendBaiduNativeNotificationAsync(message);
    }
    
  5. Fügen Sie die folgenden Zeilen in Ihrer Main Methode hinzu:

    SendNotificationAsync();
    Console.ReadLine();
    

Teste deine App

Um diese App mit einem tatsächlichen Telefon zu testen, schließen Sie einfach das Telefon mit einem USB-Kabel an Ihren Computer an. Mit dieser Aktion wird Ihre App auf das angefügte Telefon geladen.

Um diese App mit dem Emulator zu testen, klicken Sie auf der oberen Symbolleiste von Android Studio auf "Ausführen", und wählen Sie dann Ihre App aus: Sie startet den Emulator, lädt und führt die App aus.

Die App ruft userId und channelId vom Baidu-Pushbenachrichtigungsdienst ab und registriert sich beim Benachrichtigungshub.

Zum Senden einer Testbenachrichtigung können Sie die Registerkarte "Debug" des Azure-Portals verwenden. Wenn Sie die .NET-Konsolenanwendung für Visual Studio erstellt haben, drücken Sie einfach F5 in Visual Studio, um die Anwendung auszuführen. Die Anwendung sendet eine Benachrichtigung, die im oberen Infobereich Ihres Geräts oder Emulators angezeigt wird.