IOS - 前臺時的推送彈窗效果

 

做者:Pikacodephp

原文連接:http://www.jianshu.com/p/67864e1c2085前端

本文獲做者受權轉載ios

 

或許不少童鞋還不知道,在 iOS 中收到推送通知時,若是 App 處於前臺運行的狀況下,推送的頂部彈窗是不會彈出來的。git

 

然而就是有不少**的產品經理都會提出相似這樣的**需求:github

 

那就是在 App 處於前臺時同樣要彈出推送的窗口,並且還要能點擊,能跳轉到指定頁面,甚至這一需求還涉及到了產品的核心功能。app

 

今天 Pikacode 就跟你們分享一下本身寫的小插件,僅僅只需 一、2 行代碼,便可搞定這一需求。iphone

 

Github: https://github.com/Yasashi/EBForeNotificationfetch

 

EBForeNotificationui

 

在 App 處於前臺時展現跟系統徹底同樣的推送彈窗和聲音。獲取推送內容,而且處理點擊事件。.net

 

支持 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

 

其餘系統聲音 id 能夠在這裏查詢到 iOS Predefined sounds

 

備用地址 AudioServices sounds

 

監聽並處理點擊事件

 

添加 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

}

}

相關文章
相關標籤/搜索