۱. مقدمه
آخرین بهروزرسانی: 2020-1-6
پیامرسان ابری فایربیس (FCM) یک راهکار پیامرسان چند پلتفرمی است که به شما امکان میدهد پیامها را به صورت مطمئن و رایگان ارسال کنید.
با استفاده از FCM، میتوانید به یک برنامه کلاینت اطلاع دهید که ایمیل جدید یا سایر دادهها برای همگامسازی در دسترس است. میتوانید پیامهای اعلان ارسال کنید تا تعامل مجدد و حفظ کاربر را افزایش دهید. برای مواردی مانند پیامرسانی فوری، یک پیام میتواند تا ۴ کیلوبایت داده را به یک برنامه کلاینت منتقل کند.
چگونه کار میکند؟
پیادهسازی FCM شامل دو مؤلفه اصلی برای ارسال و دریافت است:
- یک محیط قابل اعتماد مانند Cloud Functions برای Firebase یا یک سرور برنامه که در آن بتوان پیامها را ساخت، هدفگیری کرد و ارسال کرد.
- یک برنامه کلاینت iOS، اندروید یا وب (جاوااسکریپت) که پیامها را از طریق سرویس انتقال مختص پلتفرم مربوطه دریافت میکند.
بررسی اجمالی معماری FCM

FCM به مجموعه اجزای زیر که پیامها را میسازند، منتقل میکنند و دریافت میکنند، متکی است:
- ابزاری برای نوشتن یا ساخت درخواستهای پیام. آهنگساز Notifications یک گزینه مبتنی بر رابط کاربری گرافیکی برای ایجاد درخواستهای اعلان ارائه میدهد. برای اتوماسیون کامل و پشتیبانی از همه انواع پیام، باید درخواستهای پیام را در یک محیط سرور قابل اعتماد که از Firebase Admin SDK یا پروتکلهای سرور FCM پشتیبانی میکند، بسازید. این محیط میتواند Cloud Functions برای Firebase، Google App Engine یا سرور برنامه خودتان باشد.
- بخش مدیریت فایل (FCM) که (در کنار سایر وظایف) درخواستهای پیام را میپذیرد، از طریق تاپیکها، فانوت پیامها را انجام میدهد و فرادادههای پیام مانند شناسه پیام را تولید میکند.
- یک لایه انتقال در سطح پلتفرم، که پیام را به دستگاه مورد نظر هدایت میکند، تحویل پیام را مدیریت میکند و در صورت لزوم پیکربندی خاص پلتفرم را اعمال میکند. این لایه انتقال شامل موارد زیر است:
- لایه انتقال اندروید (ATL) برای دستگاههای اندروید با سرویسهای گوگل پلی
- سرویس اعلانهای فوری اپل (APN) برای دستگاههای iOS
- پروتکل وب پوش برای برنامههای وب
- کیت توسعه نرمافزار FCM روی دستگاه کاربر، جایی که اعلان نمایش داده میشود یا پیام بر اساس وضعیت پیشزمینه/پسزمینه برنامه و هرگونه منطق برنامه مربوطه مدیریت میشود.
آنچه خواهید ساخت
در این آزمایشگاه کد، شما قصد دارید با استفاده از FCM، به یک برنامه نمونه iOS، اعلانهای فوری (push notification) اضافه کنید.
آنچه یاد خواهید گرفت
- نحوه اشتراک و لغو اشتراک کاربر در پیامرسان پوش
- نحوه مدیریت پیامهای دریافتی
- نحوه نمایش اعلان
- نحوه پاسخ به کلیکهای اعلان
آنچه نیاز دارید
- Xcode نسخه ۱۱.۰ یا بالاتر
- کوکو پادز ۱.۹.۰ یا بالاتر
- حساب توسعهدهنده اپل
- یک دستگاه فیزیکی iOS برای اجرای برنامه شما
- آشنایی اولیه با سوئیفت
۲. راهاندازی
کد نمونه را دانلود کنید
در این آزمایشگاه کد، شما برنامه آزمایشی خودتان را خواهید ساخت، اما اگر میخواهید برنامه نمونه موجود را ببینید و اجرا کنید، میتوانید کد نمونه شروع سریع را دانلود کنید.
دو روش برای دریافت نمونه وجود دارد:
- مخزن گیت را کلون کنید:
$ git clone https://github.com/firebase/quickstart-ios.git
- دانلود فایل زیپ:
اگر سورس را به صورت فایل ZIP دانلود کنید، پس از باز کردن آن، پوشهی ریشه quickstart-ios ایجاد میشود.
یک برنامه جدید ایجاد کنید
با طی کردن مراحل زیر، اپلیکیشن آزمایشی خود را ایجاد کنید (مراحل زیر در XCode 12.3 آمده است):
- XCode را باز کنید و گزینه Create a new Xcode project را انتخاب کنید.
- برنامه را انتخاب کنید و روی بعدی کلیک کنید.

- نام محصول را وارد کنید (مثلاً MessagingExample)
- تیم را انتخاب کنید (اگر تیم ایجاد نکردهاید، آن را در حساب توسعهدهنده اپل پیکربندی کنید).
- شناسه سازمان ورودی (مثلاً
com.your-name) - شناسه بسته ورودی (مثلاً.
com.your-name.MessagingExample، باید در بین تمام برنامههای iOS منحصر به فرد باشد). - در منوی کشویی Interface ، گزینه Storyboard را انتخاب کنید.
- در منوی کشویی Life Cycle ، گزینه UIKit App Delegate را انتخاب کنید.
- در قسمت زبان، Swift را انتخاب کنید.
- روی بعدی کلیک کنید.

هنگام ایجاد کلید APN و ثبت برنامه خود در پروژه Firebase، به شناسه بسته (Bundle Identifier) نیاز خواهید داشت.
۳. پیکربندی APNها
کلید احراز هویت را ایجاد کنید
این بخش نحوه ایجاد کلید احراز هویت برای شناسه برنامهای که برای اعلانهای فوری فعال شده است را شرح میدهد. اگر کلید موجود دارید، میتوانید به جای ایجاد کلید جدید، از آن کلید استفاده کنید.
برای ایجاد کلید احراز هویت:
- در حساب توسعهدهنده خود، به بخش گواهینامهها، شناسهها و پروفایلها بروید و به بخش کلیدها (Keys) بروید.

- روی دکمه افزودن (+) در گوشه بالا سمت راست کلیک کنید.

- توضیحی برای کلید تأیید APN وارد کنید
- در قسمت سرویسهای کلیدی، کادر انتخاب APNها را علامت بزنید و روی ادامه کلیک کنید.

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

ایجاد شناسه برنامه
شناسه برنامه، شناسهای است که به طور منحصر به فرد یک برنامه را مشخص میکند. به طور قراردادی، این شناسه با یک دامنه معکوس نمایش داده میشود.
- به مرکز اعضای توسعهدهنده اپل بروید و وارد سیستم شوید.
- به بخش گواهینامهها، شناسهها و پروفایلها بروید.
- به شناسهها بروید.
- برای ایجاد یک شناسه برنامه جدید، روی دکمه + کلیک کنید.

- دکمه رادیویی App IDs را انتخاب کنید و روی Continue کلیک کنید.

- برنامه را انتخاب کنید و روی ادامه کلیک کنید.

- برای ایجاد شناسه برنامه جدید:
- یک نام برای شناسه برنامه خود وارد کنید.
- یک شناسه تیم وارد کنید. این مقدار باید با شناسه تیم در برگه عضویت مطابقت داشته باشد.
- در بخش پسوند شناسه برنامه ، شناسه برنامه صریح (Explicit App ID) را انتخاب کنید، سپس شناسه بسته (Bundle ID) خود را وارد کنید.

- در بخش سرویسهای برنامه ، مطمئن شوید که گزینهی اعلانهای فوری (Push Notifications) تیک خورده باشد.

- روی ادامه کلیک کنید و بررسی کنید که ورودی شما صحیح است:
- مقدار شناسه باید با مجموع مقادیر شناسه تیم و شناسه بسته مطابقت داشته باشد.
- اعلانهای فشاری باید قابل تنظیم باشند
- برای ایجاد شناسه برنامه، روی ثبت نام کلیک کنید.
ایجاد پروفایل
برای آزمایش برنامه خود در حین توسعه، به یک پروفایل برای توسعه نیاز دارید تا به دستگاههای شما اجازه دهد برنامهای را که هنوز در اپ استور منتشر نشده است، اجرا کنند.
- به مرکز اعضای توسعهدهنده اپل بروید و وارد سیستم شوید.
- به بخش گواهینامهها، شناسهها و پروفایلها بروید.
- در منوی کشویی گوشه بالا سمت چپ، اگر قبلاً انتخاب نشده است ، iOS، tvOS، watchOS را انتخاب کنید، سپس به Profiles بروید.
- برای ایجاد یک پروفایل جدید، روی دکمه + کلیک کنید.

- به عنوان نوع پروفایل تأمین، گزینه توسعه اپلیکیشن iOS را انتخاب کنید، سپس روی ادامه کلیک کنید.

- در منوی کشویی، شناسه برنامهای که میخواهید استفاده کنید را انتخاب کنید، سپس روی ادامه کلیک کنید.
- گواهی توسعه iOS مربوط به شناسه برنامهای که در مرحله قبل انتخاب کردهاید را انتخاب کنید، سپس روی ادامه کلیک کنید.
- دستگاههای iOS مورد نظر خود را برای قرار دادن در Provisioning Profile انتخاب کنید، سپس روی Continue کلیک کنید. مطمئن شوید که تمام دستگاههایی را که میخواهید برای آزمایش خود استفاده کنید، انتخاب کردهاید.
- یک نام برای این نمایه تأمین وارد کنید (مثلاً MessagingExampleProfile )، سپس روی Generate کلیک کنید.

- برای ذخیره پروفایل Provisioning در مک خود، روی دانلود کلیک کنید.

- برای نصب فایل Provisioning Profile، روی آن دوبار کلیک کنید.
۴. اضافه کردن فایربیس به پروژه iOS شما
ایجاد یک پروژه فایربیس
قبل از اینکه بتوانید Firebase را به برنامه iOS خود اضافه کنید، باید یک پروژه Firebase ایجاد کنید تا به برنامه iOS شما متصل شود. برای کسب اطلاعات بیشتر در مورد پروژههای Firebase، به بخش «درک پروژههای Firebase» مراجعه کنید.
- در کنسول Firebase، روی Add project کلیک کنید، سپس یک نام پروژه انتخاب یا وارد کنید.

اگر یک پروژه Google Cloud Platform (GCP) دارید، میتوانید پروژه را از منوی کشویی انتخاب کنید تا منابع Firebase به آن پروژه اضافه شود.
- (اختیاری) اگر در حال ایجاد یک پروژه جدید هستید، میتوانید شناسه پروژه را ویرایش کنید.
فایربیس به طور خودکار یک شناسه منحصر به فرد به پروژه فایربیس شما اختصاص میدهد. برای آشنایی با نحوه استفاده فایربیس از شناسه پروژه، به بخش «درک پروژههای فایربیس» مراجعه کنید.
- روی ادامه کلیک کنید.
- گوگل آنالیتیکس را برای پروژه خود تنظیم کنید، که به شما امکان میدهد با استفاده از هر یک از محصولات فایربیس زیر، تجربه بهینهای داشته باشید:
- فایربیس، کرشلایتیکز
- پیشبینیهای فایربیس
- پیامرسانی ابری فایربیس
- پیامرسانی درونبرنامهای فایربیس
- پیکربندی از راه دور فایربیس
- تست A/B فایربیس
وقتی از شما خواسته شد، انتخاب کنید که از یک حساب گوگل آنالیتیکس موجود استفاده کنید یا یک حساب جدید ایجاد کنید. اگر تصمیم به ایجاد یک حساب جدید دارید، محل گزارشدهی آنالیتیکس خود را انتخاب کنید، سپس تنظیمات اشتراکگذاری دادهها و شرایط گوگل آنالیتیکس را برای پروژه خود بپذیرید.


- روی ایجاد پروژه (یا اگر از یک پروژه GCP موجود استفاده میکنید، روی افزودن Firebase ) کلیک کنید.
فایربیس به طور خودکار منابع لازم برای پروژه فایربیس شما را فراهم میکند. پس از اتمام فرآیند، به صفحه نمای کلی پروژه فایربیس خود در کنسول فایربیس منتقل خواهید شد.
برنامه خود را با Firebase ثبت کنید
بعد از اینکه یک پروژه Firebase ایجاد کردید، میتوانید برنامه iOS خود را به آن اضافه کنید.
برای کسب اطلاعات بیشتر در مورد بهترین شیوهها و ملاحظات مربوط به افزودن برنامهها به یک پروژه Firebase، از جمله نحوه مدیریت چندین نوع ساخت، به بخش «درک پروژههای Firebase» مراجعه کنید.
- به کنسول فایربیس بروید.
- در مرکز صفحه نمای کلی پروژه، روی آیکون iOS کلیک کنید تا گردش کار راهاندازی شود.
اگر قبلاً برنامهای به پروژه Firebase خود اضافه کردهاید، برای نمایش گزینههای پلتفرم، روی «افزودن برنامه» کلیک کنید.

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

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

اگر چندین شناسه بسته در پروژه خود دارید، باید هر شناسه بسته را با یک برنامه ثبت شده در کنسول Firebase مرتبط کنید تا هر برنامه بتواند فایل GoogleService-Info.plist مخصوص به خود را داشته باشد.
XCode را ببندید.
اضافه کردن کیتهای توسعه نرمافزار فایربیس به برنامهتان
ما توصیه میکنیم از CocoaPods برای نصب کتابخانههای Firebase استفاده کنید. با این حال، اگر ترجیح میدهید از CocoaPods استفاده نکنید، میتوانید مستقیماً چارچوبهای SDK را ادغام کنید یا از نسخه بتای Swift Package Manager استفاده کنید.
- اگر از قبل یک Podfile ندارید، آن را ایجاد کنید. اگر از نمونه شروع سریع استفاده میکنید، پروژه Xcode و Podfile (به همراه podها) از قبل موجود هستند.
$ cd MessagingExample $ pod init
- به Podfile خود، پادهای Firebase را که میخواهید در برنامه خود استفاده کنید، اضافه کنید.
شما میتوانید هر یک از محصولات پشتیبانیشدهی فایربیس را به برنامهی iOS خود اضافه کنید.
در نمونهی شروع سریع، SDK های Google Analytics و Firebase Cloud Messaging اضافه شدهاند.
# Add the Firebase pod for Google Analytics pod 'Firebase/Analytics' # Add the pod for Firebase Cloud Messaging pod 'Firebase/Messaging'
- پادها را نصب کنید، سپس فایل
.xcworkspaceخود را باز کنید تا پروژه را در Xcode مشاهده کنید:
$ pod install
-
MessagingExample.xcworkspaceرا باز کنید و در کنسول Firebase روی Next کلیک کنید.
مقداردهی اولیه فایربیس در برنامه شما
شما باید کد مقداردهی اولیه Firebase را به برنامه خود اضافه کنید.
ماژول Firebase را وارد کنید و یک نمونه مشترک را پیکربندی کنید (در نمونه شروع سریع، ماژول Firebase از قبل وارد شده است).
- ماژول Firebase را در
UIApplicationDelegateخود وارد کنید:
AppDelegate.swift
import UIKit
import Firebase // Add this line
- یک نمونه اشتراکی FirebaseApp را پیکربندی کنید، که معمولاً در
application:didFinishLaunchingWithOptions:برنامه شما قرار دارد:
AppDelegate.swift
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
FirebaseApp.configure() // Add this line
return true
}
- در کنسول Firebase روی Next کلیک کنید.

- کیتهای توسعه نرمافزار فایربیس به برنامه شما اضافه شدهاند. برای ادامه روی ادامه کلیک کنید.

۵. پیکربندی کلاینت FCM
کلید احراز هویت APN خود را آپلود کنید
کلید احراز هویت APN خود را در Firebase آپلود کنید.
- در داخل پروژه خود در کنسول Firebase، نماد چرخ دنده را انتخاب کنید، تنظیمات پروژه را انتخاب کنید و سپس برگه Cloud Messaging را انتخاب کنید.

- در کلید احراز هویت APNs در بخش پیکربندی برنامه اپل ، روی دکمه آپلود کلیک کنید تا کلید احراز هویت توسعه یا کلید احراز هویت تولید یا هر دو را آپلود کنید. حداقل یکی از آنها لازم است.

- به محلی که کلید خود را ذخیره کردهاید بروید، آن را انتخاب کنید و روی «باز کردن» کلیک کنید. شناسه کلید را برای کلید اضافه کنید (در بخش «گواهینامهها، شناسهها و پروفایلها » در مرکز اعضای توسعهدهنده اپل موجود است) و روی « بارگذاری» کلیک کنید.

برای اعلانهای از راه دور ثبتنام کنید
چه در هنگام راهاندازی و چه در نقطه دلخواه در جریان برنامه، برنامه خود را برای اعلانهای از راه دور ثبت کنید.
در نمونهی شروع سریع، 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، ویژگی delegate مربوط به 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، ویژگی delegate مربوط به 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 آمده است):
- روی نام پروژه در ناحیه ناوبری کلیک کنید.
- روی امضا و قابلیتها کلیک کنید.
- کلیک + قابلیت .

- روی حالتهای پسزمینه دوبار کلیک کنید.
- دوباره روی +Capability کلیک کنید.
- روی اعلانهای فشاری دوبار کلیک کنید.
- در قسمت حالتهای پسزمینه، گزینهی اعلانهای از راه دور (Remote notifications) را بررسی کنید.

۶. ارسال پیام اعلان
شما میتوانید با طی کردن مراحل زیر، یک پیام آزمایشی ارسال کنید:
- برنامه را روی دستگاه هدف نصب و اجرا کنید. باید درخواست اجازه دریافت اعلانهای از راه دور را بپذیرید.
- توکن ثبت نام را در لاگ XCode دریافت کنید.

- مطمئن شوید که برنامه در پسزمینه دستگاه فعال است.
- بخش اعلانها (Notifications) را باز کنید و اعلان جدید (New notification) را انتخاب کنید.
- متن پیام را وارد کنید.

- ارسال پیام آزمایشی را انتخاب کنید.
- در فیلدی با عنوان « افزودن یک نشانه ثبت نام FCM» ، نشانه ثبت نامی را که در مرحله 2 دریافت کردهاید، وارد کنید.
- روی تست کلیک کنید.
بعد از اینکه روی Test کلیک کردید، دستگاه کلاینت مورد نظر (با برنامه در پسزمینه) باید اعلان را در مرکز اعلانها دریافت کند.
برای اطلاع از نحوهی ارسال پیام به برنامهی خود، به داشبورد گزارشدهی FCM مراجعه کنید که تعداد پیامهای ارسالی و باز شده در دستگاههای iOS و اندروید را ثبت میکند.

۷. تبریک
تبریک میگویم، شما با موفقیت یک پیام آزمایشی ارسال کردید!
توابع و پیکربندیهای بسیار بیشتری در FCM مانند اشتراک موضوعی وجود دارد.
اگر به آنها علاقه دارید ، سند رسمی توسعهدهنده را بررسی کنید.
بعدش چی؟
برخی از این آزمایشگاههای کد را بررسی کنید.