之前有写过利用Python自己写一个推送服务器, 今天说下如果集成友盟的推送服务

在这之前我们需要做一些准备动作

#1. 注册一个App ID

#2. Enable Push NotificationSerivice, 并创建和下载开发/发布推送证书

#3. 安装推送证书, 然后把推送证书导出为p12文件

#4. 注册友盟账号

#5. 创建一个推送应用, 并上传推送证书的p12文件和填写密码

#6. 下载SDK, 添加到项目中

在AppDelegatez

  1. #import "UMessage.h"

添加一个属性

  1. @property (nonatomic, strong) NSDictionary *userInfo;

添加协议:

  1. @interface AppDelegate ()<UNUserNotificationCenterDelegate>

设置友盟AppKey

  1. static NSString *UMessageAppKey = @"";

创建一个配置友盟推送的方法

  1. - (void)configureUMessageWithLaunchOptions:(NSDictionary *)launchOptions {
  2.  
  3. //设置AppKey & LaunchOptions
  4. [UMessage startWithAppkey:UMessageAppKey launchOptions:launchOptions];
  5.  
  6. //初始化
  7. [UMessage registerForRemoteNotifications];
  8.  
  9. //开启log
  10. [UMessage setLogEnabled:YES];
  11.  
  12. //检查是否为iOS 10以上版本
  13. if ([[[UIDevice currentDevice] systemVersion] floatValue] < 10.0) {
  14.  
  15. } else {
  16.  
  17. //如果是iOS 10以上版本则必须执行以下操作
  18. UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
  19.  
  20. center.delegate = self;
  21.  
  22. UNAuthorizationOptions types10 = \
  23. UNAuthorizationOptionBadge | UNAuthorizationOptionAlert |UNAuthorizationOptionSound;
  24.  
  25. [center requestAuthorizationWithOptions:types10
  26. completionHandler:^(BOOL granted, NSError * _Nullable error) {
  27.  
  28. if (granted) {
  29. //点击允许
  30. //这里可以添加一些自己的逻辑
  31.  
  32. } else {
  33. //点击不允许
  34. //这里可以添加一些自己的逻辑
  35.  
  36. }
  37.  
  38. }];
  39. }
  40. }

协议方法:

  1. - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {
  2. //关闭友盟自带的弹出框
  3. [UMessage setAutoAlert:NO];
  4.  
  5. [UMessage didReceiveRemoteNotification:userInfo];
  6.  
  7. self.userInfo = userInfo;
  8. //定制自定的的弹出框
  9. if([UIApplication sharedApplication].applicationState == UIApplicationStateActive)
  10. {
  11. UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"温馨提示"
  12. message:self.userInfo[@"aps"][@"alert"]
  13. delegate:self
  14. cancelButtonTitle:@"确定"
  15. otherButtonTitles:nil];
  16. [alertView show];
  17.  
  18. }
  19. }
  20.  
  21. //iOS10新增:处理前台收到通知的代理方法
  22. - (void)userNotificationCenter:(UNUserNotificationCenter *)center
  23. willPresentNotification:(UNNotification *)notification
  24. withCompletionHandler:(void (^)(UNNotificationPresentationOptions))completionHandler{
  25.  
  26. NSDictionary * userInfo = notification.request.content.userInfo;
  27. if([notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) {
  28.  
  29. //应用处于前台时的远程推送接受
  30. //关闭友盟自带的弹出框
  31. [UMessage setAutoAlert:NO];
  32. //必须加这句代码
  33. [UMessage didReceiveRemoteNotification:userInfo];
  34.  
  35. }else{
  36.  
  37. //应用处于前台时的本地推送接受
  38. }
  39.  
  40. //当应用处于前台时提示设置,需要哪个可以设置哪一个
  41. completionHandler(UNNotificationPresentationOptionSound |
  42. UNNotificationPresentationOptionBadge |
  43. UNNotificationPresentationOptionAlert);
  44. }
  45.  
  46. //iOS10新增:处理后台点击通知的代理方法
  47. -(void)userNotificationCenter:(UNUserNotificationCenter *)center
  48. didReceiveNotificationResponse:(UNNotificationResponse *)response
  49. withCompletionHandler:(void (^)())completionHandler{
  50.  
  51. NSDictionary * userInfo = response.notification.request.content.userInfo;
  52. if([response.notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) {
  53.  
  54. //应用处于后台时的远程推送接受
  55. //必须加这句代码
  56. [UMessage didReceiveRemoteNotification:userInfo];
  57.  
  58. }else{
  59.  
  60. //应用处于后台时的本地推送接受
  61. }
  62. }
  63.  
  64. - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
  65.  
  66. [UMessage sendClickReportForRemoteNotification:self.userInfo];
  67. }

最后是在ApplicationDidFinishLaunch中调用配置友盟推送的方法即可

  1. - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
  2.  
  3. //配置友盟推送
  4. [self configureUMessageWithLaunchOptions:launchOptions];
  5.  
  6. return YES;
  7. }

iOS集成友盟推送的更多相关文章

  1. iOS app 集成友盟推送问题

    之前做app推送主要是集成友盟SDK,在程序获取deviceToken时,老是提示如下错误: Error Domain=NSCocoaErrorDomain Code=3000 "未找到应用 ...

  2. java 集成友盟推送

    原文:https://blog.csdn.net/Athena072213/article/details/83414743 最近应公司业务需求需要完善友盟推送,认真看了官方文档后其实很简单,只需要细 ...

  3. AppDelegate减负之常用三方封装 - 友盟推送篇

    之前分享过集成友盟推送的方法, 需要的朋友可以查看一下链接: http://www.cnblogs.com/zhouxihi/p/6533058.html 一般开发中我们比较多使用的三方有友盟推送, ...

  4. 使用极光/友盟推送,APP进程杀死后为什么收不到推送(转)

    为什么会存在这样的 问题,刚开始的时候我也搞不清楚,之前用极光的时候杀死程序后也会收到推送,但最近重新再去集成时就完全不好使了,这我就纳闷了,虽然Google在高版本上的android上面不建议线程守 ...

  5. 极光推送和友盟推送,ios端和安卓端的后端调试设置

    我是最后端的,这两天搞了一个app项目,前端安卓使用友盟很方便,调试比较顺利,然后ios就遇到各种问题了,证书.发送成功推送不成功,测试时用的TestMode(),ios上架之后就必须用product ...

  6. iOS 友盟推送,应用内推送启动图推送闪动黑屏,插屏推送方法报错

    以前都是用的极光推送,应公司需求要求使用友盟推送,为了以后是有分享都适用,,, 友盟推送文档,下载demo 感觉比极光用着要简单顺手 一切就绪后,开始发送消息测试,,,,,搞了半天没有发过来消息 原来 ...

  7. 友盟推送里面的Alias怎么用?可以理解成账号吗?

    友盟推送里面的Alias怎么用?可以理解成账号吗? 我们的App有自己的账号体系的,想在每次用户登陆的时候,给用户发一个欢迎消息. 看了一下友盟推送,里面有一个概念叫做Alias(别名),但是官方文档 ...

  8. 友盟推送SDK集成测试、常见问题以及注意事项总结

    最近为了解决公司APP在一些手机出现的推送问题重新集成了最新版的友盟推送SDK,花费了几天时间终于把集成和测试工作完成,最终在华为,Nexus,三星,小米,HTC,魅族等10多部手机上测试并达到了预想 ...

  9. PHP友盟推送消息踩坑及处理

    公司的客户端的推送选用友盟推送,但是友盟的官方文档描述很少,对新手很不友好,所以特写此采坑纪录,废话不多说上代码. 公司业务只涉及单播和广播.所以只提供了单播和广播,业务拓展的话会补充其余部分. 消息 ...

随机推荐

  1. Cracking the code interview

    推荐一本书<Cracking the code interview> Now in the 5th edition, Cracking the Coding Interview gives ...

  2. WInform 创建一个简单的WPF应用

    (一)创建一个简单的WPF应用 首先,在这里我要说明的是:这里的例子,都是通过控制台程序来创建WPF应用,而非使用现成的WPF模版.因为WPF模版封装了创建WPF应用所需要的各种基本元素,并不利于我们 ...

  3. 对于python的__name__="__main__"的含义的理解

    学习python的时候经常会看到python 中__name__ = \'__main__\' 这样的代码,可能很多新手一开始学习的时候都比较疑惑,python 中__name__ = '__main ...

  4. Redis系列三(redis配置文件分析)

    在第一篇文章中有提到过redis.conf这个文件,这个文件就是redis-server的具体配置了.要使用好redis,一定要搞清楚redis的配置文件,这样才能最大的发挥redis的性能. # B ...

  5. arm交叉编译器科普

    交叉编译工具链的命名规则为:arch [-vendor] [-os] [-(gnu)eabi] arch - 体系架构,如ARM,MIPS vendor - 工具链提供商 os - 目标操作系统 ea ...

  6. python 基础学习小记

    Python应该是写起来最舒服的动态语言了,一下是一些读书笔记,本文中安装的是3.0,有几点需要注意: print "xxx" 要换成 print("xxx") ...

  7. Quartz_理解2

    一.核心概念   Quartz的原理不是很复杂,只要搞明白几个概念,然后知道如何去启动和关闭一个调度程序即可.   1.Job 表示一个工作,要执行的具体内容.此接口中只有一个方法 void exec ...

  8. 获取SQL中某一列的类型及精度

    SELECT @type=t.name, @prec=c.prec FROM sysobjects o        JOIN syscolumns c on o.id=c.id        JOI ...

  9. 浅谈时间复杂度- 算法衡量标准Big O

    写在前面: 今天有一场考试,考到了Big-O的知识点,考到了一道原题,原题的答案我记住了,但实际题目有一些改动导致答案有所改动,为此作者决定重新整理一下复杂度相关知识点 Efficiency and ...

  10. python中文编码问题深入分析(一):字符编码基础

    背景:笔者作为一名刚接触python语言的新手,在实际的项目中,遇到过一些中文编码问题,初次遇到这些问题的时候,刚开始显得有些手足无措,也不知从何查起.常言道:有问题,找度娘!当我打开www.baid ...