إضافة إعلامات مؤقتة إلى تطبيق Android

نظرة عامة

في هذا البرنامج التعليمي، يمكنك إضافة إعلامات مؤقتة إلى مشروع التشغيل السريع ل Android بحيث يتم إرسال إعلام دفع إلى الجهاز في كل مرة يتم فيها إدراج سجل.

إذا لم تستخدم مشروع خادم البدء السريع الذي تم تنزيله، فستحتاج إلى حزمة ملحق الإعلامات المؤقتة. لمزيد من المعلومات، راجع العمل مع خادم .NET الخلفي SDK لتطبيقات Azure Mobile.

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

ستحتاج أيضًا إلى ما يلي:

  • IDE، اعتمادا على النهاية الخلفية لمشروعك:

    • Android Studio إذا كان هذا التطبيق يحتوي على خلفية Node.js.
    • Visual Studio Community 2013 أو إصدار أحدث إذا كان هذا التطبيق يحتوي على خلفية Microsoft .NET.
  • Android 2.3 أو أحدث، ومراجعة Google Repository 27 أو أحدث، وخدمات Google Play 9.0.2 أو أحدث ل Firebase Cloud Messaging.

  • أكمل البدء السريع لنظام Android.

إنشاء مشروع يدعم Firebase Cloud Messaging

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

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

    إضافة Firebase إلى تطبيق Android

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

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

      تحديد اسم الحزمة

    2. حدد Register app.

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

    تحميل 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

  6. حدد "Next".

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

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

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

    حدد إعدادات المشروع

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

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

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

تكوين مركز إعلامات

تستخدم ميزة تطبيقات الأجهزة المحمولة في Azure App Service Azure Notification Hubs لإرسال الدفعات، لذلك ستقوم بتكوين مركز إعلام لتطبيق الأجهزة المحمولة.

  1. في مدخل Microsoft Azure، انتقل إلى App Services، ثم حدد النهاية الخلفية للتطبيق. ضمن Settings، حدد Push.

  2. لإضافة مورد مركز إعلام إلى التطبيق، حدد اتصال. يمكنك إما إنشاء مركز أو الاتصال بمركز موجود.

    تكوين مركز

لقد قمت الآن بتوصيل مركز إعلام بمشروع الخلفية لتطبيقات الأجهزة المحمولة. يمكنك لاحقا تكوين مركز الإعلامات هذا للاتصال بنظام إعلام النظام الأساسي (PNS) للدفع إلى الأجهزة.

تكوين Azure لإرسال إعلامات الدفع

  1. في مدخل Microsoft Azure، انقر فوق استعراض جميع>خدمات التطبيقات، ثم انقر فوق النهاية الخلفية لتطبيقات الأجهزة المحمولة. ضمن الإعدادات، انقر فوق دفع خدمة التطبيقات، ثم انقر فوق اسم مركز الإعلامات.

  2. انتقل إلى Google (GCM)، وأدخل قيمة مفتاح الخادم التي حصلت عليها من Firebase في الإجراء السابق، ثم انقر فوق حفظ.

    تعيين مفتاح API في المدخل

تم الآن تكوين الواجهة الخلفية لتطبيقات الأجهزة المحمولة لاستخدام Firebase Cloud Messaging. يمكنك هذا من إرسال إعلامات مؤقتة إلى تطبيقك الذي يعمل على جهاز Android، باستخدام مركز الإعلامات.

تمكين الإعلامات المنبثقة لمشروع الخادم

استخدم الإجراء الذي يطابق نوع المشروع الخلفي - إما النهاية الخلفية ل .NET أو Node.js الخلفية.

مشروع .NET الخلفي

  1. في Visual Studio، انقر بزر الماوس الأيمن فوق مشروع الخادم، وانقر فوق إدارة حزم NuGet. ابحث Microsoft.Azure.NotificationHubsعن ، ثم انقر فوق تثبيت. يؤدي هذا إلى تثبيت مكتبة عميل مراكز الإعلامات.

  2. في مجلد Controllers، افتح TodoItemController.cs وأضف العبارات التالية using :

    using Microsoft.Azure.Mobile.Server.Config;
    using Microsoft.Azure.NotificationHubs;
    
  3. استبدل الأسلوب PostTodoItem بالتعليمات البرمجية التالية:

    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. إعادة نشر مشروع الخادم.

Node.js مشروع خلفي

  1. إعداد مشروع الواجهة الخلفية.

  2. استبدل التعليمات البرمجية الموجودة في ملف todoitem.js بما يلي:

    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;
    

    يرسل هذا إعلام GCM الذي يحتوي على item.text عند إدراج عنصر todo جديد.

  3. عند تحرير الملف في الكمبيوتر المحلي، أعد نشر مشروع الخادم.

إضافة إعلامات مؤقتة إلى تطبيقك

في هذا القسم، يمكنك تحديث تطبيق Android العميل للتعامل مع الإعلامات المنبثقة.

التحقق من إصدار Android SDK

بسبب التطوير المستمر، قد لا يتطابق إصدار Android SDK المثبت في Android Studio مع الإصدار في التعليمات البرمجية. Android SDK المشار إليه في هذا البرنامج التعليمي هو الإصدار 26، الأحدث في وقت كتابة هذا التقرير. قد يزيد رقم الإصدار مع ظهور إصدارات جديدة من SDK، ونوصي باستخدام أحدث إصدار متوفر.

أعراض عدم تطابق الإصدار هما:

  • عند إنشاء المشروع أو إعادة إنشائه، قد تتلقى رسائل خطأ Gradle مثل Gradle sync failed: Failed to find target with hash string 'android-XX'.
  • قد تقوم كائنات Android القياسية في التعليمات البرمجية التي يجب حلها استنادا import إلى عبارات بإنشاء رسائل خطأ.

إذا ظهر أي منهما، فقد لا يتطابق إصدار Android SDK المثبت في Android Studio مع هدف SDK للمشروع الذي تم تنزيله. للتحقق من الإصدار، قم بإجراء التغييرات التالية:

  1. في Android Studio، انقر فوق أدوات>Android>SDK Manager. إذا لم تقم بتثبيت أحدث إصدار من النظام الأساسي SDK، فانقر لتثبيته. دون رقم الإصدار.

  2. في علامة التبويب Project Explorer ، ضمن Gradle Scripts، افتح الملف build.gradle (الوحدة النمطية: التطبيق). تأكد من تعيين التحويل البرمجيSdkVersion و targetSdkVersion إلى أحدث إصدار SDK مثبت. build.gradle قد يبدو كما يلي:

    android {
        compileSdkVersion 26
        defaultConfig {
            targetSdkVersion 26
        }
    }
    

خطوتك التالية هي تثبيت خدمات Google Play. يحتوي Firebase Cloud Messaging على الحد الأدنى من متطلبات مستوى واجهة برمجة التطبيقات للتطوير والاختبار، والتي يجب أن تتوافق مع خاصية minSdkVersion في البيان.

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

إضافة Firebase Cloud Messaging إلى المشروع

  1. إضافة Firebase إلى مشروع Android

  2. في Android Studio، اختر File>Project Structure. حدد Notifications، وحدد Firebase Cloud Messaging، ثم انقر فوق OK.

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

  1. في مشروع التطبيق الخاص بك، افتح الملف AndroidManifest.xml. أضف التعليمات البرمجية application التالية بعد علامة الفتح:

    <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. افتح الملف ToDoActivity.java، وقم بإجراء التغييرات التالية:

    • إضافة عبارة الاستيراد:

      import com.google.firebase.iid.FirebaseInstanceId;
      
    • قم بتغيير تعريف من MobileServiceClientثابت خاص إلى خاص، لذلك يبدو الآن كما يلي:

      private static MobileServiceClient mClient;
      
    • إضافة 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();
          }
      }
      
    • تحديث أسلوب onCreate للفئة ToDoActivity . تأكد من إضافة هذه التعليمة البرمجية MobileServiceClient بعد إنشاء مثيل.

      registerPush();
      
  3. أضف فئة جديدة للتعامل مع الإعلامات. في Project Explorer، افتح عقد>مساحة>اسم المشروع الخاص بك للتطبيق، وانقر بزر الماوس الأيمن فوق عقدة اسم الحزمة. انقر فوق جديد، ثم انقر فوق فئة Java. في الاسم، اكتب ToDoMessagingService، ثم انقر فوق موافق. بعد ذلك، استبدل إعلان الفئة بما يلي:

    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. أضف فئة أخرى لمعالجة تحديثات الرمز المميز. إنشاء ToDoInstanceIdService فئة java واستبدال إعلان الفئة بما يلي:

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

تم الآن تحديث تطبيقك لدعم الإعلامات المنبثقة.

اختبار التطبيق مقابل خدمة الأجهزة المحمولة المنشورة

يمكنك اختبار التطبيق عن طريق إرفاق هاتف Android مباشرة بكبل USB، أو باستخدام جهاز ظاهري في المحاكي.

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

الآن بعد أن أكملت هذا البرنامج التعليمي، ضع في اعتبارك المتابعة إلى أحد البرامج التعليمية التالية:

  • أضف المصادقة إلى تطبيق Android. تعرف على كيفية إضافة المصادقة إلى مشروع التشغيل السريع ل todolist على Android باستخدام موفر هوية مدعوم.
  • تمكين المزامنة دون اتصال لتطبيق Android. تعرف على كيفية إضافة دعم دون اتصال إلى تطبيقك باستخدام الواجهة الخلفية لتطبيقات الأجهزة المحمولة. باستخدام المزامنة دون اتصال، يمكن للمستخدمين التفاعل مع تطبيق الأجهزة المحمولة - عرض البيانات أو إضافتها أو تعديلها - حتى عندما لا يكون هناك اتصال بالشبكة.