iOS開發,本地推送的使用
個人連結

微信公眾號.jpg
功能部分:</br>

本地推送分析圖
一.iOS8本地推送註冊
//建立本地通知 - (void)requestAuthor { if ([UIDevice currentDevice].systemVersion.floatValue >= 8.0) { // 設定通知的型別可以為彈窗提示,聲音提示,應用圖示數字提示 UIUserNotificationSettings *setting = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert categories:nil]; // 授權通知 [[UIApplication sharedApplication] registerUserNotificationSettings:setting]; } }
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { //本地推送 [self requestAuthor]; return YES; }
二.假設在ViewController中新增touchesBegan方法,具體UILocalNotification的基本屬性請往下看!
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event { // 1.建立通知 UILocalNotification *localNotification = [[UILocalNotification alloc] init]; // 2.設定通知的必選引數 // 設定通知顯示的內容 localNotification.alertBody = @"本地通知測試"; // 設定通知的傳送時間,單位秒 localNotification.fireDate = [NSDate dateWithTimeIntervalSinceNow:10]; //解鎖滑動時的事件 localNotification.alertAction = @"別磨蹭了!"; //收到通知時App icon的角標 localNotification.applicationIconBadgeNumber = 1; //推送是帶的聲音提醒,設定預設的欄位為UILocalNotificationDefaultSoundName localNotification.soundName = UILocalNotificationDefaultSoundName; // 3.傳送通知(:pig_nose: : 根據專案需要使用) // 方式一: 根據通知的傳送時間(fireDate)傳送通知 [[UIApplication sharedApplication] scheduleLocalNotification:localNotification]; // 方式二: 立即傳送通知 // [[UIApplication sharedApplication] presentLocalNotificationNow:localNotification]; }
注意:UILocalNotification的基本屬性
fireDate:啟動時間 timeZone:啟動時間參考的時區 repeatInterval:重複推送時間(NSCalendarUnit型別),0代表不重複 repeatCalendar:重複推送時間(NSCalendar型別) alertBody:通知內容 alertAction:解鎖滑動時的事件 alertLaunchImage:啟動圖片,設定此欄位點選通知時會顯示該圖片 alertTitle:通知標題,適用iOS8.2之後 applicationIconBadgeNumber:收到通知時App icon的角標 soundName:推送是帶的聲音提醒,設定預設的欄位為UILocalNotificationDefaultSoundName userInfo:傳送通知時附加的內容 category:此屬性和註冊通知型別時有關聯,(有興趣的同學自己瞭解,不詳細敘述)適用iOS8.0之後 region:帶有定位的推送相關屬性,具體使用見下面【帶有定位的本地推送】適用iOS8.0之後 regionTriggersOnce:帶有定位的推送相關屬性,具體使用見下面【帶有定位的本地推送】適用iOS8.0之後
三.注意一點. 當再次進入app中,通知欄的通知需要不顯示,並且app的角標也要沒有,所以需要在appDelegate設定一個屬性.
- (void)applicationWillEnterForeground:(UIApplication *)application { //設定應用程式圖片右上角的數字(如果想要取消右上角的數字, 直接把這個引數值為0) [[UIApplication sharedApplication] setApplicationIconBadgeNumber:0]; }
四.執行效果圖
- 注意: 執行程式後,點選ViewController空白區域之後,必須推到後臺才能看到通知的執行效果.
- 首次執行會彈出讓使用者選擇授權!!!

首次執行會彈出讓使用者選擇授權

在桌面頂部彈出效果
五.程式碼下載
https://github.com/NSLog-YuHaitao/Localpush
分析appDelegate(作為總結,可以不看!)
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { #pragma mark --NSLog(@"\n ===> 程式開始 !"); return YES; }
- (void)applicationWillResignActive:(UIApplication *)application { #pragma mark -->NSLog(@"\n ===> 程式掛起 !");比如:當有電話進來或者鎖屏,這時你的應用程會掛起,在這時,UIApplicationDelegate委託會收到通知,呼叫 applicationWillResignActive 方法,你可以重寫這個方法,做掛起前的工作,比如關閉網路,儲存資料。 }
- (void)applicationDidEnterBackground:(UIApplication *)application { #pragma mark --> NSLog(@"\n ===> 程式進入後臺 !"); }
- (void)applicationWillEnterForeground:(UIApplication *)application { #pragma mark --> NSLog(@"\n ===> 程式進入前臺 !"); }
- (void)applicationDidBecomeActive:(UIApplication *)application { #pragma mark -->NSLog(@"\n ===> 程式重新啟用 !"); 應用程式在啟動時,在呼叫了 applicationDidFinishLaunching 方法之後也會呼叫 applicationDidBecomeActive 方法,所以你要確保你的程式碼能夠分清復原與啟動,避免出現邏輯上的bug。(大白話就是說:只要啟動app就會走此方法)。 }
- (void)applicationWillTerminate:(UIApplication *)application { #pragma mark --> 當用戶按下按鈕,或者關機,程式都會被終止。當一個程式將要正常終止時會呼叫 applicationWillTerminate 方法。但是如果長主按鈕強制退出,則不會呼叫該方法。這個方法該執行剩下的清理工作,比如所有的連線都能正常關閉,並在程式退出前執行任何其他的必要的工作. }
宣告
- 所有文章出自 Kenny Hito 的部落格 !
- 未經本人允許不得轉載, 轉載請標明來源與作者, 謝謝合作!