Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Baidu Cloud Push to chińska usługa w chmurze, której można użyć do wysyłania powiadomień push do urządzeń mobilnych.
Ponieważ sklepy Google Play i FCM (Firebase Cloud Messaging) nie są dostępne w Chinach, konieczne jest korzystanie z różnych sklepów z aplikacjami i usług wypychanych. Baidu jest jednym z nich, a ta usługa jest obecnie używana przez Notification Hub.
Wymagania wstępne
Ten samouczek wymaga:
- Zestaw Android SDK (zakładamy, że używasz programu Android Studio), który można pobrać z witryny systemu Android
- Baidu Push Android SDK
Uwaga
Do wykonania kroków tego samouczka potrzebne jest aktywne konto platformy Azure. Jeśli go nie masz, możesz utworzyć bezpłatne konto próbne w zaledwie kilka minut. Aby uzyskać szczegółowe informacje, zobacz Bezpłatna wersja próbna platformy Azure.
Aby rozpocząć pracę, wykonaj następujące czynności:
- Utwórz konto usługi Baidu.
- Utwórz projekt powiadomień Baidu w chmurze i zapisz klucz API oraz klucz tajny.
Konfigurowanie nowego centrum powiadomień
Zaloguj się do portalu Azure.
Wybierz pozycję Wszystkie usługi w menu po lewej stronie.
W polu tekstowym Filtruj usługi wpisz Notification Hubs. Wybierz ikonę gwiazdki obok nazwy usługi, aby dodać usługę do sekcji ULUBIONE w menu po lewej stronie. Wybierz pozycję Notification Hubs.
Na stronie Notification Hubs wybierz pozycję Utwórz na pasku narzędzi.
Na karcie Podstawowe na stronie Centrum powiadomień wykonaj następujące czynności:
W obszarze Subskrypcja wybierz nazwę subskrypcji platformy Azure, której chcesz użyć, a następnie wybierz istniejącą grupę zasobów lub utwórz nową.
Wprowadź unikatową nazwę nowej przestrzeni nazw w obszarze Szczegóły przestrzeni nazw.
Przestrzeń nazw zawiera jedno lub więcej centrów powiadomień, więc wpisz nazwę centrum w szczegółach centrum powiadomień.
Wybierz wartość z listy rozwijanej Lokalizacja . Ta wartość określa lokalizację, w której chcesz utworzyć centrum.
Przejrzyj opcję Strefy dostępności. Jeśli wybrano region ze strefami dostępności, pole wyboru jest zaznaczone domyślnie. Strefy dostępności są funkcją płatną, dlatego do twojego planu dodawana jest dodatkowa opłata.
Wybierz opcję odzyskiwania po awarii:Brak, Sparowany region odzyskiwania, lub Elastyczny region odzyskiwania. Jeśli wybierzesz sparowany region odzyskiwania, zostanie wyświetlony region awaryjny. Jeśli wybierzesz pozycję Elastyczny region odzyskiwania, użyj listy rozwijanej, aby wybrać z listy regionów odzyskiwania.
Wybierz Utwórz.
Po zakończeniu wdrażania wybierz pozycję Przejdź do zasobu.
6. W centrum powiadomień wybierz pozycję Usługi powiadomień , a następnie Baidu (Android China).
7. Przewiń w dół do sekcji Ustawienia powiadomień baidu. Wprowadź klucz interfejsu API i klucz tajny, które uzyskałeś z konsoli Baidu, w projekcie Baidu Cloud Push. Następnie kliknij przycisk Zapisz.
Twoje centrum powiadomień jest teraz skonfigurowane do pracy z usługą Baidu. Masz również parametry połączenia , aby zarejestrować aplikację w celu wysyłania i odbierania powiadomień wypychanych.
Zanotuj DefaultListenSharedAccessSignature
i DefaultFullSharedAccessSignature
z okna informacji o połączeniu Access.
Łączenie aplikacji z centrum powiadomień
W programie Android Studio utwórz nowy projekt systemu Android (Plik > nowy > projekt).
Wprowadź nazwę aplikacji i upewnij się, że minimalna wymagana wersja zestawu SDK jest ustawiona na interfejs API 16: Android 4.1. Upewnij się również, że nazwa aplikacyjnego pakietu (应用包名) jest taka sama jak w portalu Baidu Cloud Push
Kliknij Dalej i postępuj zgodnie z asystentem, aż pojawi się okno Tworzenie aktywności. Upewnij się, że wybrano pozycję Puste działanie, a na koniec wybierz pozycję Zakończ, aby utworzyć nową aplikację systemu Android.
Upewnij się, że cel budowy projektu jest poprawnie ustawiony.
Następnie dodaj biblioteki usługi Azure Notification Hubs.
Build.Gradle
W pliku aplikacji dodaj następujące wiersze w sekcji zależności.implementation 'com.microsoft.azure:notification-hubs-android-sdk:0.6@aar' implementation 'com.microsoft.azure:azure-notifications-handler:1.0.1@aar'
Dodaj następujące repozytorium po sekcji zależności.
repositories { maven { url "https://dl.bintray.com/microsoftazuremobile/SDK" } }
Aby uniknąć konfliktu z Listą, dodaj następujący kod w pliku projektu
Manifest.xml
.<manifest package="YOUR.PACKAGE.NAME" xmlns:tools="http://schemas.android.com/tools" xmlns:android="http://schemas.android.com/apk/res/android">
i w tagu
<application/>
:<application tools:replace="android:allowBackup,icon,theme,label">
Pobierz i rozpakuj Baidu Push SDK dla Androida.
pushservice-x.y.z jar
Skopiuj plik w folderze libs. Następnie skopiuj.so
pliki do folderówsrc/main/jniLibs
(utwórz nowy folder) aplikacji systemu Android.W folderze projektu
libs
kliknij prawym przyciskiem myszypushervice-x.y.z.jar
plik. Wybierz pozycję Dodaj jako bibliotekę , aby włączyć tę bibliotekę w projekcie.Otwórz plik projektu
AndroidManifest.xml
systemu Android i dodaj uprawnienia wymagane przez zestaw SDK baidu. ZastąpYOURPACKAGENAME
nazwą pakietu<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" />
Dodaj następującą konfigurację w elemencie aplikacji po elemencie
.MainActivity
activity, zastępując ciąg yourprojectname (na przykładcom.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>
Dodaj nową klasę o nazwie
ConfigurationSettings.java
do projektu.public class ConfigurationSettings { public static String API_KEY = "..."; public static String NotificationHubName = "..."; public static String NotificationHubConnectionString = "..."; }
Ustaw wartość
API_KEY
ciągu przy użyciu API_KEY z projektu Baidu Cloud.Ustaw wartość
NotificationHubName
ciągu przy użyciu nazwy centrum powiadomień z portalu Azure, a następnieNotificationHubConnectionString
zDefaultListenSharedAccessSignature
z portalu Azure.Otwórz MainActivity.java i dodaj następujący kod do metody onCreate:
PushManager.startWork(this, PushConstants.LOGIN_TYPE_API_KEY, API_KEY );
Dodaj nową klasę o nazwie
MyPushMessageReceiver.java
i dodaj do niej następujący kod. Jest to klasa, która obsługuje powiadomienia push odbierane z serwera 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 "); } } }
Wysyłanie powiadomień do aplikacji
Możesz szybko przetestować odbieranie powiadomień z witryny Azure Portal za pomocą przycisku Wyślij na ekranie konfiguracji centrum powiadomień, jak pokazano na następujących ekranach:
Powiadomienia push są zwykle wysyłane za pomocą usługi zaplecza, takiej jak Mobile Services lub ASP.NET, korzystając ze zgodnej biblioteki. Jeśli biblioteka nie jest dostępna dla zaplecza, możesz użyć interfejsu API REST bezpośrednio do wysyłania komunikatów powiadomień.
Dla uproszczenia ten samouczek używa aplikacji konsolowej jako pokazu sposobu wysyłania powiadomienia przy użyciu zestawu .NET SDK. Zalecamy jednak samouczek Używanie usługi Notification Hubs do wysyłania powiadomień do użytkowników jako następny krok w wysyłaniu powiadomień z serwera ASP.NET.
Poniżej przedstawiono różne podejścia do wysyłania powiadomień:
- Interfejs REST: powiadomienia można obsługiwać na dowolnej platformie zaplecza przy użyciu interfejsu REST.
- Zestaw .NET SDK usługi Microsoft Azure Notification Hubs: w Menedżerze pakietów Nuget dla programu Visual Studio uruchom Install-Package Microsoft.Azure.NotificationHubs.
- Node.js: Jak używać usługi Notification Hubs z Node.js.
- Mobile Apps: aby zapoznać się z przykładem wysyłania powiadomień z zaplecza usługi Azure App Service Mobile Apps zintegrowanego z usługą Notification Hubs, zobacz Dodawanie powiadomień wypychanych do aplikacji mobilnej.
- Java/PHP: aby zapoznać się z przykładem wysyłania powiadomień przy użyciu interfejsów API REST, zobacz "How to use Notification Hubs from Java/PHP" (Java PHP) (Jak używać usługi Notification Hubs z języka Java | /PHP).
(Opcjonalnie) Wysyłanie powiadomień z aplikacji konsolowej .NET.
W tej sekcji pokażemy wysyłanie powiadomienia przy użyciu aplikacji konsolowej platformy .NET.
Utwórz nową aplikację konsolową visual C#:
W oknie Konsola menedżera pakietów ustaw Projekt domyślny na swój nowy projekt aplikacji konsolowej, a następnie w tym oknie wykonaj następujące polecenie:
Install-Package Microsoft.Azure.NotificationHubs
Ta instrukcja dodaje odwołanie do zestawu SDK usługi Azure Notification Hubs przy użyciu pakietu NuGet Microsoft.Azure.Notification Hubs.
Otwórz plik
Program.cs
i dodaj następującą instrukcję using:using Microsoft.Azure.NotificationHubs;
W swojej klasie dodaj następującą metodę i zastąp
DefaultFullSharedAccessSignatureSASConnectionString
orazNotificationHubName
wartościami, które posiadasz.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); }
Dodaj następujące wiersze w metodzie
Main
:SendNotificationAsync(); Console.ReadLine();
Przetestuj aplikację
Aby przetestować tę aplikację za pomocą rzeczywistego telefonu, wystarczy podłączyć telefon do komputera przy użyciu USB. Ta akcja ładuje aplikację na dołączony telefon.
Aby przetestować tę aplikację za pomocą emulatora, na górnym pasku narzędzi programu Android Studio kliknij pozycję Uruchom, a następnie wybierz aplikację: uruchamia emulator, ładuje i uruchamia aplikację.
Aplikacja pobiera userId
i channelId
z usługi powiadomień Baidu Push i rejestruje się w ośrodku powiadomień.
Aby wysłać powiadomienie testowe, możesz użyć karty debugowania w witrynie Azure Portal. Jeśli skompilujesz aplikację konsolową .NET dla programu Visual Studio, wystarczy nacisnąć F5 w programie Visual Studio, aby uruchomić aplikację. Aplikacja wysyła powiadomienie wyświetlane w górnym obszarze powiadomień urządzenia lub emulatora.