iOS极光推送集成

文章已移到新的博客:http://www.henishuo.com/ios-jpush/

稍稍研究了一下极光推送,其实是非常简单的,不过这个过程也出现了一些问题。

对于应用在前台时,需要额外处理一下。

关于极光推送,由于在iOS8之后,有了新的API,因此极光也给我们提供了适配的API。

下面我就把对极光推送相关API的封装提取出来,希望对大家有帮助,同时也当是总结。

下面是对极光推送而封装的一个工具类:

//
//  HYBJPushHelper.h
//  JPushDemo
//
//  Created by 黄仪标 on 14/11/20.
//  Copyright (c) 2014年 黄仪标. All rights reserved.
//

#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>

/*!
 * @brief 极光推送相关API封装
 * @author huangyibiao
 */
@interface HYBJPushHelper : NSObject

// 在应用启动的时候调用
+ (void)setupWithOptions:(NSDictionary *)launchOptions;

// 在appdelegate注册设备处调用
+ (void)registerDeviceToken:(NSData *)deviceToken;

// ios7以后,才有completion,否则传nil
+ (void)handleRemoteNotification:(NSDictionary *)userInfo completion:(void (^)(UIBackgroundFetchResult))completion;

// 显示本地通知在最前面
+ (void)showLocalNotificationAtFront:(UILocalNotification *)notification;

@end

//
//  HYBJPushHelper.m
//  JPushDemo
//
//  Created by 黄仪标 on 14/11/20.
//  Copyright (c) 2014年 黄仪标. All rights reserved.
//

#import "HYBJPushHelper.h"
#import "APService.h"

@implementation HYBJPushHelper

+ (void)setupWithOptions:(NSDictionary *)launchOptions {
  // Required
#if __IPHONE_OS_VERSION_MAX_ALLOWED > __IPHONE_7_1
  // ios8之后可以自定义category
  if ([[UIDevice currentDevice].systemVersion floatValue] >= 8.0) {
    // 可以添加自定义categories
    [APService registerForRemoteNotificationTypes:(UIUserNotificationTypeBadge |
                                                   UIUserNotificationTypeSound |
                                                   UIUserNotificationTypeAlert)
                                       categories:nil];
  } else {
#if __IPHONE_OS_VERSION_MAX_ALLOWED < __IPHONE_8_0
    // ios8之前 categories 必须为nil
    [APService registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge |
                                                   UIRemoteNotificationTypeSound |
                                                   UIRemoteNotificationTypeAlert)
                                       categories:nil];
#endif
  }
#else
  // categories 必须为nil
  [APService registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge |
                                                 UIRemoteNotificationTypeSound |
                                                 UIRemoteNotificationTypeAlert)
                                     categories:nil];
#endif

  // Required
  [APService setupWithOption:launchOptions];
  return;
}

+ (void)registerDeviceToken:(NSData *)deviceToken {
  [APService registerDeviceToken:deviceToken];
  return;
}

+ (void)handleRemoteNotification:(NSDictionary *)userInfo completion:(void (^)(UIBackgroundFetchResult))completion {
  [APService handleRemoteNotification:userInfo];

  if (completion) {
    completion(UIBackgroundFetchResultNewData);
  }
  return;
}

+ (void)showLocalNotificationAtFront:(UILocalNotification *)notification {
  [APService showLocalNotificationAtFront:notification identifierKey:nil];
  return;
}

@end

下面就是测试一个推送功能了:

//
//  AppDelegate.m
//  JPushDemo
//
//  Created by 黄仪标 on 14/11/20.
//  Copyright (c) 2014年 黄仪标. All rights reserved.
//

#import "AppDelegate.h"
#import "JPushHelper/HYBJPushHelper.h"

@interface AppDelegate ()

@end

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
  self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
  // Override point for customization after application launch.

  [HYBJPushHelper setupWithOptions:launchOptions];

  self.window.backgroundColor = [UIColor whiteColor];
  [self.window makeKeyAndVisible];
  return YES;
}

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
  [HYBJPushHelper registerDeviceToken:deviceToken];
  return;
}

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {
  [HYBJPushHelper handleRemoteNotification:userInfo completion:nil];
  return;
}

#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_7_0
// ios7.0以后才有此功能
- (void)application:(UIApplication *)application didReceiveRemoteNotification
                   :(NSDictionary *)userInfo fetchCompletionHandler
                   :(void (^)(UIBackgroundFetchResult))completionHandler {
  [HYBJPushHelper handleRemoteNotification:userInfo completion:completionHandler];

  // 应用正处理前台状态下,不会收到推送消息,因此在此处需要额外处理一下
  if (application.applicationState == UIApplicationStateActive) {
   UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"收到推送消息"
                                                   message:userInfo[@"aps"][@"alert"]
                                                  delegate:nil
                                         cancelButtonTitle:@"取消"
                                         otherButtonTitles:@"确定", nil];
    [alert show];
  }
  return;
}
#endif

- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification {
  [HYBJPushHelper showLocalNotificationAtFront:notification];
  return;
}

- (void)application:(UIApplication *)app didFailToRegisterForRemoteNotificationsWithError:(NSError *)err {
  NSLog(@"Error in registration. Error: %@", err);
}

- (void)applicationDidBecomeActive:(UIApplication *)application {
  [application setApplicationIconBadgeNumber:0];
  return;
}

@end

真机运行,然后到官网去发一个通知,就可以收到了!

Good luck!

时间: 2024-11-17 14:47:15

iOS极光推送集成的相关文章

iOS 极光推送 我是按照文档写的

问题描述 iOS 极光推送 我是按照文档写的 2015-05-19 12:23:45.412 HJXiaoProject[441:89570] You've implemented -[ application:didReceiveRemoteNotification:fetchCompletionHandler:], but you still need to add "remote-notification" to the list of your supported UIBack

android-Android集成极光推送后 如何保存富媒体推送的消息

问题描述 Android集成极光推送后 如何保存富媒体推送的消息 Android集成极光推送后,如何保存富媒体推送的消息, Android集成极光推送后 如何保存富媒体推送的消息 解决方案 android集成推送和消息响应极光推送 接收到推送消息后处理方法 解决方案二: http://blog.csdn.net/wwj_748/article/details/41867467

thinkphp 写APP接口集成极光推送的例子

最近用Thinkphp写了个App接口用到第三方推送功能,本文用的第三方推送工具是极光推送,其他的推送不一一介绍. 第一步:下载PHPSDK 并到官网上注册应用将app_key .master_secret 放到文件中 下载地址:https://www.jpush.cn/common/downloads/resource/1460966988359 第二步:将解压后的文件 src->JPush中的文件及文件夹复制到ORG->Push中(文件夹需要自己创建)或者放到vender中 第三步:在公共

Thinkphp开发--集成极光推送

先说说为啥选用极光推送作为第三方的推送服务. 首先我所了解的推送产品有信鸽.个推.极光,之前用到过个推,感觉还不错,只是代码没有极光简洁,信鸽是腾讯旗下的产品,出于对Tencent的不喜欢,就没有考虑过,其次目前公司之前用过极光,ios和安卓这边对极光比较熟悉,所以就决定用极光推送了. 这里项目后台用的是php搭建的,选用的是thinkphp3.2作为框架,极光选用的版本号为3.4.3,特此说明一下,需要软件包的小伙伴可以在评论留言,不说废话了,下面上代码.一切以自生逻辑为依据,这里只是展示我的

JPush(极光推送)实战总结

关于JPush 极光推送是国内的服务厂商提供的一站式push服务(同时支持iOS.android),后面也加入了即时通讯的能力供app使用.致力于打造简单.可靠.价格有竞争力的服务(简单功能全免费,高级版才收费),让应用开发商可以聚焦业务开发,push相关的技术实现全部通过极光推送来解决,仅需调用极光推送的api即可.正因为如此,开发者小伙伴们对其的评价相当不错.笔者的app新增了从服务器往移动客户端下发简单消息的需求,多方权衡下,我们准备尝试jpush的服务来解决问题(这里仅介绍iOS端的集成

iOS自定义推送消息提示框_IOS

看到标题你可能会觉得奇怪 推送消息提示框不是系统自己弹出来的吗? 为什么还要自己自定义呢?  因为项目需求是这样的:最近需要做 远程推送通知 和一个客服系统 包括店铺客服和官方客服两个模块 如果有新的消息推送的时候 如果用户当前不在客服界面的时候  要求无论是在app前台 还是app退到后台 顶部都要弹出系统的那种消息提示框 这样的需求 我们就只能自定义一个在app内 弹出消息提示框   实现步骤如下:  1.我们自定义一个view 为 STPushView 推送消息的提示框view  #imp

进程-关于极光推送的推送服务被杀死之后就接不到推送的问题

问题描述 关于极光推送的推送服务被杀死之后就接不到推送的问题 想请教一下,怎么样可以让当前App从后台中清掉的时候,集成的极光推送的推送服务不被 清掉?因为推送服务被清掉之后就接收不到推送的信息了.现在是只有在软件在被用户操作的时候才可能接收到推送的消息 解决方案 现在这个问题好纠结啊,App在手机后台中清除之后,就接收不到推送的消息了.要怎么办啊? 解决方案二: 有木有大神知道啊... 解决方案三: 这个要看下你是否在APP里面写程序了~! 解决方案四: 问下极光的客服,另外一般用户估计是不会

Android推送之极光推送

之前有写一个项目在推送这块想了也找了很多的办法,最终发现激光推送(Jpush)非常的不错,于是决定用激光推送,效果还非常的不错. 查看了极光的API文档,发现可以做server的远程调用 API.在这里分享哈怎样远程调用api. Android极光推送 include('jpush.php'); $n_title = '123ios'; $n_content = '123ios123ios123ios123ios123ios123ios'; $appkeys='48dabb0655de51355

iOS 10 推送高阶篇(必看)_IOS

推荐阅读: iOS10推送之基础知识(必看篇) 这篇文章开始,我会跟大家好好讲讲,苹果新发布的iOS10的所有通知类. 一.创建本地通知事例详解: 注意啊,小伙伴们,本地通知也必须在appdelegate中注册中心,通知的开关打不打开无所谓的,毕竟是本地通知,但是通知的接收的代理,以及通知点击的代理,苹果给合二为一了.所以大家还是需要在appdelegate中写上这2个方法,还有不要忘记在- (BOOL)application:(UIApplication *)application didFi