IOS----友盟推送详解
本人开发的开发者技术变现资源聚集地,大家支持下,下面是网址
https://www.baiydu.com
这两天好好的研究了下推送这功能,关于它我将分成两部分来讲,一、IOS手机端,二、Servlet服务端,今天先讲下IOS端
一、感受
下面讲下我对推送这个功能在IOS下的感受,这个算是我做了服务端的功能和手机端的功能后的一个体会吧, 这功能在IOS上是多少给我带来了点鸡肋的感觉,首先很多时候收到推送有延时现象,还有如果连续推送两条消息给一个Iphone手机,如果遇到延时这个问题,那么第一条推送就会被覆盖。(这里我用的是友盟的推送,这个推送暂时感觉还不错,大多数推送能及时收到,至少我暂时测试是如此,所以我这里也选择了它,以前遇到过两小时后才到的第三方推送.....甚至根本就收不到。),再一个,即使延迟这个问题解决了,关于推送消息的管理也是一个麻烦事,如果想好好管理,我觉得数据库里面首先得创建一张对应的通知管理表,今天在IOS上面我是认真的测试了这功能,当应用从后台移除后,接受到的推送消息,是不会进入通知代理的,这一点是个麻烦事,(也就是这一点,让我想到了数据库中创建对应的表。),应为用户不可能一直把手机拿手上,即使拿手上,就看那通知在手机上的短暂停留时间,也可能导致用户没看明白后台推送的什么,而且这时候应用处于被移出后台的状态,由于这个原因,接受到的通知就不能进入通知代理,所以导致这条通知无法保存到本地。所以说创建一张表我觉得是必要的。 但我发现很多应用都没这样做。 如果这样做了,对推送来说是一个很大的优化,至少在IOS上是,因为IOS暂时无法完全避免接受不到通知这个揪心的问题,而且我觉得发送的消息内容都不重要了。感觉可以把通知的语音修改一下,这一点才重要.....改成这样:你有新消息请在通知表中去查看....
二、下载友盟推送SDK集成到应用
这里注册我就不说了,下面我主要以截图的方式讲解。
1、下面的截图点击"SDK下载及文档"
2、上一步执行后,进入新页面,找到消息推送。
3、上一步执行后,进入新页面,点击SDK下载。
4、将下载的SDK推送包COPY到项目中。
三、导出推送证书上传友盟,创建应用
1、友盟的推送只需要导出P12证书即可,不需要生成pem证书,这里需要导出两个证书,一个是开发者证书,一个是产品证书,下面截图。
你如果还不知道怎么制作Ios推送证书,可以去 http://www.cnblogs.com/xiaoliao/p/4928873.html 查看,讲得非常详细。
2、下面是友盟创建IOS应用的步骤截图
首先进入帐号管理后台,可以从首页右上角点击 我的产品进入。
进入后点击页面左下角的 +增加新应用
进入创建应用界面,创建应用,这里由于我是演示给各位看,所以随便填的。
上面步骤执行完毕后,拖动浏览器滚动条就会看到下面的截图
下面的截图我要说下,当你执行完上面截图的步骤之后,你就给选择的应用创建了推送的功能,然后你在看这个应用的就是下面截图的
的样式,下面这个截图是可以随意修改的,即使你上一步传错了证书,或则其他操作有误,创建完毕后也可以修改。下面是截图,这里
要说一个重点:就是服务器IP的增加,如果这里不增加服务器IP,WEB服务端是无法将通知推送到你手机的。这里的IP就是Servlt架设到服务器的IP,我这里由于
是在本机上做的servlet接口推送,所以就是我本机的IP了,如果架设到服务器之后,这个IP就是要修改成服务器的IP。
四、IOS上实现推送功能的代码
1、只贴通知部分代码,Appdelegate.m里面授权。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
//asdf;lajksdfl;asdfl; /*友盟推送*/
[UMessage startWithAppkey:@"568f2ccbe0f55a3e05?" launchOptions:launchOptions]; #if __IPHONE_OS_VERSION_MAX_ALLOWED >= _IPHONE80_
if(UMSYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"8.0"))
{
UIMutableUserNotificationAction *action1 = [[UIMutableUserNotificationAction alloc] init];
action1.identifier = @"action1_identifier";
action1.title=@"Accept";
action1.activationMode = UIUserNotificationActivationModeForeground;//当点击的时候启动程序 UIMutableUserNotificationAction *action2 = [[UIMutableUserNotificationAction alloc] init]; //第二按钮
action2.identifier = @"action2_identifier";
action2.title=@"Reject";
action2.activationMode = UIUserNotificationActivationModeBackground;//当点击的时候不启动程序,在后台处理
action2.authenticationRequired = YES;//需要解锁才能处理,如果action.activationMode = UIUserNotificationActivationModeForeground;则这个属性被忽略;
action2.destructive = YES; UIMutableUserNotificationCategory *categorys = [[UIMutableUserNotificationCategory alloc] init];
categorys.identifier = @"category1";//这组动作的唯一标示
[categorys setActions:@[action1,action2] forContext:(UIUserNotificationActionContextDefault)]; UIUserNotificationSettings *userSettings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeBadge|UIUserNotificationTypeSound|UIUserNotificationTypeAlert
categories:[NSSet setWithObject:categorys]];
[UMessage registerRemoteNotificationAndUserNotificationSettings:userSettings]; } else{
//register remoteNotification types (iOS 8.0以下)
[UMessage registerForRemoteNotificationTypes:UIRemoteNotificationTypeBadge
|UIRemoteNotificationTypeSound
|UIRemoteNotificationTypeAlert];
}
#else //register remoteNotification types (iOS 8.0以下)
[UMessage registerForRemoteNotificationTypes:UIRemoteNotificationTypeBadge
|UIRemoteNotificationTypeSound
|UIRemoteNotificationTypeAlert]; #endif
//for log
[UMessage setLogEnabled:YES];
}
2、注册设备Token
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
{
//下面这个token是将获取的nsdata转换成String,应为指定推送时我们需要将这个传给服务端。
NSString *token=[NSString stringWithFormat:@"%@",[[[[deviceToken description] stringByReplacingOccurrencesOfString: @"<" withString: @""] stringByReplacingOccurrencesOfString: @">" withString: @""] stringByReplacingOccurrencesOfString: @" " withString: @""]];
//注册token
[UMessage registerDeviceToken:deviceToken];
}
3、接收推送
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{ //接受服务端推送通知传来的值,全部在userinfo里面。
[UMessage didReceiveRemoteNotification:userInfo];
[UIApplication sharedApplication].applicationIconBadgeNumber=5; if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0)
{
UIUserNotificationType myType = UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeSound;
UIUserNotificationSettings *mySetting = [UIUserNotificationSettings settingsForTypes:myType categories:nil];
[[UIApplication sharedApplication] registerUserNotificationSettings:mySetting]; }else{ UIRemoteNotificationType myType = UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeSound;
[[UIApplication sharedApplication] registerForRemoteNotificationTypes:myType];
} }
四、管理后台测试,手动发送推送。(截图)
下面的截图要说一下,4的一步,增加测试设备,由于我这里使用的是开发者模式,所以这里我们需要将
测试是被的TOKEN增加到进去,获取TOKEN的方法就是上一个步骤的( 2、注册设备Token,的第一句代码)
明天会增加服务端servlet的实现。
本人创业做的一款androidApp, 下载量已经有2000多万,各种当前热门的网络手机奖励红包全部集成,另外还有热门电影和淘宝高额优惠券!很适合各类型的用户。
IOS----友盟推送详解的更多相关文章
- iOS 友盟推送,应用内推送启动图推送闪动黑屏,插屏推送方法报错
以前都是用的极光推送,应公司需求要求使用友盟推送,为了以后是有分享都适用,,, 友盟推送文档,下载demo 感觉比极光用着要简单顺手 一切就绪后,开始发送消息测试,,,,,搞了半天没有发过来消息 原来 ...
- iOS友盟推送测试模式添加手机设备报红解决如下
设备描述红色一般是没有往友盟发日志,或者appkey漏掉了.先检查是否正确的填写了推送的appkey,统计的方法为MobClick startWithAppkey:推送的方法为UMessage sta ...
- 极光推送和友盟推送,ios端和安卓端的后端调试设置
我是最后端的,这两天搞了一个app项目,前端安卓使用友盟很方便,调试比较顺利,然后ios就遇到各种问题了,证书.发送成功推送不成功,测试时用的TestMode(),ios上架之后就必须用product ...
- iOS集成友盟推送
之前有写过利用Python自己写一个推送服务器, 今天说下如果集成友盟的推送服务 在这之前我们需要做一些准备动作 #1. 注册一个App ID #2. Enable Push Notification ...
- iOS app 集成友盟推送问题
之前做app推送主要是集成友盟SDK,在程序获取deviceToken时,老是提示如下错误: Error Domain=NSCocoaErrorDomain Code=3000 "未找到应用 ...
- AppDelegate减负之常用三方封装 - 友盟推送篇
之前分享过集成友盟推送的方法, 需要的朋友可以查看一下链接: http://www.cnblogs.com/zhouxihi/p/6533058.html 一般开发中我们比较多使用的三方有友盟推送, ...
- java 集成友盟推送
原文:https://blog.csdn.net/Athena072213/article/details/83414743 最近应公司业务需求需要完善友盟推送,认真看了官方文档后其实很简单,只需要细 ...
- 友盟推送SDK集成测试、常见问题以及注意事项总结
最近为了解决公司APP在一些手机出现的推送问题重新集成了最新版的友盟推送SDK,花费了几天时间终于把集成和测试工作完成,最终在华为,Nexus,三星,小米,HTC,魅族等10多部手机上测试并达到了预想 ...
- PHP友盟推送消息踩坑及处理
公司的客户端的推送选用友盟推送,但是友盟的官方文档描述很少,对新手很不友好,所以特写此采坑纪录,废话不多说上代码. 公司业务只涉及单播和广播.所以只提供了单播和广播,业务拓展的话会补充其余部分. 消息 ...
随机推荐
- 移动端基于HTML模板和JSON数据的JavaScript交互
写本文之前,我正在做一个基于Tab页的订单中心: 每点击一个TAB标签,会请求对应状态的订单列表.之前的项目,我会在js里使用 + 连接符连接多个html内容: var html = ''; htm ...
- Zabbix监控系统深度实践
Zabbix监控系统深度实践(企业级分布式系统自动化运维必选利器,大规模Zabbix集群实战经验技巧总结,由浅入深全面讲解配置.设计.案例和内部原理) 姚仁捷 著 ISBN 978-7-121-24 ...
- JavaScript函数后面加不加括号的区别
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- jquery的html,text,val
.html()用为读取和修改元素的HTML标签 .text()用来读取或修改元素的纯文本内容 .val()用来读取或修改表单元素的value值. 这三个方法功能上的对比 .html(),.text() ...
- KnockoutJS 3.X API 第五章 高级应用(5) 使用预处理扩展Knockout绑定语法
注意:这是一种高级技术,通常仅在创建可重用绑定或扩展语法的库时使用. 这不是你通常需要做的时候使用Knockout构建应用程序. 从Knockout 3.0开始,开发人员可以通过提供在绑定过程中重写D ...
- Callable、Future、RunnableFuture、FutureTask的原理及应用
1. Callable.Future.RunnableFuture.FutureTask的继承关系 在多线程编程中,我们一般通过一个实现了Runnable接口的对象来创建一个线程,这个线程在内部会执行 ...
- Zookeeper-Zookeeper的配置
前面两篇文章介绍了Zookeeper是什么和可以干什么,那么接下来我们就实际的接触一下Zookeeper这个东西,看看具体如何使用,有个大体的感受,后面再描述某些地方的时候也能在大脑中有具体的印象.本 ...
- Redis应用场景-转载
1. MySql+Memcached架构的问题 实际MySQL是适合进行海量数据存储的,通过Memcached将热点数据加载到cache,加速访问,很多公司都曾经使用过这样的架构,但随着业务数据量的 ...
- 联想Y50耳机插入耳机孔后没有声音解决办法
症状:博主本子Y50,前阵子关机时,提示win10要下载更新并安装,开机后发现将耳机插入耳机孔后死活听不到声音(笔记本自带的音响有声音).期间怀疑过耳机坏了的问题,检查过耳机在手机上能正常播放声音.最 ...
- 各种排序算法的分析及java实现
排序一直以来都是让我很头疼的事,以前上<数据结构>打酱油去了,整个学期下来才勉强能写出个冒泡排序.由于下半年要准备工作了,也知道排序算法的重要性(据说是面试必问的知识点),所以又花了点时间 ...