onesignal pushe.co s-3.664-0.699-5.062-2.099c-1.397-1.398-2.097-3.087-2.097-5.065s0.699-3.667,2.097-5.065c1.397-1.399,3.085-2.099,5.062-2.099 s3.664,0.699,5.062,2.099C223.888,120.556,224.587,122.244,224.587,124.223z"/>

آی او اس


توجه داشته باشید که برای استفاده از امکان دریافت Push notification و حتی تست آن نیاز است apple developer account داشته باشید.

راه‌اندازی پروژه در XCode

ایجاد پروژه در XCode و فعال‌کردن قابلیت‌های موردنیاز برای دریافت پوش نوتیفیکیشن

  • نرم‌افزار XCode را باز کرده و پروژه iOS خود را در آن ایجاد کنید.



  • فایل پروژه را انتخاب کنید. از لیست Targetها، Target اصلی برنامه و از لیست عنوان‌ها، عنوان Capabilitites را انتخاب کنید. از بین گزینه‌های موجود، Background Modes را فعال کنید و ‌Background fetch و Remote notifications را تیک بزنید.

  • گزینه Push Notifications را نیز فعال کنید.

  • از لیست عنوان‌ها، عنوان General را انتخاب کنید و مقدار فیلد Deployment Target را به نسخه ۱۰ یا نسخه‌های بعد از ۱۰ سیستم‌عامل iOS تغییر دهید. (لازم به ذکر است که پوشه از نسخه ۸ سیستم‌عامل iOS پشتیبانی می‌کند، ولی قابلیت نمایش مدیا در push notification از نسخه ۱۰ به سیستم‌عامل iOS اضافه شده است.)

افزودن سرویس notification service extension (برای نمایش عکس، فیلم و … در اعلان)

برای این‌که کاربران برنامه‌تان امکان دریافت Rich Media (عکس، فیلم و …) را داشته باشند، باید در برنامه‌تان Notification Service Extension را پیاده‌سازی کنید:

  • یک Target جدید ایجاد کنید:

  • Notification Service Extension را انتخاب کنید:

  • نام را برای Target جدید خود وارد کنید:

  • Cancel را انتخاب کنید تا Target فعلی برنامه عوض نشود.

  • البته همواره می‌توانید Target خود را با استفاده از گزینه موجود در سمت بالا و چپ Xcode تغییر دهید.

  • فایل پروژه را انتخاب کنید. از لیست Targetها، Target مربوط به Notification Service Extension و از لیست عنوان‌ها، عنوان General را انتخاب کنید و مقدار فیلد Deployment target را برابر با یا بیشتر از مقداری که برای Target اصلی برنامه وارد کردید، قرار دهید:

  • مطابق شکل یک فولدر با نامی که برای Notification Service Extension خود وارد کردید، در پروژه‌تان ایجاد می‌شود.

  • اگر زبان پروژه‌تان Swift است، محتوای فایل NotificationService.swift را مطابق زیر تغییر دهید:
import UserNotifications
import Pushe

class NotificationService: UNNotificationServiceExtension {

    var contentHandler: ((UNNotificationContent) -> Void)?
    var bestAttemptContent: UNMutableNotificationContent?

    override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) {
        self.contentHandler = contentHandler
        self.bestAttemptContent = (request.content.mutableCopy() as? UNMutableNotificationContent)

        if let bestAttemptContent = self.bestAttemptContent {
            Pushe.shared.didReceiveNotificationExtensionRequest(mutableContent: bestAttemptContent, contentHandler: contentHandler)
        }
    }

    override func serviceExtensionTimeWillExpire() {
        if let contentHandler = contentHandler, let bestAttemptContent =  bestAttemptContent {
            contentHandler(bestAttemptContent)
        }
    }
}

در این مرحله طبیعی‌ست که خطای No such module Pushe را دریافت کنید، چون هنوز کتابخانه پوشه را نصب نکرده‌اید. در مراحل بعد نحوه نصب پوشه توضیح داده خواهد شد.

  • اگر زبان پروژه‌تان Objective-C است، محتوای فایل NotificationService.m را مطابق زیر تغییر دهید:
#import "NotificationService.h"
#import <Pushe/Pushe.h>

@interface NotificationService ()

@property (nonatomic, strong) void (^contentHandler)(UNNotificationContent *contentToDeliver);
@property (nonatomic, strong) UNMutableNotificationContent *bestAttemptContent;

@end

@implementation NotificationService

- (void)didReceiveNotificationRequest:(UNNotificationRequest *)request withContentHandler:(void (^)(UNNotificationContent * _Nonnull))contentHandler { 
    self.contentHandler = contentHandler;
    self.bestAttemptContent = [request.content mutableCopy];

    [PusheApp didReceiveNotificationExtensionRequest:self.receivedRequest
                      withMutableNotificationContent:self.bestAttemptContent];

    self.contentHandler(self.bestAttemptContent);
}

- (void)serviceExtensionTimeWillExpire {
    self.contentHandler(self.bestAttemptContent);
}

@end

فایربیس

ثبت برنامه در فایربیس و دریافت Sender ID و Server key

  • به صفحه کنسول فایربیس بروید. اگر تاکنون پروژه‌ای را که میخواهید برنامه‌تان را به آن اضافه کنید، نساخته‌اید، یک پروژه جدید بسازید:

  • برنامه iOS جدیدی را به پروژه خود اضافه کنید:

  • Bundle Identifier متناظر با Target اصلی برنامه خود در Xcode را وارد کنید:

  • فایل GoogleService-Info.plist را دانلود کنید.

  • فایل دانلود شده در قسمت قبل را در فولدر مربوط به پروژه اصلی خود در Xcode بیندازید(drag&drop):

  • فایل موردنظر به فایل‌های پروژه شما اضافه خواهد شد:

  • در این مرحله فقط کافیست next را بزنید:

  • در این مرحله نیز فقط next را بزنید:

  • برروی Skip this step کلیک کنید:

  • در قسمت تنظیمات برای برنامه‌ای که ایجاد کرده‌اید، عنوان Cloud Messaging را انتخاب کنید. Server key و Sender ID را در کنسول پوشه برای ساخت برنامه جدید باید وارد کنید.

  • در این قسمت باید APNs Authentication Key خود را آپلود کنید.

نحوه ایجاد APNs Authentication Key

  • وارد اکانت Apple Developer خود شوید و Certificates, Identifiers & Profiles را انتخاب کنید:

  • بر روی Keys کلیک کنید. اگر از قبل کلیدی برای APNs نساخته‌اید، بر روی دکمه + کلیک کنید:

  • گزینه Apple Push Notificions service را تیک بزنید و برروی Continue کلیک کنید:

  • برروی Register کلیک کنید:

  • فایل موردنظر را دانلود کنید و Done را بزنید. دقت کنید که این فایل فقط یک‌بار قابلیت دانلود شدن را دارد.

  • این فایل را در کنسول firebase به عنوان APNs Authentication key برای برنامه خود آپلود کنید.

نصب و راه‌اندازی کتابخانه پوشه

برای نصب پوشه میتوانید از Cocoapods استفاده کنید. در Podfile، برای Target اصلی و همچنین Notification Service Extension پوشه را اضافه کنید: ‍‍‍‍

دقت کنید که برای نمایش عکس، ویدیو و … (Rich Media) حتما باید Notification Service extension را که در بالا توضیح داده شده را در پروژه‌تان اضافه کرده باشید.


target 'PusheDemo' do
    use_frameworks!
        pod 'Pushe'

    target 'PusheDemoTests' do
        inherit! :search_paths
        # Pods for testing
    end

    target 'PusheDemoUITests' do
        inherit! :search_paths
        # Pods for testing
    end

end

target 'DemoNotificationServiceExtension' do
    use_frameworks!
        pod 'Pushe'
end
  • در صورتی‌که از زبان Swift استفاده می‌کنید، محتوای فایل AppDelegate.swift را براساس کد زیر تغییر دهید: (AppId خود را که از کنسول پوشه دریافت کرده‌اید، به عنوان آرگومان به Pushe.shared.start پاس بدهید.)
import UIKit
import Pushe

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        Pushe.shared.pusheDelegate = yourInstanceImplementingPusheDelegate   // this line is optional
        Pushe.shared.start(pusheAppId: "enter your appId from pushe console here")

        return true
    }
}

اگر مایل باشید، می‌توانید پروتکل pusheDelegate را پیاده‌سازی کنید تا بتوانید callbackهایی را در هنگام دریافت push notification، کلیک کاربر و … اجرا کنید.

  • در صورتی‌که از زبان Objective-C استفاده می‌کنید، محتوای فایل AppDelegate.m را براساس کد زیر تغییر دهید:
#import "AppDelegate.h"
#import <Pushe/Pushe.h>

@interface AppDelegate () <UNUserNotificationCenterDelegate>

@end

@implementation AppDelegate 

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    [PusheApp start: @"Put your appId from Pushe console here"];
    [PusheApp requestAuthentication];

    UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
    UNAuthorizationOptions allNotificationTypes = (UNAuthorizationOptionAlert | UNAuthorizationOptionSound | UNAuthorizationOptionBadge);
    center.delegate = self;
    [center requestAuthorizationWithOptions:allNotificationTypes completionHandler:^(BOOL granted, NSError * _Nullable error) {
        if (granted) {
            dispatch_async(dispatch_get_main_queue(), ^{
                [[UIApplication sharedApplication] registerForRemoteNotifications];
            });
        }
    }];

    return YES;
}

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
}

- (void)userNotificationCenter:(UNUserNotificationCenter *)center openSettingsForNotification:(UNNotification *)notification {
}

- (void)userNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(UNNotificationPresentationOptions))completionHandler {
    completionHandler((UNNotificationPresentationOptionAlert | UNNotificationPresentationOptionSound));    // use your options
}

- (void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)(void))completionHandler {
    completionHandler();
}

@end

همیشه در کنارتان هستیم

در اولین فرصت با ایمیل به شما پاسخ خواهیم داد.

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