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

جلسه 25 ام آموزش iOS: نوتیفیکیشن Local Notification چیست


قبل از این که وارد مباحث اصلی شویم ، اجازه دهید ، ابتدا کمی در مورد تاریخچه صحبت کنیم.

در iOS 3 ، اپل ، سرویس:

Push Notification Service (APNS)

را جهت پشتیبانی از چند وظیفه گی در سیستم عامل موبایل خود ، معرفی نمود. در آن زمان ، با توجه به ماهیت iOS ، تنها یک اپلیکیشن مجاز بود که در پیش زمینه (foreground) ، اجرا شود. Push notification ، بازی را تغییر داد ، و به اپلیکیشن ها اجازه داد تا به روز رسانی ها را دریافت کنند ، حتی اگر به طور فعال ، در حال اجرا نباشند. هنگامی که یک اعلان (notification)  وارد اپ شود ، iOS ، اعلان را در فرم هشدارها یا صداها، در بالای صفحه نمایش ، نمایش می دهد و این به عهده کاربر است که تصمیم بگیرد ، آیا برنامه را راه اندازی کند یا خیر.

سرویس Push notification ، یک راه مؤثر برای پشتیبانی از چند وظیفه گی (multitasking) را فراهم نمود. عمل گرفتن اعلان توسط اپ ، فقط زمانی کار می کند که دستگاه به اینترنت متصل باشد. علاوه بر این ، باید برخی از برنامه های سرور را جهت برقرار تعامل با APNS ، توسعه دهیم. با توجه به این که ، در حال توسعه یک اپ To-Do هستیم ، اپ ، در یک زمان خاص ، به کاربران اطلاع می دهد ، که یک مورد را انجام دهند (To-Do). برای پوش (push) کردن چنین اعلانی ، باید یک برنامه سرور بسازیم که با APNS ، صحبت کند و آن را در جایی میزبانی کند. این کار برای اکثر توسعه دهندگان ، به ویژه برای افرادی که تجربه برنامه نویسی سمت سرور را ندارند ، کار بسیار پیچیده ای است.

از زمان انتشار iOS 4 ، اپل یک نوع جدیدی از notification را تحت عنوان Local Notification ، معرفی کرد. این نوع نوتیفیکیشن ، باعث می شود که پوش کردن اعلان ها بسیار ساده تر شود. نیازی به برنامه نویسی سمت سرور ، نداریم. دیگر اتصال به اینترنت ، لازم نیست. می توانیم اعلان را با استفاده از یک API ساده ، زمانبندی نموده و در یک زمان مناسب ، اعلان ها را شلیک (fired up) کنیم.

بسیار خوب! همین مقدار برای تاریخچه و background ، کافی هست. بیایید سراغ پیاده سازی و ساخت یک اپ ساده To-Do با استفاده از Local Notification برویم.

اپ To-Do با Notification ها

برای نشان دادن کاربرد local notification ، یک اپ ساده To-Do ، با هم خواهیم ساخت. این اپ ، به کاربران اجازه می دهد ، لیستی از آیتم هایی را که قرار است انجام دهند (To-Do) در اپ وارد کنند ، و اپ به کاربران در مورد انجام هر آیتم ، یادآوری خواهد کرد.

 

ایجاد پروژه Xcode و طراحی UI

بسیار خوب! بیایید شروع کنیم. ابتدا ، Xcode را راه اندازی می کنیم و یک پروژه جدید را با استفاده از Single View Template ، ایجاد می کنیم. نام پروژه را ToDoApp  (یا هر چیزی که شما ترجیح می دهید) قرار می دهیم. در Storyboard ، رابط کاربری مشابه تصویر زیر ، طراحی می کنیم.

تمرکز این آموزش ، بر روی پیاده سازی local notification (اعلان محلی)  است. از این رو ، جهت صرفه جویی در زمان موردنیاز برای انجام تنظیمات پروژه و طراحی رابط کاربری ، می توانید تمپلت پروژه را از اینجا download this project template دانلوده نموده و کار را با آن شروع کنید.

نکته: اگر هنوز درکی در مورد table view و نحوه عملکرد navigation bar ، ندارید ، جلسه های آموزشی مربوط به آن مطالب را مطالعه نمایید.

Local Notification در یک نگاه

به طور کلی، برای راه اندازی یک اعلان محلی (Local notification) ، تنها چیزی که نیاز داریم فقط چند خط کد است:

UILocalNotification* localNotification = [[UILocalNotificationalloc] init]; 
localNotification.fireDate = [NSDate dateWithTimeIntervalSinceNow:60];
localNotification.alertBody = @"Your alert message";
localNotification.timeZone = [NSTimeZone defaultTimeZone];
[[UIApplication sharedApplication] scheduleLocalNotification:localNotification]; 

 

هنگام ایجاد یک اعلان محلی ، باید تعیین کنیم که سیستم چه زمانی اعلان را ارسال نماید. برای این منظور از  خصیصه fireDate استفاده می کنیم. به صورت اختیاری ، می توانیم محدوده زمانی را تعیین نماییم. اعلان ، می تواند به صورت یک پیام هشدار نمایش داده شود ، که با استفاده از خصیصه “alertBody” ، معین شده است. هنگامی که نمونه UILocalNotification را پیکربندی می کنیم ، با استفاده از متد scheduleLocalNotification: ، از کلاس UIApplicationsharedApplication ، اعلان را زمانبندی می کنیم.

بیایید به بخش پیاده سازی برگردیم. ابتدا ، فایل “AddToDoViewController.m” را جهت انجام زمانبندی اعلان ، پیاده سازی خواهیم کرد. View مربوط به “Add To-Do Item” ، به کاریر اجازه می دهد که یک آیتم to-do ، را اضافه نموده و زمان یادآوری را با استفاده از یک date picker ، تنظیم نماید. هنگامی که به کلید “save” ، ضربه زده می شود ، متد “save” از AddToDoViewController ، فرخوانی خواهد شد. کد زیر را به متد “save” ، اضافه می کنیم:

    [self.itemText resignFirstResponder];
    
    // Get the current date
    NSDate *pickerDate = [self.datePicker date];
    
    // Schedule the notification
    UILocalNotification* localNotification = [[UILocalNotification alloc] init];
    localNotification.fireDate = pickerDate;
    localNotification.alertBody = self.itemText.text;
    localNotification.alertAction = @"Show me the item";
    localNotification.timeZone = [NSTimeZone defaultTimeZone];
    localNotification.applicationIconBadgeNumber = [[UIApplication sharedApplication] applicationIconBadgeNumber] + 1;
    
    [[UIApplication sharedApplication] scheduleLocalNotification:localNotification];
    
    // Request to reload table view data
    [[NSNotificationCenter defaultCenter] postNotificationName:@"reloadData" object:self];
 
    // Dismiss the view controller
    [self dismissViewControllerAnimated:YES completion:nil];

 

کد بالا ، بسیار ساده است. ابتدا ، صفحه کلید on-screen را مخفی می کنیم و تاریخ پیش تنظیم شده (preset) را از date picker ، برمی داریم. در ادامه ، اعلان محلی را با تاریخی که از  date picker ، بازیابی کرده ایم ، ایجاد می کنیم. هم چنین ، بدنه پیام هشدار را با استفاده از متن آیتم to-do تنظیم می کنیم. در نهایت ، شماره آیکون badge موجود را به 1 ، افزایش می دهیم. با پیکربندی هر آیتم ، متد “scheduleLocalNotification:” را اجرا می کنیم تا زمانبندی اعلان محلی را انجام کنیم.

قبل از این که متد را خاتمه دهیم ، ToDoListViewController را برای بازنویسی داده های جدول ، notify می کنیم.

طراحی لیستی از Local Notification

در صفحه اصلی اپ ، ما لیستی از اعلان های محلی را که در table view زمانبندی شده اند ، نمایش می دهیم. بازیابی اعلان محلی زمانبندی شده جاری ، کار بسیار ساده ای است. به سادگی ، فراخوانی زیر را انجام داده و یک آرایه Local Notification ، می سازیم:


[[UIApplication sharedApplication] scheduledLocalNotifications];

فایل “ToDoListViewController.m” را انتخاب کرده و کد آن را به صورت زیر تغییر می دهیم:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    // Return the number of sections.
    return 1;
}
 
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    // Return the number of rows in the section.
    return [[[UIApplication sharedApplication] scheduledLocalNotifications] count];
}
 
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
    
    // Get list of local notifications
    NSArray *localNotifications = [[UIApplication sharedApplication] scheduledLocalNotifications];
    UILocalNotification *localNotification = [localNotifications objectAtIndex:indexPath.row];
    
    // Display notification info
    [cell.textLabel setText:localNotification.alertBody];
    [cell.detailTextLabel setText:[localNotification.fireDate description]];
    
    return cell;
}

 

وارد جزئیات کد فوق نمی شویم. اگر درک خوبی از  نحوه پیاده سازی UITableView کسب نموده باشید ، کدهای فوق برای شما بسیار آشنا خواهند بود.

بسیار خوب! بیایید اپ را کامپایل و اجرا نماییم. روی کلید “+” ، در navigation bar ضربه زده و یک آیتم To-Do اضافه می کنیم. تاریخ را به یک تاریخ پیش رو ، تنظیم می کنیم ، کلید “save” را جهت ذخیره سازی زمانبندی اعلان ، ضربه می زنیم. فوراً به table view برمی گردیم ، اعلانی را که اخیراً اضافه کرده ایم ، آنجا پیدا خواهیم کرد. به صفحه اصلی بر می گردیم. چند دقیقه صبر می کنیم (بسته به زمانبندی که تنظیم کرده ایم) ، باید بنر اعلان (notification banner) را ببینیم. یا اگر صفحه قفل شده است ، یک هشدار اعلان (notification alert) خواهیم دید.

مدیریت کردن Notification ها

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

وقتی که یک اعلان ، شلیک می شود (fired up) ، اپ ما ممکن است در حالت foreground یا background ، در حال اجرا باشد. در بدترین حالت ، ممکن است برنامه اصلا در حال اجرا نباشد. ما باید چنین شرایطی را مدیریت کنیم. اجازه دهید ، مرحله به مرحله در مورد آنها ، صحبت کنیم.

اپلیکیشن در حال اجرا نیست

زمانی که اپ ، در حال اجرا نیست ، کاربران اعلان ها را به شیوه های زیر و بسته به تنظیمات notification ، مشاهده می کنند:

  • نمایش یک هشدار یا بنر.
  • نشانه گذاری با آیکون برنامه.
  • پخش یک صدا.

با ضربه زدن روی کلید action مربوط به اعلان ، کاربران ، اپ را راه اندازی خواهند کرد. در چنین موردی ، متد application:didFinishLaunchingWithOptions:  که مربوط به نماینده اپلیکیشن است ، فراخوانی می شود.

متد را مطابق کد زیر تغییر می دهیم:

در کد بالا ، از دیکشنری launchOptions استفاده می کنیم. این دیکشنری بررسی می کند که آیا حاوی یک شیء  local notification است یا خیر. برای ساده نگه داشتن مطالب آموزشی ، ما فقط ، شماره آیکون badge را در زمانی که یک Local notification  وجود دارد ، تنظیم مجدد (reset) می کنیم.

 

اپلیکیشن در حال اجرا در foreground است

اگر اپ در حال اجرا باشد ، در حالی که اعلان به آن ، تحویل داده شده است ، در این صورت ، پیام هشدار در صفحه نمایش ظاهر نمی شود. اپلیکیشن به طور خودکار ، نماینده خود را در متد application:didReceiveLocalNotification: ، فراخوانی می کند.

در فایل AppDelegate.m ، متد زیر را اضافه می کنیم:

- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
{
    UIApplicationState state = [application applicationState];
    if (state == UIApplicationStateActive) {
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Reminder"
                                                        message:notification.alertBody
                                                       delegate:self cancelButtonTitle:@"OK"
                                                        otherButtonTitles:nil];
        [alert show];
    }
    
    // Request to reload table view data
    [[NSNotificationCenter defaultCenter] postNotificationName:@"reloadData" object:self];
 
    // Set icon badge number to zero
    application.applicationIconBadgeNumber = 0;
}

 

همان طور که در بخش زیر ، بحث خواهیم کرد ، متد “”didReceiveLocalNotification: در زمانی که اپلیکیشن در حال اجرا در background می باشد ، نیز فراخوانی می شود. در اینجا ، ابتدا ، حالت اپلیکیشن را تعیین می کنیم و فقط یک پیام هشدار در زمان اجرای اپلیکیشن در حالت foreground ، نمایش می دهیم. هم چنین ، به view controller اطلاع می دهیم که جدول تاریخ را مجدداً لود کرده و شماره آیکون badge اپلیکیشن را ، تنظیم مجدد کند.

 

یک هشدار در حالی که اپلیکیشن در حال اجرا است ، نمایش داده می شود.

اپلیکیشن در حال اجرا در background است

این حالت وقتی پیش می آید  ، که پیش از این که  اپ راه اندازی شود ، کاربر به اپ دیگری سوئیچ می نماید. هنگامی که اعلان ، شلیک می شود ، کاربران معمولاً یک بنر هشدار در بالای صفحه ، مشاهده می کنند. زمانی که بر روی بنر ضربه شده شود ، اپ ، به پیش زمینه (foreground) آورده می شود. همانند مواردی که اپ در foreground اجرا می شود ، در این حالت نیز اپلیکیشن به طور خودکار ، نماینده خود را در متد application:didReceiveLocalNotification: فراخوانی می کند.

 

خلاصه

در این آموزش ، ایده های اصلی در مورد Local notification را به شما دادیم. Local notification ، بسیار شبیه به remote notification می باشد. اگر در حال توسعه یک اپلیکیشن هستید ، سعی کنید چندین قابلیت Local notification را به اپ خود اضافه نمایید. یک اپلیکیشن معمولی از Local notification ، به کاربران یادآوری می نماید که اپ خود را بررسی نمایند. اپ خود را طوری طراحی کنید که یک Local notification ، در زمانی که کاربر اپ خود را برای سه روز راه اندازی نکرده است ، نمایش داده و هشدار دهد. این یکی از تکنیک هایی است که غالباً در بسیاری از اپ ها استفاده می شود.

فصلِ: 3 , تعداد قسمت ها: 179 , سطح: صفر تا صد

این فصل در یک نگاه:

در این دوره آموزشی ، برنامه نویسی اندروید و ios را با استفاده از زامارین خواهیم آموخت. همچنین به صورت کاملا پروژه محور ، اپلیکیشن فروشگاهی مشابه دیجی کالا را پیاده سازی خواهیم کرد. در انته…
فصلِ: 5 , تعداد قسمت ها: 221 , سطح: صفر تا صد
موضوعات: آموزش IOS

این فصل در یک نگاه:

در این فصل:-نمایش notification به کاربر زمانی که اتفاقاتی از قبیل لایک کردن پست و ... میافتد(این مبحث مبحثی مهم بوده و ج…

  توضیحات کلی دوره: با سلام خوش اومدین به حرفه ای ترین دوره ی Swift ابتدای کار ممکن است سوالی برای شما پیش آید: -من نیازی به ساخت اپلیکیشن اجتماعی ندارم چرا باید این دوره را ببینم؟ ج…
فصلِ: 7 , تعداد قسمت ها: 159 , سطح: صفر تا صد
موضوعات: آموزش IOS

این فصل در یک نگاه:

اپل نویس حرفه ای شوید... با این پکیج کسب درآمد میلیونی کنید....   در این پکیج به نکات ریز و درشت زیادی پرداختیم که خیلی خیلی میتونه به شما کمک کنه که تبدیل به برنامه نویس حرفه ای شوید... …
فصلِ: 12 , تعداد قسمت ها: 126 , سطح: صفر تا صد
موضوعات: آموزش IOS

این فصل در یک نگاه:

فصل 16 فصل آخرمون هست و میایم توی این فصل یه سری مباحث کوچیکی که جامونده و کارهای نهایی برای انتشار برنامه توی مایکت های…

با سلام نکته:هیچ نیازی به mac و یا iphone نیست... نکته:هیچ نیازی به بلد بودن برنامه نویسی از قبل نیست... مباحثی که توی این دوره مرور میکنیم میتونه ما رو از سطح صفر برنامه نویسی ios به صد …
فصلِ: 6 , تعداد قسمت ها: 194 , سطح: صفر تا صد

این فصل در یک نگاه:

در این فصل آپدیت های مربوط به دوره را قرار میدهیم…

با سلام و خسته نباشد خدمت کلیک سایتی های عزیز در ادامه با توضیحات مختصری درمورد دوره ی react native با ما همراه باشید: React Native چیست؟ قطعا یکی از آرزوهای برنامه نویسان این میباشد که ب…
فصلِ: 5 , تعداد قسمت ها: 51 , سطح: صفر تا صد

این فصل در یک نگاه:

اموزش پرداخت درون برنامه ای بازار در یونیتی-اموزش خرید سکه در بازی-اموزش خرید مصرفی و غیر مصرفی…

توضیحات کلی مجموعه: آموزش مقدماتی تا پیشرفته یونیتی(ساخت بازی توپ چرخنده-اموزش بازی دوبعدی-اموزش بازی سه بعدی اول شخص شوتر-اموزش بازی سه بعدی رالی (ماشین سواری))   سرفصلهای دوره: نصب ی…
فصلِ: 2 , تعداد قسمت ها: 68 , سطح: صفر تا صد

این فصل در یک نگاه:

آموزش ساخت یک فروشگاه کوچک-آموزش کار با bottom navigation -آموزش کار با تب بار-آموزش کار با scrollview - آموزش کار با ان…

توضیحات کلی مجموعه: آموزش دوره فلاتر از پایه تا پیشرفته(این دوره به دوره متخصص فلاتر تغییر پیدا کرد) درسال های گذشته تعدا زیادی فریمورک معرفی شد که هرکدام تجربه خاص خودش رو داشت،اما فلاتر …
فصلِ: 5 , تعداد قسمت ها: 25 , سطح: صفر تا صد

این فصل در یک نگاه:

فصل پنجم…

توضیحات کلی مجموعه: درباره گیت: لذت پیش بردن پروژه های برنامه نویسی خود را با بهترین ورژن کنترل سیستم جهان تجربه کنید کامل ترین دوره ی آموزشی گیت و گیت هاب به همراه مثال های کاربردی گی…

تولید شده توسط کلیک سایت

پشتیبانی آنلاین
آماده پاسخگویی هستیم
انتخاب تصویر جهت ارسال:
در حال ضبط صدا

(جهت توقف و یا لغو ضبط از دکمه های زیر استفاده کنید)

توقف و ارسال :
لغو ضبط
در حال حاضر تمامی کارشناسان آفلاین هستند. همواره می توانید با شماره تلگرام / واتساپ 09010005000 به صورت آنلاین با ما در ارتباط باشید. جهت ورود به واتساپ کلیک کنید
0 پیام جدید
پشتیبان در حال تایپ ...
ارسال تصویر ضبط صدا
0 کارشناسان آنلاین می باشند
این گفت و گو توسط پشتیبان به اتمام رسید