Android uygulamanıza anında iletme bildirimleri ekleme
Genel Bakış
Bu öğreticide, Android hızlı başlangıç projesine anında iletme bildirimleri ekleyerek her kayıt eklendiğinde cihaza anında iletme bildirimi gönderilmesini sağlarsınız.
İndirilen hızlı başlangıç sunucusu projesini kullanmıyorsanız, anında iletme bildirimi uzantısı paketine ihtiyacınız vardır. Daha fazla bilgi için bkz. Azure Mobile Apps için .NET arka uç sunucusu SDK'sı ile çalışma.
Önkoşullar
Aşağıdakilere ihtiyacınız vardır:
Projenizin arka ucuna bağlı olarak bir IDE:
- Bu uygulamanın Node.js arka ucu varsa Android Studio.
- Bu uygulamanın Microsoft .NET arka ucu varsa 2013 veya sonraki bir sürümü Visual Studio Community.
Firebase Cloud Messaging için Android 2.3 veya üzeri, Google Repository revision 27 veya üzeri ve Google Play Services 9.0.2 veya üzeri.
Android hızlı başlangıcını tamamlayın.
Firebase Cloud Messaging'i destekleyen bir proje oluşturma
Firebase konsolunda oturum açın. Henüz bir tane yoksa yeni bir Firebase projesi oluşturun.
Projenizi oluşturduktan sonra Firebase’i Android uygulamanıza ekleyin’i seçin.
Android uygulamanıza Firebase ekleme sayfasında aşağıdaki adımları uygulayın:
Android paket adı için uygulamanızın build.gradle dosyasında applicationId değerini kopyalayın. Bu örnekte, şeklindedir
com.fabrikam.fcmtutorial1app
.Uygulamayı kaydet'i seçin.
Google-services.json dosyasını indir'i seçin, dosyayı projenizin uygulama klasörüne kaydedin ve ardından İleri'yi seçin.
Android Studio'da projenizde aşağıdaki yapılandırma değişikliklerini yapın.
Proje düzeyi build.gradle dosyanızda (<project>/build.gradle), bağımlılıklar bölümüne aşağıdaki deyimi ekleyin.
classpath 'com.google.gms:google-services:4.0.1'
Uygulama düzeyi build.gradle dosyanızda (<project>/<app-module>/build.gradle), bağımlılıklar bölümüne aşağıdaki deyimleri ekleyin.
implementation 'com.google.firebase:firebase-core:16.0.8' implementation 'com.google.firebase:firebase-messaging:17.3.4'
Bağımlılıklar bölümünden sonra uygulama düzeyi build.gradle dosyasının sonuna aşağıdaki satırı ekleyin.
apply plugin: 'com.google.gms.google-services'
Araç çubuğunda Şimdi eşitle'yi seçin.
İleri’yi seçin.
Bu adımı atla'yı seçin.
Firebase konsolunda projenizin dişli simgesini seçin. Sonra, Proje Ayarları’nı seçin.
Google-services.json dosyasını Android Studio projenizin uygulama klasörüne indirmediyseniz, bunu bu sayfada yapabilirsiniz.
Üst kısımdaki Bulut Mesajlaşması sekmesine geçin.
Sunucu anahtarını kopyalayıp daha sonra kullanmak üzere kaydedin. Hub'ınızı yapılandırmak için bu değeri kullanırsınız.
Bildirim hub’ını yapılandırma
Azure App Service Mobile Apps özelliği, gönderim göndermek için Azure Notification Hubs'ı kullandığından, mobil uygulamanız için bir bildirim hub'ı yapılandıracaksınız.
Azure portalApp Services'e gidin ve uygulamanızın arka ucunu seçin. Ayarlar'ın altında Gönder'i seçin.
Uygulamaya bildirim hub'ı kaynağı eklemek için Bağlan'ı seçin. Hub oluşturabilir veya var olan bir hub'a bağlanabilirsiniz.
Artık Mobile Apps arka uç projenize bir bildirim hub'ı bağladınız. Daha sonra bu bildirim hub'sını cihazlara göndermek üzere bir platform bildirim sistemine (PNS) bağlanacak şekilde yapılandıracaksınız.
Anında iletme bildirimleri göndermek için Azure'ı yapılandırma
Azure portalTüm>Uygulama Hizmetlerine Gözat'a ve ardından Mobile Apps arka ucuna tıklayın. Ayarlar'ın altında App Service Gönder'e tıklayın ve ardından bildirim hub'ınızın adına tıklayın.
Google'a (GCM) gidin, önceki yordamda Firebase'den aldığınız Sunucu Anahtarı değerini girin ve Kaydet'e tıklayın.
Mobile Apps arka ucu artık Firebase Cloud Messaging kullanacak şekilde yapılandırılmıştır. Bu, bildirim hub'ını kullanarak android cihazda çalışan uygulamanıza anında iletme bildirimleri göndermenizi sağlar.
Sunucu projesi için anında iletme bildirimlerini etkinleştirme
Arka uç proje türünüzle eşleşen yordamı ( .NET arka ucu veya arka ucuNode.js) kullanın.
.NET arka uç projesi
Visual Studio'da sunucu projesine sağ tıklayın ve NuGet Paketlerini Yönet'e tıklayın. için
Microsoft.Azure.NotificationHubs
arama yapın ve yükle'ye tıklayın. Bu, Notification Hubs istemci kitaplığını yükler.Controllers klasöründe TodoItemController.cs dosyasını açın ve aşağıdaki
using
deyimleri ekleyin:using Microsoft.Azure.Mobile.Server.Config; using Microsoft.Azure.NotificationHubs;
PostTodoItem
yöntemini aşağıdaki kod ile değiştirin: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); }
Sunucu projesini yeniden yayımlayın.
Arka uç proje Node.js
Arka uç projenizi ayarlayın.
todoitem.js dosyasındaki mevcut kodu aşağıdakilerle değiştirin:
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;
Bu, yeni bir yapılacaklar öğesi eklendiğinde item.text dosyasını içeren bir GCM bildirimi gönderir.
Dosyayı yerel bilgisayarınızda düzenlerken sunucu projesini yeniden yayımlayın.
Uygulamanıza anında iletme bildirimleri ekleme
Bu bölümde, anında iletme bildirimlerini işlemek için istemci Android uygulamanızı güncelleştirin.
Android SDK sürümünü doğrulama
Devam eden geliştirme nedeniyle, Android Studio'da yüklü Android SDK sürümü koddaki sürümle eşleşmeyebilir. Bu öğreticide başvuruda bulunılan Android SDK'sı, yazma sırasında en son sürüm olan 26'dır. SDK'nın yeni sürümleri göründüğünde sürüm numarası artabilir ve kullanılabilir en son sürümü kullanmanızı öneririz.
Sürüm uyuşmazlıklarının iki belirtisi şunlardır:
- Projeyi derlerken veya yeniden oluştururken gibi
Gradle sync failed: Failed to find target with hash string 'android-XX'
Gradle hata iletileri alabilirsiniz. - Koddaki deyimlere göre
import
çözümlenmesi gereken standart Android nesneleri hata iletileri oluşturuyor olabilir.
Bunlardan biri görünürse, Android Studio'da yüklü Olan Android SDK sürümü indirilen projenin SDK hedefiyle eşleşmeyebilir. Sürümü doğrulamak için aşağıdaki değişiklikleri yapın:
Android Studio'da Araçlar>Android>SDK Yöneticisi'ne tıklayın. SDK Platformunun en son sürümünü yüklemediyseniz yüklemek için tıklayın. Sürüm numarasını not edin.
Proje Gezgini sekmesindeki Gradle Betikleri'nin altında build.gradle (Modül: uygulama) dosyasını açın. compileSdkVersion ve targetSdkVersion'ın yüklenen en son SDK sürümüne ayarlandığından emin olun. aşağıdaki
build.gradle
gibi görünebilir:android { compileSdkVersion 26 defaultConfig { targetSdkVersion 26 } }
Bir sonraki adımınız Google Play hizmetlerini yüklemektir. Firebase Cloud Messaging, bildirimdeki minSdkVersion özelliğinin uyması gereken geliştirme ve test için bazı minimum API düzeyi gereksinimlerine sahiptir.
Eski bir cihazla test ediyorsanız, bu değeri ne kadar düşük ayarlayabileceğinizi belirlemek ve uygun şekilde ayarlamak için Android Projenize Firebase Ekleme konusuna başvurun.
Projeye Firebase Cloud Messaging ekleme
Android Studio'da Dosya>Projesi Yapısı'nı seçin. Bildirimler'i seçin, Firebase Cloud Messaging'i seçin ve ardından Tamam'a tıklayın.
Kod ekleme
Uygulama projenizde dosyasını
AndroidManifest.xml
açın. Açılış etiketindenapplication
sonra aşağıdaki kodu ekleyin:<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>
dosyasını
ToDoActivity.java
açın ve aşağıdaki değişiklikleri yapın:import deyimini ekleyin:
import com.google.firebase.iid.FirebaseInstanceId;
Özel statik olan tanımını
MobileServiceClient
özel statik olarak değiştirin, böylece şimdi şöyle görünür:private static MobileServiceClient mClient;
Yöntem ekleme
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(); } }
sınıfının onCreate yöntemini güncelleştirin
ToDoActivity
. örneği eklendikten sonra bu kodu eklediğinizdenMobileServiceClient
emin olun.registerPush();
Bildirimleri işlemek için yeni bir sınıf ekleyin. Proje Gezgini'nde uygulama>java>your-project-namespace düğümlerini açın ve paket adı düğümüne sağ tıklayın. Yeni'ye ve ardından Java Sınıfı'ne tıklayın. Ad alanına yazın
ToDoMessagingService
ve Tamam'a tıklayın. Ardından sınıf bildirimini şununla değiştirin: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()); } } }
Belirteç güncelleştirmelerini işlemek için başka bir sınıf ekleyin. Java sınıfı oluşturun
ToDoInstanceIdService
ve sınıf bildirimini şununla değiştirin:import com.google.firebase.iid.FirebaseInstanceIdService; public class ToDoInstanceIdService extends FirebaseInstanceIdService { @Override public void onTokenRefresh() { ToDoActivity.registerPush(); } }
Uygulamanız artık anında iletme bildirimlerini destekleyecek şekilde güncelleştirildi.
Uygulamayı yayımlanan mobil hizmette test etme
Uygulamayı, usb kablosuyla doğrudan bir Android telefon takarak veya öykünücüde bir sanal cihaz kullanarak test edebilirsiniz.
Sonraki adımlar
Bu öğreticiyi tamamladığınıza göre, aşağıdaki öğreticilerden birine devam etmeyi göz önünde bulundurun:
- Android uygulamanıza kimlik doğrulaması ekleyin. Desteklenen bir kimlik sağlayıcısı kullanarak Android'de yapılacaklar listesi hızlı başlangıç projesine kimlik doğrulaması eklemeyi öğrenin.
- Android uygulamanız için çevrimdışı eşitlemeyi etkinleştirin. Mobile Apps arka ucunu kullanarak uygulamanıza çevrimdışı destek eklemeyi öğrenin. Çevrimdışı eşitleme ile kullanıcılar, ağ bağlantısı olmadığında bile verileri görüntüleme, ekleme veya değiştirme gibi bir mobil uygulamayla etkileşimde bulunabilir.