作者:Pikacode

原文链接:http://www.jianshu.com/p/67864e1c2085

本文获作者授权转载

或许很多童鞋还不知道,在 iOS 中收到推送通知时,如果 App 处于前台运行的情况下,推送的顶部弹窗是不会弹出来的。

然而就是有很多**的产品经理都会提出类似这样的**需求:

那就是在 App 处于前台时一样要弹出推送的窗口,而且还要能点击,能跳转到指定页面,甚至这一需求还涉及到了产品的核心功能。

今天 Pikacode 就跟大家分享一下自己写的小插件,仅仅只需 1、2 行代码,即可搞定这一需求。

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

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

其他系统声音 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

}

}

IOS - 前台时的推送弹窗效果的更多相关文章

  1. 实现iOS前台时的推送弹窗效果

    原文链接 或许很多童鞋还不知道,在 iOS 中收到推送通知时,如果 App 处于前台运行的情况下,推送的顶部弹窗是不会弹出来的. 然而就是有很多**的产品经理都会提出类似这样的**需求:那就是在 Ap ...

  2. 李洪强iOS之集成极光推送一iOS SDK概述

    李洪强iOS之集成极光推送一iOS SDK概述 JPush iOS 从上图可以看出,JPush iOS Push 包括 2 个部分,APNs 推送(代理),与 JPush 应用内消息. 红色部分是 A ...

  3. 基于APNs最新HTTP/2接口实现iOS的高性能消息推送(服务端篇)

    1.前言 本文要分享的消息推送指的是当iOS端APP被关闭或者处于后台时,还能收到消息/信息/指令的能力. 这种在APP处于后台或关闭情况下的消息推送能力,通常在以下场景下非常有用: 1)IM即时通讯 ...

  4. IOS个人帐号推送证书创建

    (IOS个人帐号推送证书制作所有步骤: 可以直接将产品推送证书和开发者推送证书一起制作到一个Identifier帐号下) 一. 首先需要创建一个id:有推送功能的(App ID Suffix)只有它才 ...

  5. (转)在SAE使用Apple Push Notification Service服务开发iOS应用, 实现消息推送

    在SAE使用Apple Push Notification Service服务开发iOS应用, 实现消息推送 From: http://saeapns.sinaapp.com/doc.html 1,在 ...

  6. 李洪强iOS之集成极光推送二iOS 证书 设置指南

    李洪强iOS之集成极光推送二iOS 证书 设置指南 创建应用程序ID 登陆 iOS Dev Center 选择进入iOS Provisioning Portal. 在 iOS Provisioning ...

  7. ios手机app消息推送

    h5+app项目,推送平台 " 个推 " 首先在manifest.json配置文件中点击模块权限配置,勾选push消息推送配置如图1-1 第二部在manifest.json配置文件 ...

  8. iOS开发之远程推送

    说到远程推送,应该用的也挺多的,今天就基于SEA的云推送服务,做一个推送的小demo,来了解一下iOS中的远程推送是怎么一回事儿,首先你得有苹果的开发者账号,好咸蛋也差不多了,主要内容走起. 一.准备 ...

  9. 李洪强iOS之集成极光推送三iOS集成指南

    李洪强iOS之集成极光推送三iOS集成指南 SDK说明 适用版本 本文匹配的 SDK版本:r2.1.5 以后.查看最近更新了解最新的SDK更新情况.使用Xcode 6及以上版本可以使用新版Push S ...

随机推荐

  1. Part01、sqlalchemy 使用

    一.ORM         连表               一对多               1.创建表,主动指定外键约束.               2.操作.                 ...

  2. 在Windows下使用Dev-C++开发基于pthread.h的多线程程序【转】

    在Windows下使用Dev-C++开发基于pthread.h的多线程程序[转]     在Windows下使用Dev-C++开发基于pthread.h的多线程程序   文章分类:C++编程     ...

  3. PHP实现excel导出

    首先去下载PHPExcel类,地址http://phpexcel.codeplex.com/ 方法如下第一步引入这个扩展类 Vendor('PHPExcel'); 第二部就是方法了,下面简单的实现方法 ...

  4. 处理函数和数组声明[条款17]---《C++必知必会》

    指向函数的指针声明和指向数组的指针声明容易混淆,原因在于函数和数组修饰符的优先级比指针修饰符的优先级高,因此通常需要使用圆括号. int *f1( );//一个返回值为 int* 的函数 int ( ...

  5. 一个App项目设计开发完整流程

    作为一个PHP程序猿想转行APP开发可不是件容易的事情,话说隔行如隔山,这隔着一层语言也是多东西需要学习啊,一直对APP开发很感兴趣,最近请教了几个做移动开发的朋友,看了很多的资料,决定把自己学到的东 ...

  6. (译)Windows Azure:移动后端开发的主要更新

    Windows Azure:移动后端开发的主要更新 这周我们给Windows Azure释出了一些很棒的更新,让云上的移动应用开发明显的简单了.这 些新功能包括: 移动服务:定制API支持移动服务:G ...

  7. 714. Best Time to Buy and Sell Stock with Transaction Fee

    问题 给定一个数组,第i个元素表示第i天股票的价格,可执行多次"买一次卖一次",每次执行完(卖出后)需要小费,求最大利润 Input: prices = [1, 3, 2, 8, ...

  8. linux在文件中包含某个关键词的指定行插入内容

    1. 在包含某个关键字的行上面插入一行文字 sed -i '/wangzai/i\doubi' 1.txt 把内容doubi插入到包含wangzai关键字的上一行 2. 在包含某个关键字的行下面插入一 ...

  9. [日志]logback告警

    开发过程中,难免会有发生错误或异常的时候,有些是需要及时通知到相关开发人员的.logback可以通过简单的配置达到邮件告警的目的. 一.错误告警 如下配置,所有Error级别的log发送邮件告警给re ...

  10. CSS Text(文本)

    CSS Text(文本) 一.文本颜色 color 颜色属性被用来设置文字的颜色. 颜色是通过CSS最经常的指定: 十六进制值 - 如: #FF0000 一个RGB值 - 如: RGB(255,0,0 ...