實現 iOS 前臺時的推送彈窗效果
或許很多童鞋還不知道,在 iOS 中收到推送通知時,如果 App 處於前臺執行的情況下,推送的頂部彈窗是不會彈出來的。
然而就是有很多**的產品經理都會提出類似這樣的**需求:
那就是在 App 處於前臺時一樣要彈出推送的視窗,而且還要能點選,能跳轉到指定頁面,甚至這一需求還涉及到了產品的核心功能。
今天 Pikacode 就跟大家分享一下自己寫的小外掛,僅僅只需 1、2 行程式碼,即可搞定這一需求。
EBForeNotification
在 App 處於前臺時展示跟系統完全一樣的推送彈窗和聲音。獲取推送內容,並且處理點選事件。
支援 iOS 7~10 beta,支援模擬器和真機執行。
效果
實際效果如下:
-
跟系統推送彈窗 UI 效果完全相同
-
可以自動獲取 App 的應用名稱,應用圖示
-
彈窗時會自動隱藏系統狀態列、收起後自動顯示系統狀態列
-
自帶推送聲音
-
時間及下方收拉條的顏色跟當前頁面的背景顏色相同
-
自帶點選事件,點選可獲取推送內容,進行相應頁面跳轉
-
自帶上滑手勢,快速收起
-
自動在處於最前端的 controller 上進行彈窗
安裝
1. 下載並在 Xcode 中 拖拽拷貝 EBForeNotification 資料夾至 Xcode 工程。
2. targets --> Build Settings --> 搜 other link --> 新增 -ObjC。
本地彈窗
在任意方法內呼叫以下任 1 行程式碼即可彈窗
#import "EBForeNotification.h"
{...
//普通彈窗(系統聲音)
[EBForeNotification handleRemoteNotification:@{@"aps":@{@"alert":@"展示內容"}} soundID:1312];
//普通彈窗(指定聲音檔案)
[EBForeNotification handleRemoteNotification:@{@"aps":@{@"alert":@"展示內容"}} customSound:@"my_sound.wav"];
//帶自定義引數的彈窗(系統聲音)
[EBForeNotification handleRemoteNotification:@{@"aps":@{@"alert":@"展示內容"}, @"key1":@"value1", @"key2":@"value2"} soundID:1312];
//普通彈窗(指定聲音檔案)
[EBForeNotification handleRemoteNotification:@{@"aps":@{@"alert":@"展示內容"}, @"key1":@"value1", @"key2":@"value2"} customSound:@"my_sound.wav"];
...}
接收遠端/本地推送後彈窗
接收遠端/本地推送後,自動在前臺展示推送彈窗及聲音。
在 AppDelegate.m 中新增程式碼
//AppDelegate.m
#import "EBForeNotification.h"
//ios7 before
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {
...
//系統聲音彈窗
[EBForeNotification handleRemoteNotification:userInfo soundID:1312];
//指定聲音檔案彈窗
[EBForeNotification handleRemoteNotification:userInfo customSound:@"my_sound.wav"];
...
}
//ios7 later
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
...
//系統聲音彈窗
[EBForeNotification handleRemoteNotification:userInfo soundID:1312];
//指定聲音檔案彈窗
[EBForeNotification handleRemoteNotification:userInfo customSound:@"my_sound.wav"];
...
completionHandler(UIBackgroundFetchResultNewData);
}
soundID 引數
iOS 系統自帶的聲音 id,系統級的推送服務預設使用的是三全音,id = 1312
監聽並處理點選事件
新增 Observer 監聽 EBBannerViewDidClick,獲取推送內容,通過推送時自定義的欄位處理自己邏輯,如:跳轉到對應頁面等。
接收到的推送內容類似以下:
{
"aps":
{
"alert":"推送內容",
"sound":"sound",
"badge":"3"
},
"key1":"跳轉頁面1" //自定義此欄位以跳轉到相應頁面
}
新增 Observer 獲取自定義的欄位,並處理:
#import "EBForeNotification.h"
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(eBBannerViewDidClick:) name:EBBannerViewDidClick object:nil];
-(void)eBBannerViewDidClick:(NSNotification*)noti{
if(noti[@"key1" == @"跳轉頁面1"]){
//跳轉到頁面1
}
}