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

//
// 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

下面就是测试一个推送功能了:
//
// 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

真机,然后到官网去发一个通知,就可以收到了!
Good luck!
全部评论 (0)
还没有任何评论哟~
