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

}

}

相关文章
相关标签/搜索