Menambahkan pemberitahuan push ke aplikasi Android Anda

Gambaran Umum

Dalam tutorial ini, Anda menambahkan pemberitahuan push ke proyek mulai cepat Android sehingga pemberitahuan push dikirim ke perangkat setiap kali rekaman dimasukkan.

Jika Anda tidak menggunakan proyek server mulai cepat yang diunduh, Anda memerlukan paket ekstensi pemberitahuan push. Untuk informasi selengkapnya, lihat Bekerja dengan SDK server backend .NET untuk Azure Mobile Apps.

Prasyarat

Anda membutuhkan hal berikut ini:

  • IDE, tergantung pada back end proyek Anda:

  • Android 2.3 atau yang lebih baru, revisi Repositori Google 27 atau yang lebih baru, dan Google Play Services 9.0.2 atau yang lebih baru untuk Firebase Cloud Messaging.

  • Selesaikan mulai cepat Android.

Membuat proyek yang mendukung Firebase Cloud Messaging

  1. Masuk ke Konsol Firebase. Buat proyek Firebase baru jika Anda belum memilikinya.

  2. Setelah membuat proyek, pilih Tambahkan Firebase ke aplikasi Android Anda.

    Menambahkan Firebase ke aplikasi Android Anda

  3. Di halaman Tambahkan Firebase ke aplikasi Android Anda, lakukan langkah-langkah berikut:

    1. Untuk nama paket Android, salin nilai applicationId Anda di file build.gradle aplikasi. Contohnya, com.fabrikam.fcmtutorial1app.

      Menentukan nama paket

    2. Pilih Daftarkan aplikasi.

  4. Pilih Unduh google-services.jsanda, simpan file ke folder aplikasi proyek Anda, lalu pilih Berikutnya.

    Mengunduh google-services.json

  5. Buat perubahan konfigurasi berikut ke proyek Anda di Android Studio.

    1. Di file build.gradle tingkat proyek Anda (<project>/build.gradle), tambahkan pernyataan berikut ke bagian dependensi.

      classpath 'com.google.gms:google-services:4.0.1'
      
    2. Di file gradle build tingkat aplikasi Anda (<project>/<app-module>/build.gradle), tambahkan pernyataan berikut ke bagian dependensi.

      implementation 'com.google.firebase:firebase-core:16.0.8'
      implementation 'com.google.firebase:firebase-messaging:17.3.4'
      
    3. Tambahkan baris berikut ke bagian akhir file build.gradle tingkat aplikasi setelah bagian dependensi.

      apply plugin: 'com.google.gms.google-services'
      
    4. Pilih Sinkronkan sekarang pada toolbar.

      perubahan konfigurasi build.gradle

  6. Pilih Selanjutnya.

  7. Pilih Lompati langkah ini.

    Melompati langkah terakhir

  8. Di konsol Firebase, pilih cog untuk proyek Anda. Pilih Pengaturan Proyek.

    Memilih pengaturan proyek

  9. Jika belum mengunduh file google-services.json ke dalam folder aplikasi proyek Android Studio Anda, Anda dapat melakukannya di halaman ini.

  10. Alihkan ke tab Perpesanan Cloud di bagian atas.

  11. Salin dan simpan Kunci Server untuk digunakan nanti. Gunakan nilai ini untuk mengonfigurasi hub Anda.

Mengonfigurasi hub pemberitahuan

Fitur Mobile Apps Azure App Service menggunakan Azure Notification Hubs untuk mengirim push, sehingga Anda akan mengonfigurasi hub pemberitahuan untuk aplikasi seluler Anda.

  1. Di portal Azure, buka App Services, lalu pilih back end aplikasi Anda. Di bawah Pengaturan, pilih Dorong.

  2. Untuk menambahkan sumber daya hub pemberitahuan ke aplikasi, pilih Sambungkan. Anda dapat membuat hub atau menyambungkan ke hub yang sudah ada.

    Mengonfigurasi hub

Sekarang Anda telah menyambungkan hub pemberitahuan ke proyek back-end Mobile Apps Anda. Nantinya Anda mengonfigurasi hub pemberitahuan ini untuk terhubung ke sistem pemberitahuan platform (PNS) untuk mendorong ke perangkat.

Mengonfigurasi Azure untuk mengirim pemberitahuan push

  1. Di portal Azure, klik Telusuri Semua>App Services, lalu klik back end Aplikasi Seluler Anda. Di bawah Pengaturan, klik App Service Push, lalu klik nama hub pemberitahuan Anda.

  2. Buka Google (GCM), masukkan nilai Kunci Server yang Anda peroleh dari Firebase di prosedur sebelumnya, lalu klik Simpan.

    Mengatur kunci API di portal

Back end Mobile Apps sekarang dikonfigurasi untuk menggunakan Firebase Cloud Messaging. Ini memungkinkan Anda mengirim pemberitahuan push ke aplikasi yang berjalan di perangkat Android, dengan menggunakan hub pemberitahuan.

Mengaktifkan pemberitahuan push untuk proyek server

Gunakan prosedur yang cocok dengan jenis proyek back-end Anda—back end .NET atau back endNode.js.

Proyek back-end .NET

  1. Di Visual Studio, klik kanan proyek server, dan klik Kelola Paket NuGet. Cari Microsoft.Azure.NotificationHubs, lalu klik Instal. Ini menginstal pustaka klien Notification Hubs.

  2. Di folder Pengontrol, buka TodoItemController.cs dan tambahkan pernyataan berikut using :

    using Microsoft.Azure.Mobile.Server.Config;
    using Microsoft.Azure.NotificationHubs;
    
  3. Ganti metode PostTodoItem dengan kode berikut:

    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. Menerbitkan ulang proyek server.

Node.js proyek back-end

  1. Siapkan proyek backend Anda.

  2. Ganti kode yang ada di file todoitem.js dengan yang berikut ini:

    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;
    

    Ini mengirimkan pemberitahuan GCM yang berisi item.text saat item tugas baru disisipkan.

  3. Saat mengedit file di komputer lokal Anda, terbitkan ulang proyek server.

Menambahkan pemberitahuan push ke aplikasi Anda

Di bagian ini, Anda memperbarui aplikasi Android klien untuk menangani pemberitahuan push.

Memverifikasi versi Android SDK

Karena pengembangan yang sedang berlangsung, versi Android SDK yang diinstal di Android Studio mungkin tidak cocok dengan versi dalam kode. Android SDK yang dirujuk dalam tutorial ini adalah versi 26, yang terbaru pada saat penulisan. Nomor versi dapat meningkat saat rilis baru SDK muncul, dan sebaiknya gunakan versi terbaru yang tersedia.

Dua gejala ketidakcocokan versi adalah:

  • Saat membuat atau membangun kembali proyek, Anda mungkin mendapatkan pesan kesalahan Gradle seperti Gradle sync failed: Failed to find target with hash string 'android-XX'.
  • Objek Android standar dalam kode yang harus diselesaikan berdasarkan import pernyataan mungkin menghasilkan pesan kesalahan.

Jika salah satu dari ini muncul, versi Android SDK yang diinstal di Android Studio mungkin tidak cocok dengan target SDK proyek yang diunduh. Untuk memverifikasi versi, buat perubahan berikut:

  1. Di Android Studio, klik Alat>Android>SDK Manager. Jika Anda belum menginstal platform SDK versi terbaru, klik untuk menginstalnya. Catat nomor versi.

  2. Pada tab Project Explorer , di bawah Skrip Gradle, buka file build.gradle (Module: app). Pastikan compileSdkVersion dan targetSdkVersion diatur ke versi SDK terbaru yang diinstal. Mungkin build.gradle terlihat seperti ini:

    android {
        compileSdkVersion 26
        defaultConfig {
            targetSdkVersion 26
        }
    }
    

Langkah Selanjutnya adalah menginstal layanan Google Play. Firebase Cloud Messaging memiliki beberapa persyaratan tingkat API minimum untuk pengembangan dan pengujian, yang harus sesuai dengan properti minSdkVersion dalam manifes.

Jika Anda menguji dengan perangkat yang lebih lama, lihat Menambahkan Firebase ke Proyek Android Anda untuk menentukan seberapa rendah Anda dapat mengatur nilai ini, dan mengaturnya dengan tepat.

Menambahkan Firebase Cloud Messaging ke proyek

  1. Menambahkan Firebase ke proyek Android Anda

  2. Di Android Studio, pilihStruktur ProyekFile>. Pilih Pemberitahuan, pilih Firebase Cloud Messaging, lalu klik OK.

Menambahkan kode

  1. Di proyek aplikasi Anda, buka file AndroidManifest.xml. Tambahkan kode berikut setelah application tag pembuka:

    <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. Buka file ToDoActivity.java, dan buat perubahan berikut:

    • Tambahkan pernyataan impor:

      import com.google.firebase.iid.FirebaseInstanceId;
      
    • Ubah definisi dari MobileServiceClientprivat ke statis privat, sehingga sekarang terlihat seperti ini:

      private static MobileServiceClient mClient;
      
    • Tambahkan registerPush metode:

      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();
          }
      }
      
    • Perbarui metode onCreate kelas ToDoActivity . Pastikan untuk menambahkan kode ini setelah MobileServiceClient dibuat.

      registerPush();
      
  3. Tambahkan kelas baru untuk menangani pemberitahuan. Di Project Explorer, buka nodejavayour-project-namespace> aplikasi>, dan klik kanan node nama paket. Klik Baru, lalu klik Kelas Java. Di Nama, ketik ToDoMessagingService, lalu klik OK. Kemudian, ganti deklarasi kelas dengan:

    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. Tambahkan kelas lain untuk menangani pembaruan token. Buat ToDoInstanceIdService kelas java dan ganti deklarasi kelas dengan:

    import com.google.firebase.iid.FirebaseInstanceIdService;
    
    public class ToDoInstanceIdService extends FirebaseInstanceIdService {
    
        @Override
        public void onTokenRefresh() {
            ToDoActivity.registerPush();
        }
    }
    

Aplikasi Anda sekarang diperbarui untuk mendukung pemberitahuan push.

Menguji aplikasi terhadap layanan seluler yang diterbitkan

Anda dapat menguji aplikasi dengan langsung melampirkan ponsel Android dengan kabel USB, atau dengan menggunakan perangkat virtual di emulator.

Langkah berikutnya

Sekarang setelah Anda menyelesaikan tutorial ini, pertimbangkan untuk melanjutkan ke salah satu tutorial berikut: