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

  1. Firebase konsolunda oturum açın. Henüz bir tane yoksa yeni bir Firebase projesi oluşturun.

  2. Projenizi oluşturduktan sonra Firebase’i Android uygulamanıza ekleyin’i seçin.

    Firebase’i Android uygulamanıza ekleyin

  3. Android uygulamanıza Firebase ekleme sayfasında aşağıdaki adımları uygulayın:

    1. Android paket adı için uygulamanızın build.gradle dosyasında applicationId değerini kopyalayın. Bu örnekte, şeklindedir com.fabrikam.fcmtutorial1app.

      Paket adını belirtin

    2. Uygulamayı kaydet'i seçin.

  4. Google-services.json dosyasını indir'i seçin, dosyayı projenizin uygulama klasörüne kaydedin ve ardından İleri'yi seçin.

    google-services.json dosyasını indirin

  5. Android Studio'da projenizde aşağıdaki yapılandırma değişikliklerini yapın.

    1. 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'
      
    2. 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'
      
    3. 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'
      
    4. Araç çubuğunda Şimdi eşitle'yi seçin.

      build.gradle yapılandırma değişiklikleri

  6. İleri’yi seçin.

  7. Bu adımı atla'yı seçin.

    Son adımı atla

  8. Firebase konsolunda projenizin dişli simgesini seçin. Sonra, Proje Ayarları’nı seçin.

    Proje Ayarları’nı seçin

  9. Google-services.json dosyasını Android Studio projenizin uygulama klasörüne indirmediyseniz, bunu bu sayfada yapabilirsiniz.

  10. Üst kısımdaki Bulut Mesajlaşması sekmesine geçin.

  11. 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.

  1. Azure portalApp Services'e gidin ve uygulamanızın arka ucunu seçin. Ayarlar'ın altında Gönder'i seçin.

  2. Uygulamaya bildirim hub'ı kaynağı eklemek için Bağlan'ı seçin. Hub oluşturabilir veya var olan bir hub'a bağlanabilirsiniz.

    Hub yapılandırma

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

  1. 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.

  2. Google'a (GCM) gidin, önceki yordamda Firebase'den aldığınız Sunucu Anahtarı değerini girin ve Kaydet'e tıklayın.

    Portalda API anahtarını ayarlama

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

  1. Visual Studio'da sunucu projesine sağ tıklayın ve NuGet Paketlerini Yönet'e tıklayın. için Microsoft.Azure.NotificationHubsarama yapın ve yükle'ye tıklayın. Bu, Notification Hubs istemci kitaplığını yükler.

  2. 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;
    
  3. 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);
    }
    
  4. Sunucu projesini yeniden yayımlayın.

Arka uç proje Node.js

  1. Arka uç projenizi ayarlayın.

  2. 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.

  3. 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:

  1. 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.

  2. 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

  1. Android projenize Firebase ekleme

  2. 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

  1. Uygulama projenizde dosyasını AndroidManifest.xmlaçın. Açılış etiketinden application 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>
    
  2. dosyasını ToDoActivity.javaaçı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ğinizden MobileServiceClient emin olun.

      registerPush();
      
  3. 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 ToDoMessagingServiceve 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());
            }
        }
    }
    
  4. 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: