1. 程式人生 > >iOS本地推送(本地通知)

iOS本地推送(本地通知)

在iOS8之後,以前的本地推送寫法可能會出錯,接收不到推送的資訊,

如果出現以下資訊:

1 Attempting to schedule a local notification
2 with an alert but haven't received permission from the user to display alerts
3 with a sound but haven't received permission from the user to play sounds
說明在IOS8下沒有註冊,所以需要額外新增對IOS8的註冊方法,API中有下面這個方法:
// Registering UIUserNotificationSettings more than once results in previous settings being overwritten.
- (void)registerUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings NS_AVAILABLE_IOS(8_0);

這個方法是8.0之後才能使用的,所以需要判斷一下系統的版本。

第一步:註冊本地通知:

// 設定本地通知
+ (void)registerLocalNotification:(NSInteger)alertTime {
  UILocalNotification *notification = [[UILocalNotification alloc] init];
  // 設定觸發通知的時間
  NSDate *fireDate = [NSDate dateWithTimeIntervalSinceNow:alertTime];
  NSLog(@"fireDate=%@",fireDate);
  
  notification.fireDate = fireDate;
  // 時區
  notification.timeZone = [NSTimeZone defaultTimeZone];
  // 設定重複的間隔
  notification.repeatInterval = kCFCalendarUnitSecond;
  
  // 通知內容
  notification.alertBody =  @"該起床了...";
  notification.applicationIconBadgeNumber = 1;
  // 通知被觸發時播放的聲音
  notification.soundName = UILocalNotificationDefaultSoundName;
  // 通知引數
  NSDictionary *userDict = [NSDictionary dictionaryWithObject:@"開始學習iOS開發了" forKey:@"key"];
  notification.userInfo = userDict;
  
  // ios8後,需要新增這個註冊,才能得到授權
  if ([[UIApplication sharedApplication] respondsToSelector:@selector(registerUserNotificationSettings:)]) {
    UIUserNotificationType type =  UIUserNotificationTypeAlert | UIUserNotificationTypeBadge | UIUserNotificationTypeSound;
    UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:type
                                                                             categories:nil];
    [[UIApplication sharedApplication] registerUserNotificationSettings:settings];
    // 通知重複提示的單位,可以是天、周、月
    notification.repeatInterval = NSCalendarUnitDay;
  } else {
    // 通知重複提示的單位,可以是天、周、月
    notification.repeatInterval = NSDayCalendarUnit;
  }
  
  // 執行通知註冊
  [[UIApplication sharedApplication] scheduleLocalNotification:notification];
}

第二步:處理通知,這個是在appdelegate中的代理 方法回撥
// 本地通知回撥函式,當應用程式在前臺時呼叫
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification {
  NSLog(@"noti:%@",notification);
  
  // 這裡真實需要處理互動的地方
  // 獲取通知所帶的資料
  NSString *notMess = [notification.userInfo objectForKey:@"key"];
  UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"本地通知(前臺)"
                                                  message:notMess
                                                 delegate:nil
                                        cancelButtonTitle:@"OK"
                                        otherButtonTitles:nil];
  [alert show];
  
  // 更新顯示的徽章個數
  NSInteger badge = [UIApplication sharedApplication].applicationIconBadgeNumber;
  badge--;
  badge = badge >= 0 ? badge : 0;
  [UIApplication sharedApplication].applicationIconBadgeNumber = badge;
  
  // 在不需要再推送時,可以取消推送
  [HomeViewController cancelLocalNotificationWithKey:@"key"];
}

第三步:在需要的時候取消某個推送
// 取消某個本地推送通知
+ (void)cancelLocalNotificationWithKey:(NSString *)key {
  // 獲取所有本地通知陣列
  NSArray *localNotifications = [UIApplication sharedApplication].scheduledLocalNotifications;
  
  for (UILocalNotification *notification in localNotifications) {
    NSDictionary *userInfo = notification.userInfo;
    if (userInfo) {
      // 根據設定通知引數時指定的key來獲取通知引數
      NSString *info = userInfo[key];
      
      // 如果找到需要取消的通知,則取消
      if (info != nil) {
        [[UIApplication sharedApplication] cancelLocalNotification:notification];
        break;
      }
    }
  }
}


相關推薦

iOS本地本地通知

在iOS8之後,以前的本地推送寫法可能會出錯,接收不到推送的資訊, 如果出現以下資訊: 1 Attempting to schedule a local notification 2 with an

iOS訊息Java實現

首先來了解一下蘋果的訊息推送APNS(英文全稱:Apple Push Notification service) 先來看兩張蘋果對於推送的兩張解釋圖: 大概的意思就是,提供商把訊息推送至蘋果的推送伺服器,再由蘋果推送伺服器將訊息推送給手機客戶端,或者反過來手機客戶端把

android 之本地遠端

在現在的app中推送技術很普遍,推送可以提高使用者活躍度,也可以進行一些活動推送,今天就跟大家聊一下推送 推送分為遠端推送和本地推送,都可以通過推送訊息跳轉到一些應用或者活動介面,本地推送幾行程式碼就可以實現,遠端推送就需要藉助一些平臺的力量 (1)本地推送 Notifi

Android訊息廣播機制+通知

Android廣播機制使用了觀察著模式; (1) 通知 1) 獲取狀態通知欄管理 NotificationManager 是一個系統Service,所以必須通過getSystemService(NO

Spring mvc服務端消息SSE技術

javascrip tro jstl var 通信 主動 form imp title SSE技術是基於單工通信模式,只是單純的客戶端向服務端發送請求,服務端不會主動發送給客戶端。服務端采取的策略是抓住這個請求不放,等數據更新的時候才返回給客戶端,當客戶端接收到消息後,再向

HTTP/2 服務器Server Push教程HTTP/2 協議的主要目的是提高網頁性能,配置Nginx和Apache

tcp tac 面板 參考 寫入 修改 現實 多個 後端 HTTP/2 協議的主要目的是提高網頁性能。 頭信息(header)原來是直接傳輸文本,現在是壓縮後傳輸。原來是同一個 TCP 連接裏面,上一個回應(response)發送完了,服務器才能發送下一個,現在可以多個回

小程序模板消息後臺發集體通知

function 新的 pid func req int lds 形式 rsn 1.在小程序後臺配置好模板 2.其中curl需要加上一個參數設置(https發送需要) 3.項目代碼示例:其中有token過期更新的處理方法 /* * 通知最近7天小程序用戶 * param()

小程式訊息含原始碼java實現小程式,springboot實現微信訊息

最近需要開發微信和小程式的推送功能,需要用java後臺實現推送,自己本身java和小程式都做,所以就自己動手實現下小程式的模版推送功能推送。 實現思路 1 小程式獲取使用者openid,收集formid傳給java後臺 2 java推送訊息給指定小程式使用

訊息華為

關於「程序保活」的需求總是很多,以往的解決辦法也是層出不窮,但是隨著Android系統的更新,99%的方法已經無效 三方SDK喚醒(不現實) 系統白名單(不靠譜) 應用全家桶(不現實) 系統廣播喚醒(不可控) 兩個Service互相喚醒(涼了) 使用Timer

MQTT+ActiveMQ實現訊息移動端

這個小程式是我導師給我佈置的一個任務,網上教程不是很多,遇到的一些困難都是自己解決的,所以寫出來分享一下,有什麼問題大家可以留言,盡力幫大家解決。 來到解壓目錄下,進入bin目錄下的win64資料夾(如何是32位機器則進入win32),執行activemq

unity接入極光Android篇

環境:unity5.2  + eclipse + xcode8;安卓打包模式:eclipse出jar包,unity一鍵打包 提示:安卓無法做到殺掉程序後也接收推送,除非你跟手機系統運營商合作(已經和極光商務確認過),iOS是沒問題的。 (開始之前先在極光後臺建立App,流程簡單,這

APP訊息APP Push解決方案-服務端工作邏輯和實現

一、APP 推送概述: App推送訊息是我們常見的一種app訊息提醒方式。 我們的實現需要第三方的支援,實現方式是後臺通過介面將Push請求傳送至第三方,第三方實現在App所在裝置上的推送。 二、APP推送後臺處理邏輯: 在與推送平臺互動時,後臺需要向第三方傳送兩部分資訊

HTTP/2 伺服器Server Push教程

HTTP/2 協議的主要目的是提高網頁效能。頭資訊(header)原來是直接傳輸文字,現在是壓縮後傳輸。原來是同一個 TCP 連線裡面,上一個迴應(response)傳送完了,伺服器才能傳送下一個,現在可以多個迴應一起傳送。伺服器推送(server push)是 HTTP/2

swift3.0 整合極光v2.2iOS10.0最新寫法

// // AppDelegate.swift // 1120-jiguang // // Created by targetcloud on 2016/11/20. // Copyright © 2016年 targetcloud. All rights rese

spring boot 整合activemq 進行服務端訊息web頁面

最近公司的專案裡有需要服務端向web端實時推送訊息的需求,網上搜索了一番,有前端頁面通過定時任務向後臺傳送ajax請求重新整理,有使用第三方提供的訊息服務(GoEasy),前者因為會有很多請求是無用的,容易加大伺服器負荷造成宕機,後者現在收費了(免費的也只能用一

iOS開發 - ANPs通知 標簽: 通知ANPs遠程本地

control con 垃圾 pre 條件 %20 常用 建立連接 mod iOS開發 - ANPs推送通知 標簽: 推送通知ANPs遠程推送本地推送 2015-05-03 14:12 3510人閱讀 評論(0) 收藏 舉報 本文章已收錄於: iOS知識庫

iOS本地通知或者本地的使用

遠端推送基本都沒啥問題,按規範來走,證書做好給伺服器,本地載入上證書基本都是可以實現的。 本地通知就需要自己建立通知,傳送通知,比遠端多了這兩步,一般的會有幾個需要注意的地方: 1,iOS8-iOS10是一套發通知方法,10以後是一套方法; 2,通知可能不顯示,可能會覆

本地,遠端JPUSHService極光

本地推送,例:app鬧鐘,定時提醒==     /*     //iOS8以後需要先註冊本地通知,需要經過使用者的同意     if ([[UIDevice currentDevice].systemVersion doubleValue] >= 8.0) {

iOS本地與取消本地通知—UILocalNotification的使用

1.首先我們初始化一個 UISwith self.swith = [[UISwitch alloc] initWithFrame:CGRectMake(80, 80, 160, 30)]; [_swith addTarget:self action:@se

項目實戰:iOS極光集成30分鐘搞定

adg append ati 技術分享 tro markdown ocs sym xcode 推送有非常多,如個推、友盟、融雲和極光等等。在這裏就講下怎樣使用極光推送。主要內容是將官方文檔資料詳細匯總並一步一步集成到項目中,您也能夠直接去官方文檔閱