Leküldéses értesítések hozzáadása androidos alkalmazáshoz
Áttekintés
Ebben az oktatóanyagban leküldéses értesítéseket ad hozzá az Android gyors üzembe helyezési projekthez, hogy a rendszer minden rekord beszúrásakor leküldéses értesítést küldjön az eszközre.
Ha nem a letöltött gyors üzembe helyezési kiszolgálóprojektet használja, szüksége lesz a leküldéses értesítési bővítménycsomagra. További információ: Az Azure Mobile Appshez készült .NET háttérkiszolgálóI SDK használata.
Előfeltételek
A következőkre lesz szüksége:
Ide, a projekt háttérrendszerétől függően:
- Android Studio , ha az alkalmazás Node.js háttérrendszerrel rendelkezik.
- Visual Studio Community 2013-at vagy újabb verziót, ha az alkalmazás Microsoft .NET-háttérrendszerrel rendelkezik.
Android 2.3 vagy újabb, a Google-adattár 27- vagy újabb verziója, valamint a Google Play Services 9.0.2-s vagy újabb verziója a Firebase Cloud Messaginghez.
Végezze el az Android gyors üzembe helyezését.
A Firebase Cloud Messaginget támogató projekt létrehozása
Jelentkezzen be a Firebase konzoljába. Hozzon létre egy új Firebase-projektet, ha nem rendelkezik még ilyennel.
A projekt létrehozása után válassza az Add Firebase to your Android app (A Firebase hozzáadása az Android-alkalmazáshoz) lehetőséget.
A Firebase hozzáadása az Android-alkalmazáshoz lapon hajtsa végre a következő lépéseket:
Android-csomagnév esetén másolja az applicationId értékét az alkalmazás build.gradle fájljában. Ebben a példában ez a következő
com.fabrikam.fcmtutorial1app
: .Válassza az Alkalmazás regisztrálása lehetőséget.
Válassza a Google-services.json letöltése lehetőséget, mentse a fájlt a projekt alkalmazásmappájába , majd válassza a Tovább gombot.
Végezze el a következő konfigurációs módosításokat a projekten az Android Studióban.
A projektszintű build.gradle fájlban (<project>/build.gradle) adja hozzá a következő utasítást a függőségek szakaszhoz.
classpath 'com.google.gms:google-services:4.0.1'
Az alkalmazásszintű build.gradle fájlban (<project>/<app-module>/build.gradle) adja hozzá a következő utasításokat a függőségek szakaszhoz.
implementation 'com.google.firebase:firebase-core:16.0.8' implementation 'com.google.firebase:firebase-messaging:17.3.4'
Adja hozzá a következő sort az alkalmazásszintű build.gradle fájl végéhez a függőségek szakasz után.
apply plugin: 'com.google.gms.google-services'
Válassza a Szinkronizálás gombot az eszköztáron.
Kattintson a Tovább gombra.
Válassza a Lépés kihagyása lehetőséget.
A Firebase konzolján kattintson a projektjéhez tartozó fogaskerékre. Ezután kattintson a Project Settings (Projektbeállítások) elemre.
Ha még nem töltötte le a google-services.json fájlt az Android Studio-projekt alkalmazásmappájába , ezt ezen az oldalon teheti meg.
Váltson a felső Cloud Messaging (Felhőbeli üzenetkezelés ) lapra.
Másolja és mentse a kiszolgálókulcsot későbbi használatra. Ezzel az értékkel konfigurálhatja a központot.
Értesítési központ konfigurálása
A Azure App Service Mobile Apps funkciója az Azure Notification Hubs használatával küld leküldéseket, ezért egy értesítési központot fog konfigurálni a mobilalkalmazáshoz.
A Azure Portal nyissa meg az App Servicest, majd válassza ki az alkalmazás háttérrendszerét. A Beállítások területen válassza a Leküldés lehetőséget.
Ha értesítési központ-erőforrást szeretne hozzáadni az alkalmazáshoz, válassza a Csatlakozás lehetőséget. Létrehozhat egy központot, vagy csatlakozhat egy meglévőhöz.
Most már csatlakoztatott egy értesítési központot a Mobile Apps háttérprojektjéhez. Később úgy konfigurálja ezt az értesítési központot, hogy egy platformértesítési rendszerhez (PNS) csatlakozzon az eszközökre való leküldéshez.
Az Azure konfigurálása leküldéses értesítések küldésére
A Azure Portal kattintson az Összes >App Servicestallózásaelemre, majd a Mobile Apps háttéralkalmazására. A Beállítások területen kattintson a App Service Leküldés elemre, majd az értesítési központ nevére.
Nyissa meg a Google-t (GCM), adja meg a Firebase-ből az előző eljárásban beszerzett kiszolgálókulcs-értéket , majd kattintson a Mentés gombra.
A Mobile Apps háttérrendszere mostantól a Firebase Cloud Messaging használatára van konfigurálva. Ez lehetővé teszi, hogy leküldéses értesítéseket küldjön az Android-eszközön futó alkalmazásnak az értesítési központ használatával.
Leküldéses értesítések engedélyezése a kiszolgálóprojekthez
Használja a háttérprojekt típusának megfelelő eljárást – akár a .NET-háttérrendszert , akárNode.js háttérrendszert.
.NET-háttérprojekt
A Visual Studióban kattintson a jobb gombbal a kiszolgálóprojektre, és válassza a Manage NuGet Packages (NuGet-csomagok kezelése) parancsot. Keresse meg
Microsoft.Azure.NotificationHubs
, majd kattintson a Telepítés gombra. Ezzel telepíti a Notification Hubs ügyféloldali kódtárát.A Controllers mappában nyissa meg a TodoItemController.cs fájlt, és adja hozzá a következő
using
utasításokat:using Microsoft.Azure.Mobile.Server.Config; using Microsoft.Azure.NotificationHubs;
Cserélje le az
PostTodoItem
metódust az alábbi kódra:public async Task<IHttpActionResult> PostTodoItem(TodoItem item) { TodoItem current = await InsertAsync(item); // Get the settings for the server project. HttpConfiguration config = this.Configuration; MobileAppSettingsDictionary settings = this.Configuration.GetMobileAppSettingsProvider().GetMobileAppSettings(); // Get the Notification Hubs credentials for the Mobile App. string notificationHubName = settings.NotificationHubName; string notificationHubConnection = settings .Connections[MobileAppSettingsKeys.NotificationHubConnectionString].ConnectionString; // Create a new Notification Hub client. NotificationHubClient hub = NotificationHubClient .CreateClientFromConnectionString(notificationHubConnection, notificationHubName); // Android payload var androidNotificationPayload = "{ \"data\" : {\"message\":\"" + item.Text + "\"}}"; try { // Send the push notification and log the results. var result = await hub.SendGcmNativeNotificationAsync(androidNotificationPayload); // Write the success result to the logs. config.Services.GetTraceWriter().Info(result.State.ToString()); } catch (System.Exception ex) { // Write the failure result to the logs. config.Services.GetTraceWriter() .Error(ex.Message, null, "Push.SendAsync Error"); } return CreatedAtRoute("Tables", new { id = current.Id }, current); }
Tegye közzé újra a kiszolgálóprojektet.
Node.js háttérprojekt
Állítsa be a háttérprojektet.
Cserélje le a todoitem.js fájlban lévő kódot a következőre:
var azureMobileApps = require('azure-mobile-apps'), promises = require('azure-mobile-apps/src/utilities/promises'), logger = require('azure-mobile-apps/src/logger'); var table = azureMobileApps.table(); table.insert(function (context) { // For more information about the Notification Hubs JavaScript SDK, // see https://aka.ms/nodejshubs logger.info('Running TodoItem.insert'); // Define the GCM payload. var payload = { "data": { "message": context.item.text } }; // Execute the insert. The insert returns the results as a Promise, // Do the push as a post-execute action within the promise flow. return context.execute() .then(function (results) { // Only do the push if configured if (context.push) { // Send a GCM native notification. context.push.gcm.send(null, payload, function (error) { if (error) { logger.error('Error while sending push notification: ', error); } else { logger.info('Push notification sent successfully!'); } }); } // Don't forget to return the results from the context.execute() return results; }) .catch(function (error) { logger.error('Error while running context.execute: ', error); }); }); module.exports = table;
Ez egy GCM-értesítést küld, amely tartalmazza az item.text szöveget egy új teendőelem beszúrásakor.
Amikor a helyi számítógépen szerkeszti a fájlt, tegye közzé újra a kiszolgálóprojektet.
Leküldéses értesítések hozzáadása az alkalmazáshoz
Ebben a szakaszban frissíti az androidos ügyfélalkalmazást a leküldéses értesítések kezeléséhez.
Az Android SDK verziójának ellenőrzése
A folyamatban lévő fejlesztés miatt előfordulhat, hogy az Android Studio-ban telepített Android SDK-verzió nem egyezik meg a kódban szereplő verzióval. Az ebben az oktatóanyagban hivatkozott Android SDK a 26-os verzió, amely az íráskor legújabb. A verziószám az SDK új kiadásainak megjelenésekor növekedhet, és azt javasoljuk, hogy a legújabb elérhető verziót használja.
A verzióeltérés két tünete:
- A projekt létrehozásakor vagy újraépítésekor Gradle-hibaüzenetek jelenhetnek meg, például
Gradle sync failed: Failed to find target with hash string 'android-XX'
. - A kódban szereplő, utasítások alapján
import
feloldandó szabványos Android-objektumok hibaüzeneteket generálhatnak.
Ha ezek bármelyike megjelenik, előfordulhat, hogy az Android SDK Android Studióban telepített verziója nem egyezik meg a letöltött projekt SDK-céljával. A verzió ellenőrzéséhez végezze el a következő módosításokat:
Az Android Studióban kattintson az Eszközök Android>>SDK-kezelő elemre. Ha még nem telepítette az SDK platform legújabb verzióját, kattintson a telepítéshez. Jegyezze fel a verziószámot.
A Project Explorer lap Gradle-szkriptek területén nyissa meg a build.gradle fájlt (Modul: alkalmazás). Győződjön meg arról, hogy a compileSdkVersion és a targetSdkVersion a legújabb telepített SDK-verzióra van beállítva. A
build.gradle
következőhöz hasonló lehet:android { compileSdkVersion 26 defaultConfig { targetSdkVersion 26 } }
A következő lépés a Google Play-szolgáltatások telepítése. A Firebase Cloud Messaging minimális API-szintű követelményekkel rendelkezik a fejlesztéshez és teszteléshez, amelyeknek meg kell felelniük a jegyzékfájl minSdkVersion tulajdonságának.
Ha régebbi eszközzel tesztel, tekintse meg az Add Firebase to Your Android Project (A Firebase hozzáadása az Android-projekthez ) című témakört, és állapítsa meg, hogy milyen alacsonyan állíthatja be ezt az értéket, és állítsa be megfelelően.
Firebase Cloud Messaging hozzáadása a projekthez
Az Android Studióban válassza a Fájlprojekt>struktúrája lehetőséget. Válassza az Értesítések lehetőséget, válassza a Firebase Cloud Messaging lehetőséget, majd kattintson az OK gombra.
Kód hozzáadása
Nyissa meg a fájlt
AndroidManifest.xml
az alkalmazásprojektben. Adja hozzá a következő kódot aapplication
nyitó címke után:<service android:name=".ToDoMessagingService"> <intent-filter> <action android:name="com.google.firebase.MESSAGING_EVENT"/> </intent-filter> </service> <service android:name=".ToDoInstanceIdService"> <intent-filter> <action android:name="com.google.firebase.INSTANCE_ID_EVENT"/> </intent-filter> </service>
Nyissa meg a fájlt
ToDoActivity.java
, és végezze el a következő módosításokat:Adja hozzá az importálási utasítást:
import com.google.firebase.iid.FirebaseInstanceId;
Módosítsa a definíciót
MobileServiceClient
privátról privátstatikusra, így most így néz ki:private static MobileServiceClient mClient;
Metódus hozzáadása
registerPush
:public static void registerPush() { final String token = FirebaseInstanceId.getInstance().getToken(); if (token != null) { new AsyncTask<Void, Void, Void>() { protected Void doInBackground(Void... params) { mClient.getPush().register(token); return null; } }.execute(); } }
Frissítse az osztály onCreate metódusát
ToDoActivity
. A példányosítás után mindenképpen adja hozzá ezt aMobileServiceClient
kódot.registerPush();
Adjon hozzá egy új osztályt az értesítések kezeléséhez. A Project Explorerben nyissa meg az alkalmazás>java-projekt-névtér> csomópontjait, és kattintson a jobb gombbal a csomagnév-csomópontra. Kattintson az Új, majd a Java-osztály elemre. Írja be a Név mezőbe
ToDoMessagingService
, majd kattintson az OK gombra. Ezután cserélje le az osztálydeklarációt a következőre:import android.app.Notification; import android.app.NotificationManager; import android.app.PendingIntent; import android.content.Context; import android.content.Intent; import com.google.firebase.messaging.FirebaseMessagingService; import com.google.firebase.messaging.RemoteMessage; public class ToDoMessagingService extends FirebaseMessagingService { private static final int NOTIFICATION_ID = 1; @Override public void onMessageReceived(RemoteMessage remoteMessage) { String message = remoteMessage.getData().get("message"); if (message != null) { sendNotification("Notification Hub Demo", message); } } private void sendNotification(String title, String messageBody) { PendingIntent contentIntent = PendingIntent.getActivity(this, 0, new Intent(this, ToDoActivity.class), 0); Notification.Builder notificationBuilder = new Notification.Builder(this) .setSmallIcon(R.drawable.ic_launcher) .setContentTitle(title) .setContentText(messageBody) .setContentIntent(contentIntent); NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); if (notificationManager != null) { notificationManager.notify(NOTIFICATION_ID, notificationBuilder.build()); } } }
Adjon hozzá egy másik osztályt a jogkivonat-frissítések kezeléséhez. Hozza létre
ToDoInstanceIdService
a Java-osztályt, és cserélje le az osztálydeklarációt a következőre:import com.google.firebase.iid.FirebaseInstanceIdService; public class ToDoInstanceIdService extends FirebaseInstanceIdService { @Override public void onTokenRefresh() { ToDoActivity.registerPush(); } }
Az alkalmazás most már frissül, hogy támogassa a leküldéses értesítéseket.
Az alkalmazás tesztelése a közzétett mobilszolgáltatással
Az alkalmazást tesztelheti úgy, hogy közvetlenül csatlakoztat egy Android-telefont EGY USB-kábellel, vagy egy virtuális eszközt használ az emulátorban.
Következő lépések
Most, hogy elvégezte ezt az oktatóanyagot, folytassa az alábbi oktatóanyagok egyikével:
- Hitelesítés hozzáadása az Android-alkalmazáshoz. Megtudhatja, hogyan adhat hitelesítést a teendőlista gyorsútmutató-projektjéhez Androidon egy támogatott identitásszolgáltató használatával.
- Engedélyezze az offline szinkronizálást androidos alkalmazásához. Megtudhatja, hogyan adhat offline támogatást az alkalmazáshoz a Mobile Apps háttéralkalmazásával. Az offline szinkronizálással a felhasználók akkor is használhatják a mobilalkalmazásokat – az adatok megtekintését, hozzáadását vagy módosítását –, ha nincs hálózati kapcsolat.