Öğretici: Azure Notification Hubs ve Google Cloud Messaging (kullanım dışı) kullanarak Android cihazlara anında iletme bildirimleri gönderme

Uyarı

10 Nisan 2018 itibariyle, Google Google Cloud Messaging (GCM) kullanım dışıdır. GCM sunucusu ve istemci API 'Leri kullanım dışıdır ve 29 Mayıs 2019 ' den hemen sonra kaldırılacaktır. Daha fazla bilgi için bkz. GCM ve FCM hakkında sık sorulan sorular.

Genel Bakış

Bu öğreticide, bir Android uygulamasına anında iletme bildirimleri göndermek için Azure Notification Hubs'ın nasıl kullanılacağı gösterilir. Google Cloud Messaging (GCM) kullanarak anında iletme bildirimleri alan bir Android uygulaması oluşturursunuz.

Önemli

Google Cloud Messaging (GCM) kullanım dışıdır ve yakındakaldırılacak.

Önemli

Bu konuda Google Cloud Messaging (GCM) ile anında iletme bildirimleri gösterilmektedir. Google Firebase Cloud Messaging (FCM) kullanıyorsanız bkz. Azure Notification Hubs ve FCM ile Android’e anında iletme bildirimleri gönderme.

Bu öğreticinin tamamlanan kodu GitHub'da buradan indirilebilir.

Bu öğreticide, aşağıdaki eylemleri gerçekleştireceksiniz:

  • Google Cloud Messaging'i destekleyen bir proje oluşturma.
  • Bildirim hub’ı oluşturma
  • Uygulamanızı bildirim hub'ına bağlama
  • Uygulamayı test etme

Önkoşullar

Google Cloud Messaging'i destekleyen bir proje oluşturma

  1. Google Cloud Console’a gidin, Google hesabı kimlik bilgilerinizle giriş yapın.

  2. Araç çubuğunda Proje Oluştur’u seçin.

    Yeni proje oluşturma

  3. Proje adı olarak projeniz için bir ad girin ve Oluştur’a tıklayın.

  4. Araç çubuğundaki Uyarılar düğmesini seçip listeden projenizi seçin. Projenizin panosunu görürsünüz. Dilerseniz şu URL'yi kullanarak doğrudan panoya da gidebilirsiniz: https://console.developers.google.com/home/dashboard?project=<YOUR PROJECT NAME>

    Uyarılar bölümünden projenizi seçin

  5. Panonun Proje bilgileri kutucuğundaki Proje numarası’nı kaydedin.

    Proje Kimliği

  6. Panodaki API’ler kutucuğunda API’lerin genel bakışına git’i seçin.

    API’ye genel bakış bağlantısı

  7. API sayfasında API’LERİ VE HİZMETLERİ ETKİNLEŞTİR’i seçin.

    Enable API’leri ve Hizmetleri Etkinleştir düğmesi

  8. Google Cloud Messaging’i bulup seçin.

    Google Cloud Messaging’i bulup seçin

  9. Projeye yönelik olarak Google Cloud Messaging’i etkinleştirmek için ETKİNLEŞTİR’i seçin.

    Google Cloud Messaging'i etkinleştirme

  10. Araç çubuğundan Kimlik bilgilerini oluşturun’u seçin.

    Kimlik bilgilerini oluşturun düğmesi

  11. Projenize kimlik bilgileri ekleyin sayfasında API anahtarı bağlantısını seçin.

    Kimlik bilgileri ekle

  12. API anahtarı sayfasında Oluştur/Kaydet’i seçin. Aşağıdaki örnekte IP adresleri seçeneği belirlenmiş ve izin verilen IP adresleri için 0.0.0.0/0 girilmiştir. API anahtarınızı uygun şekilde kısıtlamanız gerekir.

    API Anahtarı - Oluştur düğmesi

  13. API anahtarını panoya kopyalayın ve bir yere kaydedin.

    API anahtarını kopyalama

    Azure’un GCM ile kimlik doğrulaması yapmasını ve uygulamanız adına anında iletme bildirimleri göndermesini etkinleştirmek için bu API anahtarını kullanın. Proje panosuna geri gitmek için şu URL'yi kullanın: https://console.developers.google.com/home/dashboard?project=<YOUR PROJECT NAME>

Bildirim hub’ı oluşturma

  1. Azure portalında oturum açın.

  2. Sol taraftaki menüden tüm hizmetler ' i seçin ve ardından Mobil bölümünde Notification Hubs ' yi seçin. Hizmet adının yanındaki yıldız simgesini seçerek hizmeti Sol menüdeki Sık Kullanılanlar bölümüne ekleyin. Sık kullanılanlara Notification Hubs ekledikten sonra, soldaki menüden seçin.

    Azure portal Notification Hubs seçin

  3. Notification Hubs sayfasında, araç çubuğunda Ekle ' yi seçin.

    Notification Hubs-araç çubuğu düğmesi Ekle

  4. Bildirim Hub 'ı sayfasında, aşağıdaki adımları uygulayın:

    1. Bildirim Hub 'ına bir ad girin.

    2. Yeni ad alanı oluştur' a bir ad girin. Bir ad alanı bir veya daha fazla hub içerir.

    3. Konum açılan liste kutusundan bir değer seçin. Bu değer, hub 'ı oluşturmak istediğiniz konumu belirtir.

    4. Kaynak grubunda var olan bir kaynak grubunu seçin veya yeni bir kaynak grubu için bir ad oluşturun.

    5. Oluştur’u seçin.

      Azure portalı - Bildirim hub'ı özelliklerini ayarlama

  5. Bildirimleri (zil simgesi) seçin ve ardından Kaynağa Git' i seçin. Ayrıca Notification Hubs sayfasında listeyi yenileyebilir ve hub 'ınızı seçebilirsiniz.

    Azure portal-kaynağa git

  6. Listeden Erişim İlkeleri'ni seçin. İki bağlantı dizesinin sizin için kullanılabilir olduğunu unutmayın. Anında iletme bildirimlerini işlemek için onlara daha sonra ihtiyacınız olacak.

    Önemli

    Uygulamanızda Defaultfullsharedaccesssignature ilkesini kullanmayın. Bu, yalnızca arka uçta kullanılmak üzere tasarlanmıştır.

    Azure portalı - Bildirim hub'ı bağlantı dizeleri

Bildirim hub’ı için GCM ayarını yapılandırma

  1. BILDIRIM ayarlarında Google (GCM) seçeneğini belirleyin.

  2. Google Cloud Console’dan aldığınız API Anahtarını girin.

  3. Araç çubuğunda Kaydet’i seçin.

    Azure Notification Hubs - Google (GCM)

Bildirim hub'ınız şimdi GCM ile birlikte çalışmak üzere yapılandırıldı. Ayrıca, uygulamanızı anında iletme bildirimleri alması ve göndermesi amacıyla kaydetmek için bağlantı dizelerine sahipsiniz.

Uygulamanızı Bildirim Hub 'ına bağlama

Yeni bir Android projesi oluşturma

  1. Android Studio'da yeni bir Android Studio projesi başlatın.

    Android Studio - yeni proje

  2. Telefon ve Tablet form faktörünü ve desteklemek istediğiniz Minimum SDK'yı seçin. Ardından İleri'ye tıklayın.

    Android Studio - proje oluşturma iş akışı

  3. Ana etkinlik için Boş Etkinlik'i seçin, İleri'ye tıklayın ve ardından Son'a tıklayın.

Projeye Google Play hizmetlerini ekleme

  1. Android Studio menüsünde Araçlar ' ı seçin ve ardından SDK yöneticisi' ni seçin.

  2. Projenizde kullanılan Android SDK hedef sürümünü seçin. Ardından Paket ayrıntılarını göster' i seçin.

    Android SDK Yöneticisi-hedef sürümü seçin

  3. Zaten yüklenmemişse Google API 'leri seçin.

    Android SDK Manager-Google API 'Leri seçildi

  4. SDK Tools sekmesine geçin. Google Play Hizmetleri zaten yüklemediyseniz, aşağıdaki görüntüde gösterildiği gibi Google Play hizmetleri seçin. Ardından, yüklemek için Uygula ' yı seçin. SDK yolunun sonraki bir adım için olduğunu unutmayın.

    Android SDK Manager-Google Play Hizmetleri seçildi

  5. Değişikliği Onayla iletişim kutusunu görürseniz Tamam' ı seçin. Bileşen yükleyicisi istenen bileşenleri yüklüyor. Bileşenler yüklendikten sonra son ' u seçin.

  6. Yeni projeler Için ayarlar iletişim kutusunu kapatmak için Tamam ' ı seçin.

  7. App dizinindeki Build. Gradle dosyasını açın ve altına aşağıdaki satırı ekleyin dependencies .

    implementation 'com.google.android.gms:play-services-gcm:16.0.0'
    
  8. Araç çubuğunda Şimdi Eşitle simgesini seçin.

    Gradle ile Eşitle

  9. AndroidManifest.xml dosyasını açın ve ardından aşağıdaki etiketi uygulama etiketine ekleyin.

    <meta-data android:name="com.google.android.gms.version"
         android:value="@integer/google_play_services_version" />
    

Azure Notification Hubs kitaplıkları ekleme

  1. Build.Gradle Uygulamanın dosyasında, Bağımlılıklar bölümüne aşağıdaki satırları ekleyin.

    implementation 'com.microsoft.azure:notification-hubs-android-sdk:0.6@aar'
    implementation 'com.microsoft.azure:azure-notifications-handler:1.0.1@aar'
    
  2. Bağımlılıklar bölümünden sonra aşağıdaki depoyu ekleyin.

    repositories {
        maven {
            url "https://dl.bintray.com/microsoftazuremobile/SDK"
        }
    }
    

Projenin AndroidManifest.xml güncelleştiriliyor

  1. GCM’yi desteklemek için, kodda Google’ın Örnek Kimliği API’sini kullanarak kayıt belirteçleri elde etmek için kullanılan bir Örnek Kimliği dinleyici hizmeti uygulayın. Bu öğreticide sınıfın adı MyInstanceIDService şeklindedir.

    Aşağıdaki hizmet tanımını AndroidManifest.xml dosyasında <application> etiketinin içine ekleyin. <your package> yer tutucusunu, AndroidManifest.xml dosyasının üst kısmında gösterilen asıl paket adınızla değiştirin.

    <service android:name="<your package>.MyInstanceIDService" android:exported="false">
        <intent-filter>
            <action android:name="com.google.android.gms.iid.InstanceID"/>
        </intent-filter>
    </service>
    
  2. Uygulama, Örnek Kimliği API’sinden GCM kayıt belirtecini aldıktan sonra, Azure Notification Hub'a kaydolmak için bu belirteci kullanır. RegistrationIntentService adlı bir IntentService kullanılarak arka planda kayıt gerçekleştirilir. Bu hizmet, GCM kayıt belirtecini yenilemekten sorumludur.

    Aşağıdaki hizmet tanımını AndroidManifest.xml dosyasında <application> etiketinin içine ekleyin. <your package> yer tutucusunu, AndroidManifest.xml dosyasının üst kısmında gösterilen asıl paket adınızla değiştirin.

    <service
        android:name="<your package>.RegistrationIntentService"
        android:exported="false">
    </service>
    
  3. Bildirimleri almak için bir alıcı tanımlayın. Aşağıdaki alıcı tanımını AndroidManifest.xml dosyasına <application> etiketinin içine ekleyin. <your package> yer tutucusunu, AndroidManifest.xml dosyasının üst kısmında gösterilen asıl paket adınızla değiştirin.

    <receiver android:name="com.microsoft.windowsazure.notifications.NotificationsBroadcastReceiver"
        android:permission="com.google.android.c2dm.permission.SEND">
        <intent-filter>
            <action android:name="com.google.android.c2dm.intent.RECEIVE" />
            <category android:name="<your package name>" />
        </intent-filter>
    </receiver>
    
  4. Aşağıdaki gerekli GCM izinlerini <application> etiketinin altına ekleyin. <your package> öğesini, AndroidManifest.xml dosyasının üst kısmında gösterilen paket adıyla değiştirin.

    Bu izinler hakkında daha fazla bilgi için bkz. Android IÇIN GCM istemci uygulaması ayarlama.

    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.GET_ACCOUNTS"/>
    <uses-permission android:name="android.permission.WAKE_LOCK"/>
    <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
    
    <permission android:name="<your package>.permission.C2D_MESSAGE" android:protectionLevel="signature" />
    <uses-permission android:name="<your package>.permission.C2D_MESSAGE"/>
    

Kod ekleme

  1. Proje görünümünde, uygulama > src > Main > Java' yı genişletin. Java'nın altındaki paket klasörünüze sağ tıklayın, Yeni'ye tıklayın ve ardından Java Sınıfı'na tıklayın. NotificationSettings adlı yeni bir sınıf ekleyin.

    Android Studio - yeni Java sınıfı

    Aşağıdaki kodda NotificationSettings sınıfı için üç yer tutucuyu güncelleştirin:

    • SenderId: Google Cloud konsolundadaha önce edindiğiniz proje numarası.

    • HubListenConnectionString: Hub 'ınız için Defaultlistenaccesssignature bağlantı dizesi. [Azure portalında] hub’ınızın Ayarlar sayfasında bulunan Erişim İlkeleri’ne tıklayarak bağlantı dizesini kopyalayabilirsiniz.

    • HubName: [Azure Portal]hub sayfasında görünen Bildirim Hub 'ınızın adını kullanın.

      NotificationSettings kodu:

      public class NotificationSettings {
         public static String SenderId = "<Your project number>";
         public static String HubName = "<Your HubName>";
         public static String HubListenConnectionString = "<Your default listen connection string>";
      }
      
  2. MyInstanceIDService adlı başka bir yeni sınıf ekleyin. Bu sınıf, Örnek Kimliği dinleyici hizmeti uygulamasıdır.

    Bu sınıfın kodu, arka planda GCM belirtecini yenilemek için IntentService çağırır.

    import android.content.Intent;
    import android.util.Log;
    import com.google.android.gms.iid.InstanceIDListenerService;
    
    public class MyInstanceIDService extends InstanceIDListenerService {
    
        private static final String TAG = "MyInstanceIDService";
    
        @Override
        public void onTokenRefresh() {
    
            Log.i(TAG, "Refreshing GCM Registration Token");
    
            Intent intent = new Intent(this, RegistrationIntentService.class);
            startService(intent);
        }
    };
    
  3. Projenize adlı başka bir yeni sınıf ekleyin RegistrationIntentService . Bu sınıf, GCM belirtecini yenileme ve bildirim hub’ına kaydolma işlemlerini gerçekleştiren IntentService arabirimini uygular.

    Bu sınıf için aşağıdaki kod kullanın.

    import android.app.IntentService;
    import android.content.Intent;
    import android.content.SharedPreferences;
    import android.preference.PreferenceManager;
    import android.util.Log;
    
    import com.google.android.gms.gcm.GoogleCloudMessaging;
    import com.google.android.gms.iid.InstanceID;
    import com.microsoft.windowsazure.messaging.NotificationHub;
    
    public class RegistrationIntentService extends IntentService {
    
        private static final String TAG = "RegIntentService";
    
        private NotificationHub hub;
    
        public RegistrationIntentService() {
            super(TAG);
        }
    
        @Override
        protected void onHandleIntent(Intent intent) {
            SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
            String resultString = null;
            String regID = null;
    
            try {
                InstanceID instanceID = InstanceID.getInstance(this);
                String token = instanceID.getToken(NotificationSettings.SenderId,
                        GoogleCloudMessaging.INSTANCE_ID_SCOPE);
                Log.i(TAG, "Got GCM Registration Token: " + token);
    
                // Storing the registration id that indicates whether the generated token has been
                // sent to your server. If it is not stored, send the token to your server,
                // otherwise your server should have already received the token.
                if ((regID=sharedPreferences.getString("registrationID", null)) == null) {
                    NotificationHub hub = new NotificationHub(NotificationSettings.HubName,
                            NotificationSettings.HubListenConnectionString, this);
                    Log.i(TAG, "Attempting to register with NH using token : " + token);
    
                    regID = hub.register(token).getRegistrationId();
    
                    // If you want to use tags...
                    // Refer to : https://azure.microsoft.com/documentation/articles/notification-hubs-routing-tag-expressions/
                    // regID = hub.register(token, "tag1", "tag2").getRegistrationId();
    
                    resultString = "Registered Successfully - RegId : " + regID;
                    Log.i(TAG, resultString);
                    sharedPreferences.edit().putString("registrationID", regID ).apply();
                } else {
                    resultString = "Previously Registered Successfully - RegId : " + regID;
                }
            } catch (Exception e) {
                Log.e(TAG, resultString="Failed to complete token refresh", e);
                // If an exception happens while fetching the new token or updating the registration data
                // on a third-party server, this ensures that we'll attempt the update at a later time.
            }
    
            // Notify UI that registration has completed.
            if (MainActivity.isVisible) {
                MainActivity.mainActivity.ToastNotify(resultString);
            }
        }
    }
    
  4. MainActivity sınıfınızda, aşağıdaki import deyimlerini sınıfın başına ekleyin.

    import com.google.android.gms.common.ConnectionResult;
    import com.google.android.gms.common.GoogleApiAvailability;
    import com.google.android.gms.gcm.*;
    import com.microsoft.windowsazure.notifications.NotificationsManager;
    import android.util.Log;
    import android.widget.TextView;
    import android.widget.Toast;
    import android.content.Intent;
    
  5. Aşağıdaki özel üyeleri sınıfın en üst kısmına ekleyin. Bu kod, Google Play Hizmetleri’nin kullanılabilirliğini Google tarafından önerildiği şekilde denetler.

    public static MainActivity mainActivity;
    public static Boolean isVisible = false;
    private GoogleCloudMessaging gcm;
    private static final int PLAY_SERVICES_RESOLUTION_REQUEST = 9000;
    private static final String TAG = "MainActivity";
    
  6. MainActivity sınıfınızda Google Play Hizmetleri'nin kullanılabilirliğine aşağıdaki yöntemi ekleyin.

    /**
        * Check the device to make sure it has the Google Play Services APK. If
        * it doesn't, display a dialog that allows users to download the APK from
        * the Google Play Store or enable it in the device's system settings.
        */
    private boolean checkPlayServices() {
        GoogleApiAvailability apiAvailability = GoogleApiAvailability.getInstance();
        int resultCode = apiAvailability.isGooglePlayServicesAvailable(this);
        if (resultCode != ConnectionResult.SUCCESS) {
            if (apiAvailability.isUserResolvableError(resultCode)) {
                apiAvailability.getErrorDialog(this, resultCode, PLAY_SERVICES_RESOLUTION_REQUEST)
                        .show();
            } else {
                Log.i(TAG, "This device is not supported by Google Play Services.");
                ToastNotify("This device is not supported by Google Play Services.");
                finish();
            }
            return false;
        }
        return true;
    }
    
  7. MainActivity sınıfınızda, GCM kayıt belirtecinizi almak ve bildirim hub’ınıza kaydolmak için IntentService hizmetinizi çağırmadan önce Google Play Hizmetleri’ni denetleyen aşağıdaki kodu ekleyin.

    public void registerWithNotificationHubs()
    {
        Log.i(TAG, " Registering with Notification Hubs");
    
        if (checkPlayServices()) {
            // Start IntentService to register this application with GCM.
            Intent intent = new Intent(this, RegistrationIntentService.class);
            startService(intent);
        }
    }
    
  8. MainActivity sınıfının OnCreate yönteminde, etkinlik oluşturulduğunda kayıt işlemini başlatmak için aşağıdaki kodu ekleyin.

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    
        mainActivity = this;
        NotificationsManager.handleNotifications(this, NotificationSettings.SenderId, MyHandler.class);
        registerWithNotificationHubs();
    }
    
  9. Uygulama durumunu doğrulamak ve uygulamanızda durumu raporlamak için bu ek yöntemleri MainActivity öğesine ekleyin.

    @Override
    protected void onStart() {
        super.onStart();
        isVisible = true;
    }
    
    @Override
    protected void onPause() {
        super.onPause();
        isVisible = false;
    }
    
    @Override
    protected void onResume() {
        super.onResume();
        isVisible = true;
    }
    
    @Override
    protected void onStop() {
        super.onStop();
        isVisible = false;
    }
    
    public void ToastNotify(final String notificationMessage) {
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                Toast.makeText(MainActivity.this, notificationMessage, Toast.LENGTH_LONG).show();
                TextView helloText = (TextView) findViewById(R.id.text_hello);
                helloText.setText(notificationMessage);
            }
        });
    }
    
  10. ToastNotify yöntemi, uygulamada kalıcı olarak durumu ve bildirimleri raporlamak için "Hello World" TextView denetimini kullanır. activity_main.xml düzeninizde bu denetim için aşağıdaki kimliği ekleyin.

    android:id="@+id/text_hello"
    
  11. AndroidManifest.xml’de tanımlanan alıcı için bir alt sınıf ekleyin. MyHandler adlı projenize başka bir yeni sınıf ekleyin.

  12. MyHandler.java'in üst kısmına şu içeri aktarma deyimlerini ekleyin:

    import android.app.NotificationManager;
    import android.app.PendingIntent;
    import android.content.Context;
    import android.content.Intent;
    import android.os.Bundle;
    import android.support.v4.app.NotificationCompat;
    import com.microsoft.windowsazure.notifications.NotificationsHandler;
    import android.net.Uri;
    import android.media.RingtoneManager;
    
  13. Sınıfı için aşağıdaki kodu ekleyin MyHandler , bunun bir alt sınıfı haline gelir com.microsoft.windowsazure.notifications.NotificationsHandler .

    Bu kod, OnReceive yöntemini geçersiz kılar; böylece işleyici alınan bildirimleri raporlar. İşleyici, sendNotification() yöntemini kullanarak Android bildirim yöneticisine anında iletme bildirimi gönderir. sendNotification() yöntemi, uygulama çalışmıyorken ve bir bildirim alındığında yürütülmelidir.

    public class MyHandler extends NotificationsHandler {
        public static final int NOTIFICATION_ID = 1;
        private NotificationManager mNotificationManager;
        NotificationCompat.Builder builder;
        Context ctx;
    
        @Override
        public void onReceive(Context context, Bundle bundle) {
            ctx = context;
            String nhMessage = bundle.getString("message");
            sendNotification(nhMessage);
            if (MainActivity.isVisible) {
                MainActivity.mainActivity.ToastNotify(nhMessage);
            }
        }
    
        private void sendNotification(String msg) {
    
            Intent intent = new Intent(ctx, MainActivity.class);
            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    
            mNotificationManager = (NotificationManager)
                    ctx.getSystemService(Context.NOTIFICATION_SERVICE);
    
            PendingIntent contentIntent = PendingIntent.getActivity(ctx, 0,
                    intent, PendingIntent.FLAG_ONE_SHOT);
    
            Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
            NotificationCompat.Builder mBuilder =
                    new NotificationCompat.Builder(ctx)
                            .setSmallIcon(R.mipmap.ic_launcher)
                            .setContentTitle("Notification Hub Demo")
                            .setStyle(new NotificationCompat.BigTextStyle()
                                    .bigText(msg))
                            .setSound(defaultSoundUri)
                            .setContentText(msg);
    
            mBuilder.setContentIntent(contentIntent);
            mNotificationManager.notify(NOTIFICATION_ID, mBuilder.build());
        }
    }
    
  14. Kodunuzda bir hata olmadığından emin olmak için, menü çubuğunda Android Studio oluştur projeyi derle ' ye tıklayın.

Uygulamanızı test etme

Mobil uygulamayı çalıştırma

  1. Uygulamayı çalıştırın ve kayıt kimliğinin başarılı bir kaydı bildirdiğine dikkat edin.

    Android'de test etme - Kanal kaydı

  2. Hub'da kayıtlı tüm Android cihazlara gönderilecek bir bildirim iletisi girin.

    Andorid'de test etme - bir ileti gönderme

  3. Bildirim Gönder'e basın. Uygulamayı çalıştıran tüm cihazlarda, anında iletme bildirimi iletisiyle birlikte bir AlertDialog örneği görünür. Uygulamayı çalıştırmayan ancak anında iletme bildirimleri için daha önce kaydolan cihazlar, Android Bildirim Yöneticisi'nde bir bildirim alır. Bildirim iletileri, sol üst köşeden aşağı çekilerek görüntülenebilir.

    Android'de test etme - bildirimler

Azure portalından anında iletme bildirimleri göndermeyi test etme

[Azure portalında] anında iletme bildirimleri göndererek uygulamanızda anında iletme bildirimi alma testi gerçekleştirebilirsiniz.

  1. Sorun Giderme bölümünde Test Gönderimi’ni seçin.

  2. Platformlar için Android’i seçin.

  3. Gönder’i seçerek test bildirimini gönderin.

  4. Android cihazında bildirim iletisini gördüğünüzü onaylayın.

    Azure Notification Hubs - Test Gönderimi

Anında iletme bildirimleri normal olarak, uyumlu bir kitaplık kullanılarak Mobile Apps veya ASP.NET gibi bir arka uç hizmetine gönderilir. Arka uçta bir kitaplık yoksa, bildirim iletilerini göndermek için doğrudan REST API de kullanabilirsiniz.

Bildirim göndermek için gözden geçirmek isteyebileceğiniz diğer bazı öğreticilerin listesi aşağıda verilmiştir:

Öykünücüde anında iletme bildirimleri

Anında iletme bildirimlerini bir öykünücüde test etmek isterseniz öykünücü görüntünüzün, uygulamanız için seçtiğiniz Google API düzeyini desteklediğinden emin olun. Görüntünüz yerel Google API'lerini desteklemiyorsa HİZMET__KULLANILAMIYOR özel durumuyla karşılaşırsınız.

Ayrıca, Google hesabınızı, Ayarlar hesaplar bölümünde çalışan öykünücüsünüzün eklendiğinden emin olun > . Aksi halde, GCM ile kayıt girişimleriniz KİMLİK DOĞRULAMASI_BAŞARISIZ özel durumuyla sonuçlanabilir.

(İsteğe bağlı) Doğrudan uygulamadan anında iletme bildirimleri gönderme

Normalde bildirimleri bir arka uç sunucusu kullanarak gönderirsiniz. Bazı durumlarda, anında iletme bildirimlerini doğrudan istemci uygulamasından gönderebilmek isteyebilirsiniz. Bu bölüm, Azure Notification Hubs REST API'si kullanarak istemciden nasıl bildirim gönderildiğini açıklamaktadır.

  1. Android Studio projesi görünümünde, uygulama > src > ana > res > düzeni' ni genişletin. activity_main.xml düzen dosyasını açın ve dosyanın metin içeriğini güncelleştirmek için Metin sekmesine tıklayın. Bildirim hub'ına anında iletme bildirimi iletileri göndermek için yeni Button ve EditText denetimlerini ekleyen aşağıdaki kod ile güncelleştirin. Bu kodu en alta, </RelativeLayout> öğesinin hemen önüne ekleyin.

    <Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/send_button"
    android:id="@+id/sendbutton"
    android:layout_centerVertical="true"
    android:layout_centerHorizontal="true"
    android:onClick="sendNotificationButtonOnClick" />
    
    <EditText
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/editTextNotificationMessage"
    android:layout_above="@+id/sendbutton"
    android:layout_centerHorizontal="true"
    android:layout_marginBottom="42dp"
    android:hint="@string/notification_message_hint" />
    
  2. Android Studio projesi görünümünde, uygulama > src > ana > res > değerleri' ni genişletin. strings.xml dosyasını açın ve yeni Button ve EditText denetimleri tarafından başvurulan dize değerlerini ekleyin. Aşağıdaki satırları dosyanın en altına, </resources> öğesinin hemen önüne ekleyin.

    <string name="send_button">Send Notification</string>
    <string name="notification_message_hint">Enter notification message text</string>
    
  3. NotificationSetting.java dosyanızda NotificationSettings sınıfına aşağıdaki ayarı ekleyin.

    HubFullAccess öğesini, DefaultFullSharedAccessSignature bağlantı dizesiyle hub'ınız için güncelleştirin. Bu bağlantı dizesi, bildirim hub’ınızın Ayarlar sayfasında Erişim İlkeleri’ne tıklanarak [Azure portalında] kopyalanabilir.

    public static String HubFullAccess = "<Enter Your DefaultFullSharedAccess Connection string>";
    
  4. MainActivity.java dosyanızda, aşağıdaki import deyimlerini dosyanın başına ekleyin.

    import java.io.BufferedOutputStream;
    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    import java.io.OutputStream;
    import java.net.HttpURLConnection;
    import java.net.URL;
    import java.net.URLEncoder;
    import javax.crypto.Mac;
    import javax.crypto.spec.SecretKeySpec;
    import android.util.Base64;
    import android.view.View;
    import android.widget.EditText;
    
  5. MainActivity.java dosyanızda aşağıdaki üyeleri MainActivity sınıfının üstüne ekleyin.

    private String HubEndpoint = null;
    private String HubSasKeyName = null;
    private String HubSasKeyValue = null;
    
  6. Bildirim Hub 'ınıza ileti göndermek için bir POST isteğinin kimliğini doğrulamak üzere bir paylaşılan erişim Imzası (SaS) belirteci oluşturun. Anahtar verilerini bağlantı dizesinden ayrıştırıp ardından Ortak Kavramlar REST API’si başvurusunda belirtildiği gibi SaS belirtecini oluşturun. Aşağıdaki kod örnek bir uygulamadır.

    Bağlantı dizenizi ayrıştırmak için MainActivity.java öğesinde aşağıdaki yöntemi MainActivity sınıfına ekleyin.

    /**
        * Example code from https://msdn.microsoft.com/library/azure/dn495627.aspx
        * to parse the connection string so a SaS authentication token can be
        * constructed.
        *
        * @param connectionString This must be the DefaultFullSharedAccess connection
        *                         string for this example.
        */
    private void ParseConnectionString(String connectionString)
    {
        String[] parts = connectionString.split(";");
        if (parts.length != 3)
            throw new RuntimeException("Error parsing connection string: "
                    + connectionString);
    
        for (int i = 0; i < parts.length; i++) {
            if (parts[i].startsWith("Endpoint")) {
                this.HubEndpoint = "https" + parts[i].substring(11);
            } else if (parts[i].startsWith("SharedAccessKeyName")) {
                this.HubSasKeyName = parts[i].substring(20);
            } else if (parts[i].startsWith("SharedAccessKey")) {
                this.HubSasKeyValue = parts[i].substring(16);
            }
        }
    }
    
  7. Bir SaS kimlik doğrulaması belirteci oluşturmak için MainActivity.java öğesinde aşağıdaki yöntemi MainActivity sınıfına ekleyin.

    /**
        * Example code from https://msdn.microsoft.com/library/azure/dn495627.aspx to
        * construct a SaS token from the access key to authenticate a request.
        *
        * @param uri The unencoded resource URI string for this operation. The resource
        *            URI is the full URI of the Service Bus resource to which access is
        *            claimed. For example,
        *            "http://<namespace>.servicebus.windows.net/<hubName>"
        */
    private String generateSasToken(String uri) {
    
        String targetUri;
        String token = null;
        try {
            targetUri = URLEncoder
                    .encode(uri.toString().toLowerCase(), "UTF-8")
                    .toLowerCase();
    
            long expiresOnDate = System.currentTimeMillis();
            int expiresInMins = 60; // 1 hour
            expiresOnDate += expiresInMins * 60 * 1000;
            long expires = expiresOnDate / 1000;
            String toSign = targetUri + "\n" + expires;
    
            // Get an hmac_sha1 key from the raw key bytes
            byte[] keyBytes = HubSasKeyValue.getBytes("UTF-8");
            SecretKeySpec signingKey = new SecretKeySpec(keyBytes, "HmacSHA256");
    
            // Get an hmac_sha1 Mac instance and initialize with the signing key
            Mac mac = Mac.getInstance("HmacSHA256");
            mac.init(signingKey);
    
            // Compute the hmac on input data bytes
            byte[] rawHmac = mac.doFinal(toSign.getBytes("UTF-8"));
    
            // Using android.util.Base64 for Android Studio instead of
            // Apache commons codec
            String signature = URLEncoder.encode(
                    Base64.encodeToString(rawHmac, Base64.NO_WRAP).toString(), "UTF-8");
    
            // Construct authorization string
            token = "SharedAccessSignature sr=" + targetUri + "&sig="
                    + signature + "&se=" + expires + "&skn=" + HubSasKeyName;
        } catch (Exception e) {
            if (isVisible) {
                ToastNotify("Exception Generating SaS : " + e.getMessage().toString());
            }
        }
    
        return token;
    }
    
  8. Bildirim Gönder düğmesine tıklanmasını ele almak ve yerleşik REST API'sini kullanarak hub'a anında iletme bildirimi iletisi göndermek için MainActivity.java öğesinde MainActivity sınıfına aşağıdaki yöntemi ekleyin.

    /**
        * Send Notification button click handler. This method parses the
        * DefaultFullSharedAccess connection string and generates a SaS token. The
        * token is added to the Authorization header on the POST request to the
        * notification hub. The text in the editTextNotificationMessage control
        * is added as the JSON body for the request to add a GCM message to the hub.
        *
        * @param v
        */
    public void sendNotificationButtonOnClick(View v) {
        EditText notificationText = (EditText) findViewById(R.id.editTextNotificationMessage);
        final String json = "{\"data\":{\"message\":\"" + notificationText.getText().toString() + "\"}}";
    
        new Thread()
        {
            public void run()
            {
                try
                {
                    // Based on reference documentation...
                    // https://msdn.microsoft.com/library/azure/dn223273.aspx
                    ParseConnectionString(NotificationSettings.HubFullAccess);
                    URL url = new URL(HubEndpoint + NotificationSettings.HubName +
                            "/messages/?api-version=2015-01");
    
                    HttpURLConnection urlConnection = (HttpURLConnection)url.openConnection();
    
                    try {
                        // POST request
                        urlConnection.setDoOutput(true);
    
                        // Authenticate the POST request with the SaS token
                        urlConnection.setRequestProperty("Authorization",
                            generateSasToken(url.toString()));
    
                        // Notification format should be GCM
                        urlConnection.setRequestProperty("ServiceBusNotification-Format", "gcm");
    
                        // Include any tags
                        // Example below targets 3 specific tags
                        // Refer to : https://azure.microsoft.com/documentation/articles/notification-hubs-routing-tag-expressions/
                        // urlConnection.setRequestProperty("ServiceBusNotification-Tags",
                        //        "tag1 || tag2 || tag3");
    
                        // Send notification message
                        urlConnection.setFixedLengthStreamingMode(json.length());
                        OutputStream bodyStream = new BufferedOutputStream(urlConnection.getOutputStream());
                        bodyStream.write(json.getBytes());
                        bodyStream.close();
    
                        // Get response
                        urlConnection.connect();
                        int responseCode = urlConnection.getResponseCode();
                        if ((responseCode != 200) && (responseCode != 201)) {
                            BufferedReader br = new BufferedReader(new InputStreamReader((urlConnection.getErrorStream())));
                            String line;
                            StringBuilder builder = new StringBuilder("Send Notification returned " +
                                    responseCode + " : ")  ;
                            while ((line = br.readLine()) != null) {
                                builder.append(line);
                            }
    
                            ToastNotify(builder.toString());
                        }
                    } finally {
                        urlConnection.disconnect();
                    }
                }
                catch(Exception e)
                {
                    if (isVisible) {
                        ToastNotify("Exception Sending Notification : " + e.getMessage().toString());
                    }
                }
            }
        }.start();
    }
    

Sonraki adımlar

Bu öğreticide, arka uca kayıtlı olan tüm Android cihazlarınıza yayın bildirimleri gönderdiniz. Belirli Android cihazlara nasıl anında iletme bildirimleri gönderileceğini öğrenmek için aşağıdaki öğreticiye ilerleyin: