Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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:
- Android SDK (wir gehen davon aus, dass Sie Android Studio verwenden), die Sie von der Android-Website herunterladen können
- Baidu Push Android SDK
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:
- Erstellen Sie ein Baidu-Konto.
- Erstellen Sie ein Baidu-Cloud-Pushprojekt, und notieren Sie sich den API-Schlüssel und den geheimen Schlüssel.
Konfigurieren eines neuen Benachrichtigungshubs
Melden Sie sich beim Azure-Portal an.
Wählen Sie im Menü links Alle Dienste aus.
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.
Wählen Sie auf der Seite Notification Hubs in der Symbolleiste die Option Erstellen aus.
Führen Sie auf der Registerkarte Grundlagen der Seite Notification Hub die folgenden Schritte aus:
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.
Geben Sie unter Namespacedetails einen eindeutigen Namen für den neuen Namespace ein.
Ein Namespace enthält mindestens einen Notification Hub. Geben Sie daher unter Notification Hub-Details einen Namen für den Hub ein.
Wählen Sie im Dropdown-Listenfeld Standort einen Wert aus. Dieser Wert gibt den Standort an, an dem der Hub erstellt werden soll.
Ü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.
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.
Wählen Sie "Erstellen" aus.
Wählen Sie nach Abschluss der Bereitstellung Zur Ressource wechseln.
6. Wählen Sie in Ihrem Benachrichtigungshub Benachrichtigungsdienste und dann Baidu (Android China) aus.
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".
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
Erstellen Sie in Android Studio ein neues Android-Projekt (Datei > neues > Projekt).
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.
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.
Stellen Sie sicher, dass das Projekt-Build-Ziel korrekt eingestellt ist.
Fügen Sie dann Azure Notification Hubs-Bibliotheken hinzu. Fügen Sie in der
Build.GradleDatei 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.xmlProjekts 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">Laden Sie das Baidu Push Android SDK herunter und entpacken Sie es. Kopieren Sie die
pushservice-x.y.z jarDatei im Ordner "libs". Kopieren Sie dann die.soDateien in diesrc/main/jniLibsOrdner (erstellen Sie einen neuen Ordner) Ihrer Android-Anwendung.
Klicken Sie im Ordner des
libsProjekts mit der rechten Maustaste auf diepushervice-x.y.z.jarDatei. Wählen Sie "Als Bibliothek hinzufügen " aus, um diese Bibliothek in das Projekt einzufügen.
Öffnen Sie die Datei des
AndroidManifest.xmlAndroid-Projekts, und fügen Sie die vom Baidu SDK erforderlichen Berechtigungen hinzu. Ersetzen SieYOURPACKAGENAMEdurch 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" />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>Fügen Sie dem Projekt eine neue Klasse namens
ConfigurationSettings.javahinzu.public class ConfigurationSettings { public static String API_KEY = "..."; public static String NotificationHubName = "..."; public static String NotificationHubConnectionString = "..."; }Legen Sie den Wert der
API_KEYZeichenfolge mit dem API_KEY aus dem Baidu Cloud-Projekt fest.Setzen Sie den Wert der Zeichenfolge
NotificationHubNamemit dem Namen Ihres Notification Hubs aus dem Azure-Portal und dannNotificationHubConnectionStringmitDefaultListenSharedAccessSignatureaus dem Azure-Portal.Öffnen Sie MainActivity.java, und fügen Sie der onCreate-Methode Folgendes hinzu:
PushManager.startWork(this, PushConstants.LOGIN_TYPE_API_KEY, API_KEY );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:
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:
- REST-Schnittstelle: Sie können Benachrichtigungen auf jeder Back-End-Plattform mithilfe der REST-Schnittstelle unterstützen.
- Microsoft Azure Notification Hubs .NET SDK: Führen Sie im Nuget-Paket-Manager für Visual Studio Install-Package Microsoft.Azure.NotificationHubs aus.
- Node.js: Verwenden von Benachrichtigungshubs aus Node.js.
- Mobile Apps: Ein Beispiel zum Senden von Benachrichtigungen von einem Azure App Service Mobile Apps-Back-End, das in Notification Hubs integriert ist, finden Sie unter Hinzufügen von Pushbenachrichtigungen zu Ihrer mobilen App.
- Java / PHP: Ein Beispiel für das Senden von Benachrichtigungen mithilfe der REST-APIs finden Sie unter "Verwenden von Benachrichtigungshubs aus Java/PHP" (Java | PHP).
(Optional) Senden von Benachrichtigungen von einer .NET-Konsolen-App.
In diesem Abschnitt wird das Senden einer Benachrichtigung mithilfe einer .NET-Konsolen-App angezeigt.
Erstellen Sie eine neue Visual C#-Konsolenanwendung:
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.NotificationHubsDiese Anweisung fügt einen Verweis auf das Azure Notification Hubs SDK mithilfe des Microsoft.Azure.Notification Hubs NuGet-Pakets hinzu.
Öffnen Sie die Datei
Program.csund fügen Sie die folgende using-Anweisung hinzu:using Microsoft.Azure.NotificationHubs;Fügen Sie in Ihrer
ProgramKlasse die folgende Methode hinzu und ersetzen SieDefaultFullSharedAccessSignatureSASConnectionStringundNotificationHubNamemit 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); }Fügen Sie die folgenden Zeilen in Ihrer
MainMethode 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.