اعلان‌های فشاری را به برنامه iOS اضافه کنید

1. مقدمه

آخرین به روز رسانی: 6-1-2020

Firebase Cloud Messaging (FCM) یک راه حل پیام رسانی بین پلتفرمی است که به شما امکان می دهد بدون هیچ هزینه ای پیام های قابل اعتماد ارسال کنید.

با استفاده از FCM، می‌توانید به برنامه مشتری اطلاع دهید که ایمیل جدید یا داده‌های دیگر برای همگام‌سازی در دسترس است. می‌توانید پیام‌های اعلان ارسال کنید تا باعث جذب مجدد و حفظ کاربر شود. برای موارد استفاده مانند پیام‌رسانی فوری، یک پیام می‌تواند حجمی تا 4 کیلوبایت را به یک برنامه مشتری منتقل کند.

چگونه کار می کند؟

پیاده سازی FCM شامل دو جزء اصلی برای ارسال و دریافت است:

  1. یک محیط قابل اعتماد مانند Cloud Functions برای Firebase یا یک سرور برنامه که بر روی آن می‌توان پیام‌ها را ساخت، هدف‌گیری و ارسال کرد.
  2. یک برنامه سرویس گیرنده iOS، Android یا وب (جاوا اسکریپت) که پیام‌ها را از طریق سرویس حمل و نقل مخصوص پلتفرم مربوطه دریافت می‌کند.

نمای کلی معماری FCM

6636933bbe959ef2.png

FCM بر مجموعه اجزای زیر متکی است که پیام‌ها را می‌سازند، انتقال می‌دهند و دریافت می‌کنند:

  1. ابزاری برای نوشتن یا ساخت درخواست های پیام. Notifications composer یک گزینه مبتنی بر رابط کاربری گرافیکی برای ایجاد درخواست‌های اعلان ارائه می‌کند. برای اتوماسیون کامل و پشتیبانی از انواع پیام ها، باید درخواست های پیام را در یک محیط سرور قابل اعتماد ایجاد کنید که از Firebase Admin SDK یا پروتکل های سرور FCM پشتیبانی می کند. این محیط می تواند Cloud Functions برای Firebase، Google App Engine یا سرور برنامه خودتان باشد.
  2. پشتیبان FCM، که (در میان سایر عملکردها) درخواست های پیام را می پذیرد، پیام ها را از طریق موضوعات انجام می دهد و ابرداده پیام مانند شناسه پیام را تولید می کند.
  3. یک لایه انتقال در سطح پلت فرم، که پیام را به دستگاه مورد نظر هدایت می‌کند، تحویل پیام را مدیریت می‌کند و در صورت لزوم پیکربندی پلتفرم خاص را اعمال می‌کند. این لایه انتقال شامل:
  • لایه حمل و نقل Android (ATL) برای دستگاه های Android با خدمات Google Play
  • سرویس Apple Push Notification (APN) برای دستگاه های iOS
  • پروتکل فشار وب برای برنامه های وب
  1. FCM SDK در دستگاه کاربر، جایی که اعلان نمایش داده می‌شود یا پیام بر اساس وضعیت پیش‌زمینه/پس‌زمینه برنامه و هر منطق برنامه مربوطه مدیریت می‌شود.

چیزی که خواهی ساخت

در این کد لبه، شما قصد دارید اعلان فشار را به یک نمونه برنامه iOS با FCM اضافه کنید.

چیزی که یاد خواهید گرفت

  • نحوه عضویت و لغو اشتراک کاربر برای پیام‌رسانی فشاری
  • نحوه رسیدگی به پیام های فشار ورودی
  • نحوه نمایش اعلان
  • چگونه به کلیک های اعلان پاسخ دهیم

آنچه شما نیاز دارید

  • Xcode 11.0 یا بالاتر
  • CocoaPods 1.9.0 یا بالاتر
  • حساب توسعه دهنده اپل
  • یک دستگاه iOS فیزیکی برای اجرای برنامه شما
  • دانش اولیه سوئیفت

2. راه اندازی

نمونه کد را دانلود کنید

در این نرم افزار کد، شما برنامه آزمایشی خود را خواهید ساخت، اما اگر می خواهید نمونه برنامه موجود را ببینید و اجرا کنید، می توانید کد نمونه شروع سریع را دانلود کنید.

دو راه برای گرفتن نمونه وجود دارد:

  • کلون کردن مخزن Git:
$ git clone https://github.com/firebase/quickstart-ios.git
  • دانلود فایل ZIP:

اگر منبع را به عنوان یک فایل ZIP دانلود کنید، با باز کردن آن یک پوشه root quickstart-ios در اختیار شما قرار می گیرد.

یک برنامه جدید ایجاد کنید

برنامه آزمایشی خود را با مراحل زیر ایجاد کنید (مراحل زیر در XCode 12.3 است):

  1. XCode را باز کرده و Create a new Xcode project را انتخاب کنید.
  2. App را انتخاب کنید و روی Next کلیک کنید.

e56c631b086c6d8.png

  1. نام محصول را وارد کنید (به عنوان مثال MessagingExample)
  2. تیم را انتخاب کنید (اگر تیم را ایجاد نکرده اید، آن را در حساب توسعه دهنده اپل پیکربندی کنید).
  3. شناسه سازمان ورودی (به عنوان مثال com. your-name )
  4. شناسه بسته ورودی (مثلاً com. your-name .MessagingExample ، باید در بین همه برنامه‌های iOS منحصربه‌فرد باشد).
  5. Storyboard را در منوی کشویی Interface انتخاب کنید.
  6. UIKit App Delegate را در کشویی چرخه زندگی انتخاب کنید.
  7. Swift را در زبان انتخاب کنید.
  8. روی Next کلیک کنید.

fb860c0fa4a02818.png

هنگامی که یک کلید APN ایجاد می کنید و برنامه خود را در پروژه Firebase خود ثبت می کنید، به Bundle Identifier نیاز خواهید داشت.

3. پیکربندی APN ها

کلید احراز هویت را ایجاد کنید

این بخش نحوه ایجاد یک کلید احراز هویت برای شناسه برنامه فعال شده برای Push Notifications را توضیح می‌دهد. اگر یک کلید موجود دارید، می توانید به جای ایجاد کلید جدید از آن کلید استفاده کنید.

برای ایجاد یک کلید احراز هویت:

  1. در حساب برنامه‌نویس خود، به گواهی‌ها، شناسه‌ها و نمایه‌ها بروید و به کلیدها بروید.

19ae87d0f00402b1.png

  1. روی دکمه Add (+) در گوشه سمت راست بالا کلیک کنید.

c4acd10dbc4f721f.png

  1. توضیحی برای کلید تأیید APNs وارد کنید
  2. در بخش خدمات کلیدی، کادر تأیید APNs را انتخاب کرده و روی Continue کلیک کنید.

6a3e8ff7457a8251.png

  1. روی ثبت نام و سپس دانلود کلیک کنید. کلید خود را در مکانی امن ذخیره کنید. این یک بارگیری است و کلید بعداً قابل بازیابی نیست.

42c205e072fbd622.png

یک شناسه برنامه ایجاد کنید

شناسه برنامه یک شناسه است که به طور منحصر به فرد یک برنامه را شناسایی می کند. به عنوان یک قرارداد، با یک دامنه معکوس نشان داده می شود.

  1. به مرکز اعضای برنامه نویس اپل بروید و وارد شوید.
  2. به گواهی ها، شناسه ها و نمایه ها بروید.
  3. به شناسه ها بروید.
  4. برای ایجاد یک شناسه برنامه جدید، روی دکمه + کلیک کنید. e04fc394c52a866f.png
  5. دکمه رادیویی App IDs را انتخاب کرده و روی Continue کلیک کنید.

d454fd5df3b8d93d.png

  1. App را انتخاب کنید و روی Continue کلیک کنید.

3bd2e836be5e0291.png

  1. برای ایجاد شناسه برنامه جدید:
  2. یک نام برای شناسه برنامه خود وارد کنید.
  3. شناسه تیم را وارد کنید. این مقدار باید با شناسه تیم در برگه عضویت مطابقت داشته باشد.
  4. در بخش App ID پسوند ، Explicit App ID را انتخاب کنید، سپس Bundle ID خود را وارد کنید. 7363c4d1962b486d.png
  5. در قسمت App Services مطمئن شوید که Push Notifications تیک خورده باشد. 552ea08703f7e323.png
  6. روی Continue کلیک کنید و بررسی کنید که ورودی شما درست باشد:
  7. مقدار شناسه باید با ترکیب مقادیر Team ID و Bundle ID مطابقت داشته باشد.
  8. Push Notifications باید قابل تنظیم باشد
  9. برای ایجاد شناسه برنامه روی Register کلیک کنید.

نمایه را ایجاد کنید

برای آزمایش برنامه خود در حین توسعه، به یک نمایه برای توسعه نیاز دارید تا دستگاه های خود را مجاز به اجرای برنامه ای کنید که هنوز در فروشگاه App منتشر نشده است.

  1. به مرکز اعضای برنامه نویس اپل بروید و وارد شوید.
  2. به گواهی ها، شناسه ها و نمایه ها بروید.
  3. در منوی کشویی در گوشه سمت چپ بالا، iOS، tvOS، watchOS را انتخاب کنید، اگر قبلاً انتخاب نشده‌اند، سپس به نمایه‌ها بروید.
  4. برای ایجاد نمایه جدید روی دکمه + کلیک کنید. 1fa2342cfe45a925.png
  5. توسعه برنامه iOS را به عنوان نوع نمایه ارائه شده انتخاب کنید، سپس روی Continue کلیک کنید.

507434a466220dfe.png

  1. در منوی کشویی، شناسه برنامه مورد نظر خود را برای استفاده انتخاب کنید، سپس روی Continue کلیک کنید.
  2. گواهی توسعه iOS را از App ID که در مرحله قبل انتخاب کرده‌اید انتخاب کنید، سپس روی Continue کلیک کنید.
  3. دستگاه‌های iOS را که می‌خواهید در نمایه تأمین قرار دهید انتخاب کنید، سپس روی «ادامه» کلیک کنید. مطمئن شوید که همه دستگاه‌هایی را که می‌خواهید برای آزمایش استفاده کنید انتخاب کنید.
  4. نامی را برای این نمایه تدارکات وارد کنید (مثلا MessagingExampleProfile )، سپس روی Generate کلیک کنید.

4395f04647afa997.png

  1. برای ذخیره Provisioning Profile در Mac خود روی Download کلیک کنید.

106761fa786ba580.png

  1. برای نصب روی فایل Provisioning Profile دوبار کلیک کنید.

4. افزودن Firebase به پروژه iOS خود

یک پروژه Firebase ایجاد کنید

قبل از اینکه بتوانید Firebase را به برنامه iOS خود اضافه کنید، باید یک پروژه Firebase برای اتصال به برنامه iOS خود ایجاد کنید. برای کسب اطلاعات بیشتر در مورد پروژه های Firebase، از Understand Firebase Projects دیدن کنید.

  1. در کنسول Firebase، روی افزودن پروژه کلیک کنید، سپس نام پروژه را انتخاب یا وارد کنید. e462afd91c149238.png

اگر یک پروژه Google Cloud Platform (GCP) دارید، می‌توانید پروژه را از منوی کشویی انتخاب کنید تا منابع Firebase را به آن پروژه اضافه کنید.

  1. (اختیاری) اگر در حال ایجاد یک پروژه جدید هستید، می توانید شناسه پروژه را ویرایش کنید.

Firebase به طور خودکار یک شناسه منحصر به فرد را به پروژه Firebase شما اختصاص می دهد. برای آشنایی با نحوه استفاده Firebase از ID پروژه، از Understand Firebase Projects دیدن کنید.

  1. روی Continue کلیک کنید.
  2. Google Analytics را برای پروژه خود راه اندازی کنید، که به شما امکان می دهد با استفاده از هر یک از محصولات Firebase زیر تجربه ای بهینه داشته باشید:
  • Firebase Crashlytics
  • پیش بینی های Firebase
  • Firebase Cloud Messaging
  • Firebase In-App Messaging
  • Firebase Remote Config
  • تست Firebase A/B

هنگامی که از شما خواسته شد، استفاده از یک حساب Google Analytics موجود یا ایجاد یک حساب جدید را انتخاب کنید. اگر تصمیم به ایجاد یک حساب کاربری جدید دارید، مکان گزارش Analytics خود را انتخاب کنید، سپس تنظیمات اشتراک داده و شرایط Google Analytics را برای پروژه خود بپذیرید.

1282a798556779ab.png

48ade68c8de27d2.png

  1. روی ایجاد پروژه (یا افزودن Firebase ، اگر از پروژه GCP موجود استفاده می کنید) کلیک کنید.

Firebase به طور خودکار منابع پروژه Firebase شما را فراهم می کند. پس از تکمیل فرآیند، به صفحه نمای کلی پروژه Firebase خود در کنسول Firebase هدایت خواهید شد.

برنامه خود را با Firebase ثبت کنید

پس از انجام پروژه Firebase، می توانید برنامه iOS خود را به آن اضافه کنید.

از Understand Firebase Projects دیدن کنید تا درباره بهترین روش‌ها و ملاحظات برای افزودن برنامه‌ها به پروژه Firebase، از جمله نحوه مدیریت چندین نوع ساخت بیشتر بدانید.

  1. به کنسول Firebase بروید.
  2. در مرکز صفحه نمای کلی پروژه، روی نماد iOS کلیک کنید تا گردش کار راه اندازی شود.

اگر قبلاً برنامه‌ای را به پروژه Firebase خود اضافه کرده‌اید، روی افزودن برنامه کلیک کنید تا گزینه‌های پلتفرم نمایش داده شوند.

93462beb642e8987.png

  1. شناسه بسته نرم افزاری خود را در قسمت شناسه بسته نرم افزاری iOS وارد کنید.
  2. (اختیاری) اطلاعات دیگر برنامه را وارد کنید: نام مستعار برنامه و شناسه فروشگاه App .
  3. روی ثبت برنامه کلیک کنید.

2e7a00b0008344c1.png

یک فایل پیکربندی Firebase اضافه کنید

  1. برای دریافت فایل پیکربندی iOS Firebase ( GoogleService-Info.plist ) روی Download GoogleService-Info.plist کلیک کنید. 69004caf7d448989.png
  2. فایل پیکربندی خود را به ریشه پروژه Xcode خود منتقل کنید. اگر از شما خواسته شد، انتخاب کنید تا فایل پیکربندی را به همه اهداف اضافه کنید.

7c5e0a46d07fa9c7.png

اگر چندین شناسه بسته در پروژه خود دارید، باید هر ID بسته را با یک برنامه ثبت شده در کنسول Firebase مرتبط کنید تا هر برنامه بتواند فایل GoogleService-Info.plist خود را داشته باشد.

XCode را ببندید.

SDK های Firebase را به برنامه خود اضافه کنید

توصیه می کنیم از CocoaPods برای نصب کتابخانه های Firebase استفاده کنید. با این حال، اگر ترجیح می‌دهید از CocoaPods استفاده نکنید، می‌توانید چارچوب‌های SDK را مستقیماً ادغام کنید یا از بتای Swift Package Manager استفاده کنید.

  1. اگر قبلاً یک پادفایل ندارید، یک پادفایل ایجاد کنید. اگر از نمونه راه اندازی سریع استفاده می کنید، پروژه Xcode و Podfile (با پادها) از قبل موجود هستند.
$ cd MessagingExample
$ pod init
  1. به Podfile خود، غلاف های Firebase را که می خواهید در برنامه خود استفاده کنید، اضافه کنید.

می توانید هر یک از محصولات Firebase پشتیبانی شده را به برنامه iOS خود اضافه کنید.

در نمونه شروع سریع، Google Analytics و Firebase Cloud Messaging SDK اضافه شده است.

# Add the Firebase pod for Google Analytics
pod 'Firebase/Analytics'

# Add the pod for Firebase Cloud Messaging
pod 'Firebase/Messaging'
  1. پادها را نصب کنید، سپس فایل .xcworkspace خود را باز کنید تا پروژه را در Xcode ببینید:
$ pod install
  1. MessagingExample.xcworkspace را باز کنید و روی Next در کنسول Firebase کلیک کنید. 6d1f8230d16693e6.png

Firebase را در برنامه خود راه اندازی کنید

شما باید کد اولیه Firebase را به برنامه خود اضافه کنید.

ماژول Firebase را وارد کنید و یک نمونه مشترک را پیکربندی کنید (در نمونه شروع سریع، ماژول Firebase قبلا وارد شده است).

  1. ماژول Firebase را در UIApplicationDelegate خود وارد کنید:

AppDelegate.swift

import UIKit
import Firebase // Add this line
  1. پیکربندی یک نمونه مشترک FirebaseApp، معمولاً در application:didFinishLaunchingWithOptions: متد:

AppDelegate.swift

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
  FirebaseApp.configure() // Add this line
  return true
}
  1. در کنسول Firebase روی Next کلیک کنید. f9d37423d346ff0.png
  2. Firebase SDK به برنامه شما اضافه می شود. برای کنسول روی Continue کلیک کنید. d1b1309cd3790f66.png

5. پیکربندی مشتری FCM

کلید احراز هویت APN خود را آپلود کنید

کلید احراز هویت APN خود را در Firebase آپلود کنید.

  1. در داخل پروژه خود در کنسول Firebase، نماد چرخ دنده را انتخاب کنید، تنظیمات پروژه را انتخاب کنید و سپس برگه Cloud Messaging را انتخاب کنید. ba8b5f95241327fe.png
  2. در کلید احراز هویت APN در پیکربندی برنامه iOS ، روی دکمه آپلود کلیک کنید. 357ddc0d4b182492.png
  3. به مکانی که کلید خود را در آن ذخیره کرده اید بروید، آن را انتخاب کنید و روی Open کلیک کنید. شناسه کلید را برای کلید اضافه کنید (در گواهینامه‌ها، شناسه‌ها و نمایه‌ها در مرکز اعضای برنامه‌نویس اپل موجود است) و روی آپلود کلیک کنید. 3dae27f2327daf9e.png

برای اطلاعیه از راه دور ثبت نام کنید

در هنگام راه اندازی یا در نقطه مورد نظر در جریان برنامه خود، برنامه خود را برای اعلان های راه دور ثبت کنید.

در نمونه شروع سریع، registerForRemoteNotifications قبلاً اضافه شده است.

AppDelegate.swift

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
  FirebaseApp.configure()
  // [START register for remote notifications]
  if #available(iOS 10.0, *) {
    // For iOS 10 display notification (sent via APNS)
    UNUserNotificationCenter.current().delegate = self
        
    let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound]
    UNUserNotificationCenter.current().requestAuthorization(options: authOptions, completionHandler: {_, _ in })
  } else {
    let settings: UIUserNotificationSettings = UIUserNotificationSettings(types: [.alert, .badge, .sound], categories: nil)
    application.registerUserNotificationSettings(settings)
  }

  application.registerForRemoteNotifications()
  // [END register for remote notifications]
  return true
}

با افزودن این خطوط در انتهای AppDelegate.swift، ویژگی نمایندگی UNUserNotificationCenter را اختصاص دهید.

AppDelegate.swift

@available(iOS 10, *)
extension AppDelegate : UNUserNotificationCenterDelegate {

  // Receive displayed notifications for iOS 10 devices.
  func userNotificationCenter(_ center: UNUserNotificationCenter,
                              willPresent notification: UNNotification,
    withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
    let userInfo = notification.request.content.userInfo

    // Print full message.
    print(userInfo)

    // Change this to your preferred presentation option
    completionHandler([[.alert, .sound]])
  }

  func userNotificationCenter(_ center: UNUserNotificationCenter,
                              didReceive response: UNNotificationResponse,
                              withCompletionHandler completionHandler: @escaping () -> Void) {
    let userInfo = response.notification.request.content.userInfo

    // Print full message.
    print(userInfo)

    completionHandler()
  }
}

نماینده پیام رسانی را تنظیم کنید

برای دریافت نشانه‌های ثبت‌نام، پروتکل ارسال پیام را پیاده‌سازی کنید و پس از فراخوانی [FIRApp configure] ویژگی delegate FIRMessaging را تنظیم کنید. برای مثال، اگر نماینده برنامه شما با پروتکل نماینده پیام‌رسانی مطابقت دارد، می‌توانید نماینده را روی application:didFinishLaunchingWithOptions: روی خودش تنظیم کنید (در نمونه شروع سریع، از قبل تنظیم شده است).

AppDelegate.swift

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
  FirebaseApp.configure()
  Messaging.messaging().delegate = self // Add this line
  // [START register for remote notifications]
  if #available(iOS 10.0, *) {
    // For iOS 10 display notification (sent via APNS)
    UNUserNotificationCenter.current().delegate = self
        
    let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound]
    UNUserNotificationCenter.current().requestAuthorization(options: authOptions, completionHandler: {_, _ in })
  } else {
    let settings: UIUserNotificationSettings = UIUserNotificationSettings(types: [.alert, .badge, .sound], categories: nil)
    application.registerUserNotificationSettings(settings)
  }

  application.registerForRemoteNotifications()
  // [END register for remote notifications]
  return true
}

با افزودن این خطوط در انتهای AppDelegate.swift، ویژگی نمایندگی FIRMessaging را اختصاص دهید.

AppDelegate.swift

extension AppDelegate : MessagingDelegate {
  func messaging(_ messaging: Messaging, didReceiveRegistrationToken fcmToken: String?) {
    print("Firebase registration token: \(String(describing: fcmToken))")
    
    let dataDict:[String: String] = ["token": fcmToken ?? ""]
    NotificationCenter.default.post(name: Notification.Name("FCMToken"), object: nil, userInfo: dataDict)
  }
}

قابلیت ها را اضافه کنید

شما قابلیت Push Notifications را در بخش Create an App ID اضافه کرده‌اید، اما باید با مراحل زیر این قابلیت را در XCode نیز اضافه کنید (مراحل زیر در XCode 12.3 است):

  1. روی نام پروژه در ناحیه Navigator کلیک کنید.
  2. روی Signing & Capabilities کلیک کنید.
  3. روی + قابلیت کلیک کنید.

eaf41aefb3bf2c9e.png

  1. روی Background Modes دوبار کلیک کنید.
  2. دوباره روی + Capability کلیک کنید.
  3. روی Push Notifications دوبار کلیک کنید.
  4. اعلان های راه دور را در بخش حالت های پس زمینه بررسی کنید.

e5d0fc08651e04a9.png

6. یک پیام اعلان ارسال کنید

با انجام مراحل زیر می توانید پیام آزمایشی ارسال کنید:

  1. برنامه را روی دستگاه مورد نظر نصب و اجرا کنید. برای دریافت اعلان‌های راه دور باید درخواست مجوز را بپذیرید.
  2. رمز ثبت نام را در لاگ XCode دریافت کنید.

a2e49a92f9807d34.png

  1. مطمئن شوید که برنامه در پس‌زمینه دستگاه است.
  2. نوتیفیکیشن ساز را باز کنید و اعلان جدید را انتخاب کنید.
  3. متن پیام را وارد کنید f485d7fbd2456ae0.png
  4. ارسال پیام آزمایشی را انتخاب کنید.
  5. در فیلد با عنوان افزودن نشانه ثبت FCM ، رمز ثبت نامی را که در مرحله 2 به دست آورده اید وارد کنید.
  6. روی تست کلیک کنید.

بعد از اینکه روی تست کلیک کردید، دستگاه مشتری مورد نظر (با برنامه در پس‌زمینه) باید اعلان را در مرکز اعلان دریافت کند.

برای اطلاعات بیشتر درباره تحویل پیام به برنامه خود، به داشبورد گزارش FCM مراجعه کنید، که تعداد پیام‌های ارسال شده و باز شده در دستگاه‌های iOS و Android را ثبت می‌کند.

6570eea7b5228513.png

7. تبریک می گویم

تبریک می گویم، شما با موفقیت یک پیام آزمایشی ارسال کردید!

توابع و پیکربندی های بسیار بیشتری در FCM مانند اشتراک موضوع وجود دارد.

اگر به آنها علاقه مندید ، سند رسمی توسعه دهنده را بررسی کنید.

بعدش چی؟

برخی از این کدها را بررسی کنید.

در ادامه مطلب