البرنامج التعليمي: إرسال الإعلامات المؤقتة إلى أجهزة الروبوت باستخدام الإصدار 0.6 لـ Firebase SDK

يوضح لك هذا البرنامج التعليمي كيفية استخدام Azure Notification Hubs والإصدار 0.6 من Firebase Cloud Messaging (FCM) SDK لإرسال الإعلامات المؤقتة إلى تطبيق Android. في هذا البرنامج التعليمي، تقوم بإنشاء تطبيق Android فارغ يتلقى الإعلامات الفورية باستخدام Firebase Cloud Messaging (FCM).

هام

ستتوقف Google عن دعم FCM القديم HTTP في 20 يونيو 2024. لمزيد من المعلومات، راجع Azure Notification Hubs وترحيل Google Firebase Cloud Messaging.

يمكن تحميل الرمز الذي تم الانتهاء منه لهذا البرنامج التعليمي من GitHub.

في هذا البرنامج التعليمي، نُفذت الخطوات التالية:

  • أنشئ مشروع Android Studio.
  • أنشئ مشروع Firebase يدعم Firebase Cloud Messaging.
  • أنشئ مركزًا.
  • قم بتوصيل تطبيقك بمركز الإعلامات.
  • قم باختبار التطبيق.

المتطلبات الأساسية

لكي يتم إكمال هذا البرنامج التعليمي، يجب أن يكون لديك حساب Azure نشط. إذا لم يكن لديك حساب، يمكنك إنشاء حساب تجريبي مجاني في غضون دقيقتين فقط. لمزيد من التفاصيل، راجع Azure Free Trial.

ستحتاج أيضاً إلى العناصر التالية:

  • أحدث نسخة من Android Studio
  • إصدار Android 2.3 أو إصدار أحدث لـ Firebase Cloud Messaging
  • إصدار Google Repository المراجعة 27 أو إصدار أحدث من Firebase Cloud Messaging
  • إصدار Google Play Services 9.0.2 أو إصدار أحدث من Firebase Cloud Messaging

يعد إكمال هذا البرنامج التعليمي شرطاً أساسياً لعمل جميع البرامج التعليمية الأخرى لـ Notification Hubs لتطبيقات Android.

إنشاء مشروع Android Studio

  1. قم بتشغيل Android Studio.
  2. حدد File، ثم توجه إلى New، ثم حدد New Project.
  3. في صفحة Choose your project، حدد Empty Activity، ثم حدد Next.
  4. في صفحة Configure your project ، اتبع الخطوات التالية:
    1. أدخِل اسماً للتطبيق.

    2. قم بتحديد موقع لحفظ ملفات المشروع فيه.

    3. حدد إنهاء.

      Configure your project)

قم بإنشاء مشروع Firebase يدعم FCM

  1. تسجيل الدخول إلىوحدة تحكم Firebase. إنشاء مشروع Firebase جديد إذا لم يكن لديك بالفعل واحد.

  2. بعد إنشاء المشروع حدد إضافة Firebase إلى تطبيق Android.

    Add Firebase to your Android app

  3. في صفحة إضافة مشروع Firebase إلى تطبيق Android،اتخذ الخطوات التالية:

    1. للحصول على اسم حزمة الروبوت، نسخ قيمة التطبيق الخاص بك في ملف build.gradle التطبيق الخاص بك. في هذا المثال، هو com.fabrikam.fcmtutorial1app.

      Specify the package name

    2. حدد "Register app".

  4. حدد تنزيل google-services.json⁦، ثم احفظ الملف في مجلد التطبيق الخاص بالمشروع، ثم حدد التالي.

    Download google-services.json

  5. قم بإجراء تغييرات التكوين التالية على مشروعك في Android Studio.

    1. في ملف build.gradle مستوى المشروع < (مشروع > /build.gradle)، إضافة العبارة التالية إلى قسم التبعيات.

      classpath 'com.google.gms:google-services:4.0.1'
      
    2. في ملف build.gradle على مستوى التطبيق (<مشروع> /< app-module> /build.gradle)، أضف العبارات التالية إلى قسم التبعيات.

      implementation 'com.google.firebase:firebase-core:16.0.8'
      implementation 'com.google.firebase:firebase-messaging:17.3.4'
      
    3. إضافة السطر التالي إلى نهاية الملف build.gradle مستوى التطبيق بعد قسم التبعيات.

      apply plugin: 'com.google.gms.google-services'
      
    4. حدد أيقونة المزامنة الآن في شريط الأدوات.

      build.gradle configuration changes

  6. حدد التالي.

  7. حدد تخطي هذه الخطوة.

    Skip the last step

  8. في وحدة تحكم Firebase حدد ترس للمشروع الخاص بك. ثم حدد إعدادات المشروع.

    Select Project Settings

  9. إذا لم تكن قد قمت بتنزيل الملف google-services.json إلى مجلد التطبيق لمشروع Android Studio، يمكنك القيام بذلك على هذه الصفحة.

  10. انتقل إلى علامة التبويب Cloud Messaging في الأعلى.

  11. انسخكلمة مرور الخادم واحفظه للاستخدام لاحقًا. يمكنك استخدام هذه القيمة لتكوين لوحة الوصل الخاصة بك.

  12. إذا لم تشاهد مفتاح Server في علامة التبويب firebase Cloud Messaging، فاتبع هذه الخطوات الإضافية.

    1. انقر فوق قائمة النقاط الثلاث لعنوان "Cloud Messaging API (Legacy) 🚫 Disabled"
    2. اتبع الارتباط المعروض إلى "إدارة واجهة برمجة التطبيقات في Google Cloud Console".
    3. في وحدة تحكم google السحابية، اضغط على الزر لتمكين واجهة برمجة تطبيقات googlecloudmessaging.
    4. انتظر بضع دقائق
    5. ارجع إلى علامة التبويب Cloud Messaging لمشروع وحدة تحكم firebase، وقم بتحديث الصفحة.
    6. راجع تغيير عنوان واجهة برمجة تطبيقات المراسلة السحابية إلى "تمكين واجهة برمجة تطبيقات المراسلة السحابية (القديمة) ✅ " ويعرض الآن مفتاح الخادم.

    Screenshot showing the Enable Cloud Messaging API (Legacy) tab.

تكوين مركز

  1. قم بتسجيل الدخول إلى بوابة Azure.

  2. حدد كل الخدمات في القائمة اليسرى. A screenshot showing select All Services for an existing namespace.

  3. اكتب Notification Hubs في مربع النص Filter services . حدد رمز النجمة بجوار اسم الخدمة لإضافة الخدمة إلى قسم FAVORITES في القائمة اليمنى. حدد مراكز الإعلامات.

    A screenshot showing how to filter for notification hubs.

  4. في صفحة مراكز الإعلام حدد إنشاء على شريط الأدوات.

    A screenshot showing how to create a new notification hub.

  5. في علامة التبويب أساسيات في صفحة مركز الإعلام، بادر باتخاذ الخطوات التالية:

    1. في الاشتراك، حدد اسم اشتراك Azure الذي تريد استخدامه، ثم حدد مجموعة موارد موجودة، أو أنشئ واحداً جديداً.

    2. أدخل اسماً فريداً لمساحة الاسم الجديدة في تفاصيل مساحة الاسم.

    3. تحتوي مساحة الاسم على مركز إعلام واحد أو أكثر، لذا اكتب اسم المركز في تفاصيل مركز الإعلام.

    4. حدد قيمة من القائمة المنسدلة الموقع. تحدد هذه القيمة الموقع الذي تريد إنشاء المحور فيه.

      Screenshot showing notification hub details.

    5. راجع خيار مناطق التوفر. إذا اخترت منطقة تحتوي على مناطق توفر، يتم تحديد خانة الاختيار بشكل افتراضي. مناطق التوفر هي ميزة مدفوعة، لذلك تتم إضافة رسوم إضافية إلى المستوى الخاص بك.

    6. اختر خيار التعافي من الكوارث: لا شيء أو منطقة استرداد مقترنة أو منطقة استرداد مرنة. إذا اخترت منطقة الاسترداد المقترنة، يتم عرض منطقة تجاوز الفشل. إذا حددت منطقة استرداد مرنة، فاستخدم القائمة المنسدلة للاختيار من قائمة مناطق الاسترداد.

      Screenshot showing availability zone details.

    7. حدد إنشاء.

  6. عند اكتمال النشر، حدد Go to resource.

تكوين إعدادات المراسلة السحابية لـFirebase للمركز

  1. في الجزء الأيسر، ضمن Settings، حدد Networking.

  2. أدخِل مفتاح الخادم لمشروع FCM الذي قمت بحفظه سابقاً.

  3. في شريط الأدوات، قم بتحديد Save.

    Azure Notification Hub - Google (FCM)

  4. يعرض مدخل Microsoft Azure رسالة في التنبيهات بأن المركز قد تم تحديثه بنجاح. تم تعطيل زر Save.

تم الآن تكوين المركز الخاص بك للعمل مع Firebase Cloud Messaging. لديك أيضاً سلاسل الاتصال الضرورية لإرسال إعلامات إلى الجهاز وتسجيل التطبيق لتلقي الإعلامات.

توصيل تطبيقك بمركز الإشعارات

إضافة خدمات Google Play إلى المشروع

  1. في Android Studio، حدد أدوات في القائمة، ثم حدد إدارة SDK.

  2. حدد الإصدار المستهدف من Android SDK الذي تم استخدامه في المشروع. ثم حدد Show Package Details.

    Android SDK Manager - select target version

  3. حدد Google APIs، إذا لم تكن مثبتة بالفعل.

    Android SDK Manager - Google APIs selected

  4. التبديل إلى SDK Tools إذا لم تكن قد قمت بتثبيت خدمات Google Play مسبقاً، فحدد Google Play Services كما هو موضح في الصورة التالية. ثم حدد Apply للتثبيت. لاحظ مسار SDK، للاستخدام في خطوة لاحقة.

    Android SDK Manager - Google Play Services selected

  5. إذا رأيت مربع الحوار Confirm Change فحدد OK. يقوم مثبت المكونات بتثبيت المكونات المطلوبة. حدد Finish بعد تثبيت المكونات.

  6. حدد OK لإغلاق مربع الحوار الإعدادات للمشاريع الجديدة.

  7. افتح الملف AndroidManifest.xml، ثم أضف العلامة التالية إلى علامة التطبيق.

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

قم بإضافة مكتبات Azure Notification Hubs

  1. في ملف Build.Gradle للتطبيق، قم بإضافة الأسطر التالية في قسم التبعيات.

    implementation 'com.microsoft.azure:notification-hubs-android-sdk:0.6@aar'
    
  2. إضافة المستودع التالي بعد قسم التبعيات.

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

أضف دعم Google Firebase

  1. في ملف Build.Gradle للتطبيق، قم بإضافة الأسطر التالية في قسم التبعيات إذا لم تكن موجودة بالفعل.

    implementation 'com.google.firebase:firebase-core:16.0.8'
    implementation 'com.google.firebase:firebase-messaging:17.3.4'
    implementation 'com.google.firebase:firebase-iid:21.1.0'
    
  2. أضف المكون الإضافي التالي في نهاية الملف إذا لم يكن موجوداً بالفعل.

    apply plugin: 'com.google.gms.google-services'
    
  3. حدد أيقونة Sync Now في شريط الأدوات.

قم بتحديث ملف AndroidManifest.xml

  1. بعد أن تتلقى الرمز المميز للتسجيل في FCM، يمكنك استخدامه لكي تسجيل في Azure Notification Hubs. تقوم بدعم هذا التسجيل في الخلفية باستخدام IntentService يسمى RegistrationIntentService. هذه الخدمة مسؤولة أيضاً عن تحديث الرمز المميز لتسجيل FCM. يمكنك أيضاً إنشاء فئة تسمى FirebaseService كفئة فرعية لـ FirebaseMessagingService وتتجاوز طريقة onMessageReceived لاستلام الإعلامات والتعامل معها.

    إضافة تعريف الخدمة التالية إلى ملف AndroidManifest.xml داخل <application> العلامة.

    <service
        android:name=".RegistrationIntentService"
        android:exported="false">
    </service>
    <service
        android:name=".FirebaseService"
        android:exported="false">
        <intent-filter>
            <action android:name="com.google.firebase.MESSAGING_EVENT" />
        </intent-filter>
    </service>
    
  2. إضافة الأذونات المرتبطة بـ FCM الضرورية التالية أسفل </application> العلامة.

    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.GET_ACCOUNTS"/>
    <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
    

إضافة تعليمة برمجية

  1. في Project View، قم بتوسيع app>src>main>java. اضغط بزر الماوس الأيمن فوق مجلد الحزمة أسفل جافا، ومن ثم انقر فوق جديد، ثم حدد Java Class. أدخلNotificationSettings للاسم، ثم حدد "Ok".

    تأكد من تحديث هذين العنصرين النائبين في التعليمة البرمجية التالية NotificationSettingsللفصل الدراسي:

    • HubListenConnectionString: سلسلة الاتصال DefaultListenAccessSignature لمركز الإعلامات الخاص بك. يمكنك نسخ سلسلة الاتصال تلك بالنقر فوق Access Policies في مركز إعلاماتك في مدخل Microsoft Azure.

    • HubName:استخدم اسم مركز الإعلامات الذي يظهر في صفحة لوحة المركز في مدخل Microsoft Azure.

      NotificationSettingsالتعليمة البرمجية:

      public class NotificationSettings {
          public static String HubName = "<Your HubName>";
          public static String HubListenConnectionString = "<Enter your DefaultListenSharedAccessSignature connection string>";
      }
      

      هام

      أدخل Name وDefaultListenSharedAccessSignature للمركز الخاص بك قبل المتابعة.

  2. قم بإضافة فئة جديدة أخرى إلى مشروعك، تسمى RegistrationIntentService. هذه الفئة تقوم بتطبيق الواجهة IntentService. كما أنها تتعامل مع تحديث الرمز المميز لـ FCM و التسجيل في مركز الإعلامات.

    استخدم الرمز التالي لهذه الفئة.

    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.tasks.OnSuccessListener;
    import com.google.firebase.iid.FirebaseInstanceId;
    import com.google.firebase.iid.InstanceIdResult;
    import com.microsoft.windowsazure.messaging.NotificationHub;
    import java.util.concurrent.TimeUnit;
    
    public class RegistrationIntentService extends IntentService {
    
        private static final String TAG = "RegIntentService";
        String FCM_token = null;
    
        private NotificationHub hub;
    
        public RegistrationIntentService() {
            super(TAG);
        }
    
        @Override
        protected void onHandleIntent(Intent intent) {
    
            SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
            String resultString = null;
            String regID = null;
            String storedToken = null;
    
            try {
                FirebaseInstanceId.getInstance().getInstanceId().addOnSuccessListener(new OnSuccessListener<InstanceIdResult>() { 
                    @Override 
                    public void onSuccess(InstanceIdResult instanceIdResult) { 
                        FCM_token = instanceIdResult.getToken(); 
                        Log.d(TAG, "FCM Registration Token: " + FCM_token); 
                    } 
                }); 
                TimeUnit.SECONDS.sleep(1);
    
                // 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.d(TAG, "Attempting a new registration with NH using FCM token : " + FCM_token);
                    regID = hub.register(FCM_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 = "New NH Registration Successfully - RegId : " + regID;
                    Log.d(TAG, resultString);
    
                    sharedPreferences.edit().putString("registrationID", regID ).apply();
                    sharedPreferences.edit().putString("FCMtoken", FCM_token ).apply();
                }
    
                // Check to see if the token has been compromised and needs refreshing.
               else if (!(storedToken = sharedPreferences.getString("FCMtoken", "")).equals(FCM_token)) {
    
                    NotificationHub hub = new NotificationHub(NotificationSettings.HubName,
                            NotificationSettings.HubListenConnectionString, this);
                    Log.d(TAG, "NH Registration refreshing with token : " + FCM_token);
                    regID = hub.register(FCM_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 = "New NH Registration Successfully - RegId : " + regID;
                    Log.d(TAG, resultString);
    
                    sharedPreferences.edit().putString("registrationID", regID ).apply();
                    sharedPreferences.edit().putString("FCMtoken", FCM_token ).apply();
                }
    
                else {
                    resultString = "Previously Registered Successfully - RegId : " + regID;
                }
            } catch (Exception e) {
                Log.e(TAG, resultString="Failed to complete registration", e);
                // If an exception happens while fetching the new token or updating 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);
            }
        }
    }
    
  3. في الفئة MainActivity، قم بإضافة عبارات import التالية أعلى إعلان الفئة.

    import com.google.android.gms.common.ConnectionResult;
    import com.google.android.gms.common.GoogleApiAvailability;
    import android.content.Intent;
    import android.util.Log;
    import android.widget.TextView;
    import android.widget.Toast;
    
  4. أضف الأعضاء التالين في أعلى الفئة. يمكنك استخدام هذه الحقول في التحقق من توفر خدمات Google Play كما توصي شركة جوجل.

    public static MainActivity mainActivity;
    public static Boolean isVisible = false;
    private static final String TAG = "MainActivity";
    private static final int PLAY_SERVICES_RESOLUTION_REQUEST = 9000;
    
  5. في الفئة MainActivity، قم بإضافة الطريقة التالية للتحقق من توافر خدمات Google Play.

    /**
    * Check the device to make sure it has the Google Play Services APK. If
    * it doesn't, display a dialog box that enables  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;
    }
    
  6. في MainActivity الفئة، قم بإضافة التعليمة البرمجية التالية التي تتحقق من خدمات Google Play قبل الاتصال IntentService للحصول على رمز تسجيل FCM والتسجيل مع مركز الإعلامات:

    public void registerWithNotificationHubs()
    {
        if (checkPlayServices()) {
            // Start IntentService to register this application with FCM.
            Intent intent = new Intent(this, RegistrationIntentService.class);
            startService(intent);
        }
    }
    
  7. في أسلوب OnCreate بالفئة MainActivity الفئة، قم بإضافة التعليمة البرمجية التالية لبدء عملية التسجيل عند انتهاء إنشاء النشاط:

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    
        mainActivity = this;
        registerWithNotificationHubs();
        FirebaseService.createChannelAndHandleNotifications(getApplicationContext());
    }
    
  8. للتحقق من حالة التطبيق وحالة التقرير في تطبيقك، قم بإضافة هذه الأساليب الإضافية إلى MainActivity:

    @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);
            }
        });
    }
    
  9. الطريقة ToastNotify تستخدم عنصر التحكم "مرحبًا بالعالم"TextView للإبلاغ عن الحالة والإعلامات باستمرار في التطبيق. في تخطيط res>layout>activity_main.xml أضف المعرف التالي لعنصر التحكم هذا.

    android:id="@+id/text_hello"
    

    Screenshot that shows the android:id=

  10. بعد ذلك قم بإضافة فئة فرعية لجهاز الاستقبال المحدد في AndroidManifest.xml. قم بإضافة فئة جديدة أخرى إلى مشروعك، تسمى FirebaseService.

  11. قم بإضافة عبارات الإدخال التالية أعلى كل من FirebaseService.java :

    import com.google.firebase.messaging.FirebaseMessagingService;
    import com.google.firebase.messaging.RemoteMessage;
    import android.util.Log;
    import android.app.NotificationChannel;
    import android.app.NotificationManager;
    import android.app.PendingIntent;
    import android.content.Context;
    import android.content.Intent;
    import android.media.RingtoneManager;
    import android.net.Uri;
    import android.os.Build;
    import android.os.Bundle;
    import androidx.core.app.NotificationCompat;
    
  12. قم بإضافة التعليمة البرمجية التالية FirebaseService للفئة، مما يجعلها فئة فرعية من FirebaseMessagingService.

    تتجاوز هذه التعليمة البرمجية الأسلوب onMessageReceived وتقوم بإبلاغ الإعلامات التي يتم استلامها. تقوم أيضا بإرسال عرض الإعلامات إلى مدير إعلامات Android باستخدام الطريقة sendNotification(). قم باستدعاء الأسلوب sendNotification() عندما لا يكون التطبيق قيد التشغيل ويتم تلقي إعلام.

    public class FirebaseService extends FirebaseMessagingService
    {
        private String TAG = "FirebaseService";
    
        public static final String NOTIFICATION_CHANNEL_ID = "nh-demo-channel-id";
        public static final String NOTIFICATION_CHANNEL_NAME = "Notification Hubs Demo Channel";
        public static final String NOTIFICATION_CHANNEL_DESCRIPTION = "Notification Hubs Demo Channel";
    
        public static final int NOTIFICATION_ID = 1;
        private NotificationManager mNotificationManager;
        NotificationCompat.Builder builder;
        static Context ctx;
    
        @Override
        public void onMessageReceived(RemoteMessage remoteMessage) {
            // ...
    
            // TODO(developer): Handle FCM messages here.
            // Not getting messages here? See why this may be: https://goo.gl/39bRNJ
            Log.d(TAG, "From: " + remoteMessage.getFrom());
    
            String nhMessage;
            // Check if message contains a notification payload.
            if (remoteMessage.getNotification() != null) {
                Log.d(TAG, "Message Notification Body: " + remoteMessage.getNotification().getBody());
    
                nhMessage = remoteMessage.getNotification().getBody();
            }
            else {
                nhMessage = remoteMessage.getData().values().iterator().next();
            }
    
            // Also if you intend on generating your own notifications as a result of a received FCM
            // message, here is where that should be initiated. See sendNotification method below.
            if (MainActivity.isVisible) {
                MainActivity.mainActivity.ToastNotify(nhMessage);
            }
            sendNotification(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 notificationBuilder = new NotificationCompat.Builder(
                    ctx,
                    NOTIFICATION_CHANNEL_ID)
                    .setContentText(msg)
                    .setPriority(NotificationCompat.PRIORITY_HIGH)
                    .setSmallIcon(android.R.drawable.ic_popup_reminder)
                    .setBadgeIconType(NotificationCompat.BADGE_ICON_SMALL);
    
            notificationBuilder.setContentIntent(contentIntent);
            mNotificationManager.notify(NOTIFICATION_ID, notificationBuilder.build());
        }
    
        public static void createChannelAndHandleNotifications(Context context) {
            ctx = context;
    
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                NotificationChannel channel = new NotificationChannel(
                        NOTIFICATION_CHANNEL_ID,
                        NOTIFICATION_CHANNEL_NAME,
                        NotificationManager.IMPORTANCE_HIGH);
                channel.setDescription(NOTIFICATION_CHANNEL_DESCRIPTION);
                channel.setShowBadge(true);
    
                NotificationManager notificationManager = context.getSystemService(NotificationManager.class);
                notificationManager.createNotificationChannel(channel);
             }
        }
    }
    
  13. في Android Studio على شريط القوائم، حدد Build>Rebuild Project للتأكد من عدم وجود أخطاء في التعليمة البرمجية. إذا تلقيت خطأ بشأن التعليمة البرمجية ic_launcher، فقم بإزالة العبارة التالية من ملف AndroidManifest.xml:

        android:icon="@mipmap/ic_launcher"
    
  14. تأكد من وجود جهاز ظاهري لتشغيل التطبيق. إذا لم يكن لديك واحد، فأضف واحدًا كما يلي:

    1. Open device manager
    2. Create virtual device
  15. قم بتشغيل التطبيق على جهازك المحدد وتحقق من تسجيله بنجاح مع مركز الإعلامات.

    إشعار

    قد يفشل التسجيل أثناء محاولة الإطلاق الأولي حتى يتم استدعاء الأسلوب onTokenRefresh() لخدمة معرف المثيل. يجب أن يبدأ التحديث تسجيلاً ناجحاً مع مركز الإعلام.

    Device registration successful

اختبار إرسال الإعلامات من مركز الإعلام

يمكنك إرسال إعلامات من مدخل Microsoft Azure باتباع الخطوات التالية:

  1. في مدخل Microsoft Azure، في صفحة مركز الإعلام الخاصة بالمحور، حدد Test Send في قسم Troubleshooting.

  2. للمنصات، حدد Android.

  3. حدد إرسال. لن تتمكن من رؤية إعلام على جهاز Android حتى الآن لأنك لم تقم بتشغيل تطبيق الجوال عليه. بعد تشغيل تطبيق الجوال، حدد الزر Send مرة أخرى لمشاهدة رسالة الإعلام.

  4. تحقق من نتيجة العملية في القائمة الموجودة أسفل النافذة.

    Azure Notification Hubs - Test Send

  5. يمكنك رؤية رسالة الإعلام على جهازك.

    Notification message on device

عادة ما يتم إرسال الإشعارات المنبثقة في خدمة back-end مثل Mobile Apps لـ ASP.NET باستخدام compatible library. إذا لم تكن المكتبة متوفرة على الخادم، يمكنك أيضًا استخدام واجهة برمجة تطبيقات REST مباشرة لإرسال رسائل الإعلام.

فيما يلي قائمة ببعض البرامج التعليمية الأخرى التي ننصح بمراجعتها لإرسال الإعلامات:

تشغيل تطبيقات الأجهزة المحمولة على المحاكي

قبل أن تختبر عرض الإعلامات داخل المحاكي، تأكد من أن صورة المحاكي تدعم مستوى Google API الذي اخترته لتطبيقك. إذا كانت صورتك لا تدعم واجهات برمجة التطبيقات الأصلية في Google، فقد تحصل على استثناء SERVICE_NOT_AVAILABLE.

تأكد أيضاً من إضافة حسابك في حساب Google إلى جهاز المحاكاة المُشغل ضمن Settings>Accounts. وخلاف ذلك، قد تؤدي محاولاتك للتسجيل مع FCM إلى استثناء AUTHENTICATION_FAILED.

الخطوات التالية

في هذا البرنامج التعليمي، استخدمت Firebase Cloud Messaging لبث الإعلامات إلى جميع أجهزة Android التي تم تسجيلها في الخدمة. لمعرفة كيفية إرسال إعلامات مباشرة إلى أجهزة معينة، اكتشف البرنامج التعليمي التالي: