Ismerkedés a Notification Hubs Baiduval való használatával
A felhőalapú Baidu-értesítés egy kínai felhőszolgáltatás, amellyel leküldéses értesítések küldhetők mobileszközökre.
Mivel a Google Play és az FCM (Firebase Cloud Messaging) nem érhető el Kínában, más alkalmazás-áruházakat és leküldési szolgáltatásokat kell használni. Ilyen például az értesítési központ által jelenleg használt Baidu is.
Előfeltételek
Az oktatóanyaghoz a következőkre lesz szükség:
- Android SDK (feltételezzük, hogy Android Studiót használ), amelyet az Android webhelyéről tölthet le
- Baidu Push Android SDK
Feljegyzés
Az oktatóanyag elvégzéséhez egy aktív Azure-fiókra lesz szüksége. Ha nincs fiókja, néhány perc alatt létrehozhat egy ingyenes próbafiókot. További információ: Ingyenes Azure-próbafiók létrehozása.
Első lépésként tegye a következőket:
- Hozzon létre egy Baidu-fiókot.
- Hozzon létre egy Baidu felhőbeli leküldéses projektet, és jegyezze fel az API-kulcsot és a titkos kulcsot.
Új értesítési központ konfigurálása
Jelentkezzen be az Azure Portalra.
Válassza az Összes szolgáltatás lehetőséget a bal oldali menüben.
Írja be a Notification Hubs kifejezést a Szűrőszolgáltatások szövegmezőbe. A szolgáltatás neve melletti csillag ikonnal felveheti a szolgáltatást a kedvencek szakaszba a bal oldali menüben. Válassza a Notification Hubs lehetőséget.
A Notification Hubs lapon válassza a Létrehozás lehetőséget az eszköztáron.
Az Értesítési központ lap Alapismeretek lapján hajtsa végre a következő lépéseket:
Az Előfizetésben válassza ki a használni kívánt Azure-előfizetés nevét, majd válasszon ki egy meglévő erőforráscsoportot, vagy hozzon létre egy újat.
Adja meg az új névtér egyedi nevét a Névtér részletei mezőben.
A névtér egy vagy több értesítési központot tartalmaz, ezért írja be a központ nevét a Notification Hub Részletei szakaszba.
Válasszon egy értéket a Hely legördülő listából. Ez az érték határozza meg azt a helyet, ahol létre szeretné hozni a központot.
Tekintse át a Rendelkezésre állási zónák lehetőséget. Ha olyan régiót választott, amely rendelkezésre állási zónákkal rendelkezik, a jelölőnégyzet alapértelmezés szerint be van jelölve. A rendelkezésre állási zónák fizetős funkciók, ezért további díjakat adnak hozzá a szinthez.
Válasszon vészhelyreállítási lehetőséget: Nincs, Párosított helyreállítási régió vagy Rugalmas helyreállítási régió. Ha a Párosított helyreállítási régiót választja, megjelenik a feladatátvételi régió. Ha a rugalmas helyreállítási régiót választja, a legördülő listából választhat a helyreállítási régiók listájából.
Válassza a Létrehozás lehetőséget.
Ha az üzembe helyezés befejeződött, válassza az Erőforrás megnyitása lehetőséget.
6. Az értesítési központban válassza a Notification Services , majd a Baidu (Android China) lehetőséget.
7. Görgessen le a Baidu értesítési beállítások szakaszához. Adja meg a felhőalapú Baidu-értesítési projekt Baidu-konzoljában korábban beszerzett API-kulcsot és titkos kulcsot. Ezután kattintson a Mentés gombra.
Ezzel konfigurálta az értesítési központot a Baiduval folytatott együttműködésre, és rendelkezésére állnak a kapcsolati sztringek is, amelyekkel regisztrálhatja az alkalmazást a leküldéses értesítések küldéséhez és fogadásához.
Jegyezze fel a Kapcsolati adatok elérése ablakban látható DefaultListenSharedAccessSignature
és DefaultFullSharedAccessSignature
kapcsolati karakterláncokat.
Az alkalmazás csatlakoztatása az értesítési központhoz
Az Android Studióban hozzon létre egy új Android-projektet (File > New > New Project).
Adjon meg egy alkalmazásnevet, és győződjön meg arról, hogy a Minimum Required SDK (minimális SDK-követelmény) verziószáma API 16: Android 4.1. Győződjön meg arról is, hogy a csomagnév (应用包名) megegyezik a felhőalapú Baidu-értesítési portálon szereplővel
Kattintson a Next (Tovább) gombra, majd folytassa a varázsló használatát, amíg a Create Activity (Tevékenység létrehozása) ablak meg nem jelenik. Győződjön meg arról, hogy az Empty Activity (Üres tevékenység) lehetőség van kiválasztva, majd válassza a Finish (Befejezés) lehetőséget egy új Android-alkalmazás létrehozásához.
Győződjön meg arról, hogy a Project Build Target (Projekt célbuildje) beállítás értéke megfelelő.
Ezután vegyen fel Azure Notification Hubs-kódtárakat. Az alkalmazás
Build.Gradle
fájljában adja hozzá az alábbi sorokat a dependencies (függőségek) szakaszhoz.implementation 'com.microsoft.azure:notification-hubs-android-sdk:0.6@aar' implementation 'com.microsoft.azure:azure-notifications-handler:1.0.1@aar'
A dependencies (függőségek) szakasz után vegye fel az alábbi tárhelyet.
repositories { maven { url "https://dl.bintray.com/microsoftazuremobile/SDK" } }
A listaütközés elkerülése érdekében adja hozzá a következő kódot a projekt fájljába
Manifest.xml
:<manifest package="YOUR.PACKAGE.NAME" xmlns:tools="http://schemas.android.com/tools" xmlns:android="http://schemas.android.com/apk/res/android">
és az
<application/>
címkében:<application tools:replace="android:allowBackup,icon,theme,label">
Töltse le és csomagolja ki a Baidu Push Android SDK-t. Másolja a
pushservice-x.y.z jar
fájlt a libs mappába. Ezután másolja a.so
fájlokat az Android alkalmazássrc/main/jniLibs
(hozzon létre egy új mappát) mappáiba.A projekt mappájában
libs
kattintson a jobb gombbal a fájlra; válassza apushervice-x.y.z.jar
Hozzáadás tárként lehetőséget a tár projektbe való felvételéhez.Nyissa meg az Android-projekt fájlját
AndroidManifest.xml
, és adja hozzá a Baidu SDK által megkövetelt engedélyeket. Cserélje le aYOURPACKAGENAME
karakterláncot saját csomagjának nevére.<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" />
Cserélje le a yourprojectname (például
com.example.BaiduTest
) részt a következő konfigurációra az alkalmazáselemben a.MainActivity
tevékenységelem után:<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>
Adjon hozzá egy új,
ConfigurationSettings.java
nevű osztályt a projekthez.public class ConfigurationSettings { public static String API_KEY = "..."; public static String NotificationHubName = "..."; public static String NotificationHubConnectionString = "..."; }
Állítsa az
API_KEY
sztring értékét a felhőalapú Baidu-projektből lekért API_KEY értékre.Állítsa be a sztring értékét az
NotificationHubName
értesítési központ nevével az Azure Portalról , majdNotificationHubConnectionString
DefaultListenSharedAccessSignature
az Azure Portalról.Nyissa meg a MainActivity.java fájlt, majd adja hozzá a következőket az onCreate metódushoz:
PushManager.startWork(this, PushConstants.LOGIN_TYPE_API_KEY, API_KEY );
Adjon hozzá egy új,
MyPushMessageReceiver.java
nevű osztályt, majd adja hozzá a következő kódot. Ez az osztály kezeli a Baidu leküldési kiszolgálóról kapott leküldéses értesítéseket.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 "); } } }
Értesítések küldése az alkalmazásnak
Gyorsan tesztelheti az értesítések fogadását az Azure Portalról az értesítési központ konfigurációs képernyőjének Küldés gombján keresztül, ahogyan az alábbi képernyőkön látható:
A leküldéses értesítések küldése általában olyan háttérszolgáltatásokon keresztül történik egy kompatibilis kódtár használatával, mint a Mobile Services vagy az ASP.NET. Ha a háttérszolgáltatáshoz nem érhető el könyvtár, az értesítési üzenetek küldéséhez használhatja közvetlenül a REST API-t.
Az egyszerűség kedvéért ez az oktatóanyag konzolalkalmazással mutatja be, hogyan küldhet értesítéseket a .NET SDK-val. Az értesítéseknek ASP.NET-háttérrendszerből történő küldéséhez azonban következő lépésként A Notification Hubs használata leküldéses értesítések küldéséhez felhasználók számára oktatóanyagot ajánljuk.
Íme néhány megközelítés az értesítések küldéséhez:
- REST-felület: A REST-felület használatával bármilyen háttérplatformon támogathatja az értesítéseket.
- Microsoft Azure Notification Hubs .NET SDK: A Visual Studio NuGet-csomagkezelőjében futtassa a következő parancsot: Install-Package Microsoft.Azure.NotificationHubs.
- Node.js: A Notification Hubs használata a Node.js-ből.
- Mobile Apps: A Leküldéses értesítések hozzáadása Mobile Apps-alkalmazáshoz témakörben találhat példát arra, hogy hogyan küldhetők értesítések a Notification Hubs szolgáltatással integrált Azure App Service Mobile Apps háttéralkalmazásból.
- Java/PHP: „A Notification Hubs használata Javából/PHP-ből” (Java | PHP) témakörben találhat példát arra, hogyan küldhetők értesítések a REST API-k használatával.
(Nem kötelező) Értesítések küldése .NET-konzolalkalmazásból.
Ebben a szakaszban az értesítések .NET-konzolalkalmazásból történő küldését mutatjuk be.
Hozzon létre egy új Visual C#-konzolalkalmazást:
A Package Manager Console (Csomagkezelő konzol) ablakban az Alapértelmezett projekt értékeként adja meg az új konzolalkalmazás-projektet, majd a konzolablakban hajtsa végre az alábbi parancsot:
Install-Package Microsoft.Azure.NotificationHubs
Ez az utasítás hozzáad egy, az Azure Notification Hubs SDK-ra mutató hivatkozást a Microsoft.Azure.Notification Hubs NuGet-csomaggal.
Nyissa meg a
Program.cs
fájlt, és adja hozzá a következő using utasítást:using Microsoft.Azure.NotificationHubs;
A
Program
osztályban adja hozzá a következő metódust, és cserélje le aDefaultFullSharedAccessSignatureSASConnectionString
és aNotificationHubName
elemeket a saját értékeire.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); }
Adja hozzá a következő sorokat a
Main
metódushoz:SendNotificationAsync(); Console.ReadLine();
Az alkalmazás tesztelése
Ha egy valódi telefonon kívánja tesztelni az alkalmazást, csak csatlakoztassa a telefont a számítógéphez egy USB-kábellel. Ez a művelet feltölti az alkalmazást a csatlakoztatott telefonra.
Az alkalmazásnak az emulátorral való teszteléséhez kattintson a Run (Futtatás) elemre az Android Studio felső eszköztárán, majd válassza ki az alkalmazást: ez elindítja az emulátort, majd betölti és futtatja az alkalmazást.
Az alkalmazás lekéri a userId
és a channelId
azonosítókat a Baidu leküldéses értesítési szolgáltatásból, és regisztrál az értesítési központban.
Tesztértesítést az Azure Portal hibakeresési lapjáról küldhet. Ha a .NET konzolalkalmazást a Visual Studióhoz készítette, az alkalmazás futtatásához csak nyomja le az F5 billentyűt a Visual Studióban. Az alkalmazás elküld egy értesítést, amely az eszköz vagy az emulátor felső értesítési területén jelenik meg.