Advertisement

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
    
    
    
    
    objc
![](https://ad.itadn.com/c/weblog/blog-img/images/2025-07-14/s6xESz7OMig4GJeaFLldhDyR2ACt.png)
复制代码
 //

    
 //  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
    
    
    
    
    objc
![](https://ad.itadn.com/c/weblog/blog-img/images/2025-07-14/egZPI0wmbKDGAranTj7uQ6hviXoq.png)

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

复制代码
 //

    
 //  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
    
    
    
    
    objc
![](https://ad.itadn.com/c/weblog/blog-img/images/2025-07-14/LkOCUAglcyP9DQ8XJMEGzWNqK50T.png)

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

Good luck!

全部评论 (0)

还没有任何评论哟~