Poznámka
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Baidu cloud push je čínská cloudová služba, kterou můžete použít k odesílání push oznámení do mobilních zařízení.
Vzhledem k tomu, že Google Play a FCM (Firebase Cloud Messaging) nejsou v Číně dostupné, je nutné používat různé obchody s aplikacemi a nabízené služby. Baidu je jedním z nich a aktuálně používaný centrem oznámení.
Požadavky
Tento kurz vyžaduje:
- Sada Android SDK (předpokládáme, že používáte Android Studio), kterou si můžete stáhnout z webu Android
- Baidu Push Android SDK
Poznámka:
K dokončení tohoto kurzu potřebujete mít aktivní účet Azure. Během několika minut si můžete vytvořit bezplatný zkušební účet, pokud ho ještě nemáte. Podrobnosti najdete v článku Bezplatná zkušební verze Azure.
Začněte následujícím postupem:
- Vytvořte účet Baidu.
- Vytvořte projekt Baidu Cloud Push a poznamenejte si klíč API a tajný klíč.
Konfigurace nového centra oznámení
Přihlaste se do Azure Portalu.
V nabídce vlevo vyberte Všechny služby .
Do textového pole Filtrovat služby zadejte Notification Hubs. Výběrem ikony hvězdičky vedle názvu služby přidejte službu do oddílu OBLÍBENÉ V levé nabídce. Vyberte Notification Hubs.
Na stránce Notification Hubs vyberte vytvořit na panelu nástrojů.
Na kartě Základy na stránce Centra oznámení proveďte následující kroky:
V předplatném vyberte název předplatného Azure, které chcete použít, a pak vyberte existující skupinu prostředků nebo vytvořte novou.
Enter a unique name for the new namespace in Namespace Details.
Obor názvů obsahuje jedno nebo více center oznámení, proto zadejte název pro centrum v Podrobnostech centra oznámení.
V rozevíracím seznamu Umístění vyberte hodnotu. Tato hodnota určuje umístění, ve kterém chcete centrum vytvořit.
Zkontrolujte možnost Zóny dostupnosti. Pokud jste vybrali oblast, která má zóny dostupnosti, je ve výchozím nastavení zaškrtnuté políčko. Zóny dostupnosti je placená funkce, takže do vaší úrovně se přidá další poplatek.
Zvolte možnost zotavení po havárii: Žádná, Spárovaná oblast obnovení nebo Flexibilní oblast obnovení. If you choose Paired recovery region, the failover region is displayed. Pokud vyberete flexibilní oblast obnovení, vyberte si z rozevíracího seznamu oblastí obnovení.
Vyberte Vytvořit.
When the deployment is complete select Go to resource.
6. V centru oznámení vyberte Notification Services a pak Baidu (Android China).
7. Posuňte se dolů do části Nastavení oznámení Baidu. V projektu cloudového push oznámení na Baidu zadejte klíč API a tajný klíč, které jste získali z konzole Baidu. Potom klikněte na Uložit.
Vaše centrum oznámení je teď nakonfigurované tak, aby fungovalo s Baidu. You also have the connection strings to register your app to both send and receive push notifications.
Poznamenejte si DefaultListenSharedAccessSignature
a DefaultFullSharedAccessSignature
z okna s informacemi o připojení Accessu.
Připojte aplikaci k centru oznámení
V Android Studiu vytvořte nový projekt Androidu (Soubor > Nový > Nový projekt).
Zadejte název aplikace a ujistěte se, že je minimální požadovaná verze sady SDK nastavená na rozhraní API 16: Android 4.1. Also please make sure your package name (应用包名) is the same as in the Baidu Cloud Push Portal
Klikněte na Další a pokračujte podle průvodce, dokud se nezobrazí okno Vytvořit aktivitu. Ujistěte se, že je vybraná prázdná aktivita, a nakonec vyberte Dokončit a vytvořte novou aplikaci pro Android.
Make sure that the Project Build Target is set correctly.
Pak přidejte knihovny Azure Notification Hubs. Do souboru
Build.Gradle
aplikace přidejte do části závislosti následující řádky.implementation 'com.microsoft.azure:notification-hubs-android-sdk:0.6@aar' implementation 'com.microsoft.azure:azure-notifications-handler:1.0.1@aar'
Přidejte následující úložiště za sekci závislostí.
repositories { maven { url "https://dl.bintray.com/microsoftazuremobile/SDK" } }
Pokud se chcete vyhnout konfliktu seznamu, přidejte do souboru
Manifest.xml
projektu následující kód:<manifest package="YOUR.PACKAGE.NAME" xmlns:tools="http://schemas.android.com/tools" xmlns:android="http://schemas.android.com/apk/res/android">
and in the
<application/>
tag:<application tools:replace="android:allowBackup,icon,theme,label">
Stáhněte a rozbalte Baidu Push Android SDK. Zkopírujte soubor
pushservice-x.y.z jar
ve složce libs. Potom zkopírujte soubory.so
ve složkáchsrc/main/jniLibs
(vytvořte novou složku) aplikace pro Android.Ve složce
libs
projektu klikněte pravým tlačítkem na souborpushervice-x.y.z.jar
; vyberte Přidat jako knihovnu zahrnout tuto knihovnu do projektu.Otevřete soubor
AndroidManifest.xml
projektu Android a přidejte oprávnění požadovaná sadou Baidu SDK. nahraďteYOURPACKAGENAME
názvem balíčku.<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" />
Za element aktivity
.MainActivity
přidejte následující konfiguraci v rámci elementu aplikace a nahraďte název_projektu (napříkladcom.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>
Přidejte do projektu novou třídu s názvem
ConfigurationSettings.java
.public class ConfigurationSettings { public static String API_KEY = "..."; public static String NotificationHubName = "..."; public static String NotificationHubConnectionString = "..."; }
Nastavte hodnotu řetězce
API_KEY
s API_KEY z projektu Baidu Cloud.Set the value of the
NotificationHubName
string with your notification hub name from the Azure portal and thenNotificationHubConnectionString
withDefaultListenSharedAccessSignature
from the Azure portal.Otevřete MainActivity.java a do metody onCreate přidejte následující:
PushManager.startWork(this, PushConstants.LOGIN_TYPE_API_KEY, API_KEY );
Přidejte novou třídu s názvem
MyPushMessageReceiver.java
a přidejte do ní následující kód. Je to třída, která zpracovává nabízená oznámení přijatá ze serveru nabízených oznámení Baidu.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 "); } } }
Odesílání oznámení do aplikace
Příjem oznámení můžete rychle otestovat na webu Azure Portal prostřednictvím tlačítka Odeslat na obrazovce konfigurace centra oznámení, jak je znázorněno na následujících obrazovkách:
Push notifikace se obvykle odesílají v na pozadí fungující službě, například Mobile Services nebo ASP.NET, pomocí kompatibilní knihovny. Pokud není pro váš back-end k dispozici knihovna, můžete k odesílání zpráv s oznámeními použít přímo rozhraní REST API.
Pro zjednodušení tento kurz používá konzolovou aplikaci jako ukázku, jak odeslat oznámení pomocí sady .NET SDK. However, we recommend the Use Notification Hubs to push notifications to users tutorial as the next step for sending notifications from an ASP.NET backend.
Tady jsou různé přístupy k odesílání oznámení:
- rozhraní REST: Oznámení můžete podporovat na jakékoli back-endové platformě pomocí rozhraní REST.
- Microsoft Azure Notification Hubs .NET SDK: Ve Správci balíčků NuGet pro Visual Studio spusťte Install-Package Microsoft.Azure.NotificationHubs.
- Node.js: Jak používat centra oznámení z Node.js.
- Mobile Apps: Příklad odesílání oznámení z back-endu Služby Azure App Service Mobile Apps, který je integrovaný se službou Notification Hubs, najdete v tématu Přidání nabízených oznámení do mobilní aplikace.
- Java / PHP: Příklad odesílání oznámení pomocí rozhraní REST API najdete v tématu "Jak používat Notification Hubs z Javy/PHP" (Java | PHP).
(Volitelné) Odesílání oznámení z konzolové aplikace .NET
V této části se zobrazí odeslání oznámení pomocí konzolové aplikace .NET.
Vytvořte novou konzolovou aplikaci Visual C#:
V okně konzoly Správce balíčků nastavte Výchozí projekt na nový projekt konzolové aplikace a pak v okně konzoly spusťte následující příkaz:
Install-Package Microsoft.Azure.NotificationHubs
Tato instrukce přidá odkaz na Azure Notification Hubs SDK tím, že použije NuGet balíček Microsoft.Azure.Notification Hubs .
Otevřete soubor
Program.cs
a přidejte následující příkaz using:using Microsoft.Azure.NotificationHubs;
Do třídy
Program
přidejte následující metodu a nahraďteDefaultFullSharedAccessSignatureSASConnectionString
aNotificationHubName
hodnotami, které máte.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); }
Do metody
Main
přidejte následující řádky:SendNotificationAsync(); Console.ReadLine();
Testování aplikace
Pokud chcete tuto aplikaci otestovat pomocí skutečného telefonu, stačí připojit telefon k počítači pomocí kabelu USB. Tato akce načte aplikaci na připojený telefon.
Pokud chcete tuto aplikaci otestovat pomocí emulátoru, klikněte na horním panelu nástrojů Android Studio na Spustita vyberte aplikaci: spustí emulátor, načte a spustí aplikaci.
Aplikace načte userId
a channelId
ze služby nabízených oznámení Baidu a zaregistruje se v centru oznámení.
To send a test notification, you can use the debug tab of the Azure portal. Pokud jste vytvořili konzolovou aplikaci .NET pro Visual Studio, spusťte aplikaci stisknutím klávesy F5 v sadě Visual Studio. Aplikace odešle oznámení, které se zobrazí v horní oznamovací oblasti vašeho zařízení nebo emulátoru.