极光推送集成

pod 集成 的 

pod 'JPush'


头文件导入

#import "JPUSHService.h"

#ifdef NSFoundationVersionNumber_iOS_9_x_Max

#import <UserNotifications/UserNotifications.h>


代理方法 

@interface AppDelegate ()<JPUSHRegisterDelegate>

添加初始化代码:

    //   极光推送

    // 3.0.0及以后版本注册可以这样写,也可以继续用旧的注册方式

    JPUSHRegisterEntity * entity = [[JPUSHRegisterEntity alloc] init];

    entity.types = JPAuthorizationOptionAlert|JPAuthorizationOptionBadge|JPAuthorizationOptionSound;

    if ([[UIDevice currentDevice].systemVersion floatValue] >= 8.0) {

        //可以添加自定义categories

        //    if ([[UIDevice currentDevice].systemVersion floatValue] >= 10.0) {

        //      NSSet<UNNotificationCategory *> *categories;

        //      entity.categories = categories;

        //    }

        //    else {

        //      NSSet<UIUserNotificationCategory *> *categories;

        //      entity.categories = categories;

        //    }

    }

    [JPUSHService registerForRemoteNotificationConfig:entity delegate:(id)self];


   NSString *advertisingId = [DeviceInformation getIDFA];

    //如不需要使用IDFAadvertisingIdentifier 可为nil

    [JPUSHService setupWithOption:launchOptions appKey:“你的APPKey” channel:@"推广渠道" apsForProduction:@“是否发布版” advertisingIdentifier:advertisingId];

    

    //2.1.9版本新增获取registration id block接口。

    [JPUSHService registrationIDCompletionHandler:^(int resCode, NSString *registrationID) {

        if(resCode == 0){

            NSLog(@"registrationID获取成功:%@",registrationID); 

        }

        else{

            NSLog(@"registrationID获取失败,code%d",resCode);

        }

    }];



- (void)applicationWillResignActive:(UIApplication *)application {

    //    [APService stopLogPageView:@"aa"];

    // Sent when the application is about to move from active to inactive state.

    // This can occur for certain types of temporary interruptions (such as an

    // incoming phone call or SMS message) or when the user quits the application

    // and it begins the transition to the background state.

    // Use this method to pause ongoing tasks, disable timers, and throttle down

    // OpenGL ES frame rates. Games should use this method to pause the game.

}


- (void)applicationDidEnterBackground:(UIApplication *)application {

    // Use this method to release shared resources, save user data, invalidate

    // timers, and store enough application state information to restore your

    // application to its current state in case it is terminated later.

    // If your application supports background execution, this method is called

    // instead of applicationWillTerminate: when the user quits.

    

    //[[UIApplication sharedApplication] setApplicationIconBadgeNumber:1];

    

    [[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];

}


- (void)applicationWillEnterForeground:(UIApplication *)application {

    [application setApplicationIconBadgeNumber:0];

    [application cancelAllLocalNotifications];

}


- (void)applicationDidBecomeActive:(UIApplication *)application {

    // Restart any tasks that were paused (or not yet started) while the

    // application was inactive. If the application was previously in the

    // background, optionally refresh the user interface.

}


- (void)applicationWillTerminate:(UIApplication *)application {

    // Called when the application is about to terminate. Save data if

    // appropriate. See also applicationDidEnterBackground:.

}

注册上报 DeviceToken

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {

 

    NSLog(@"%@", [NSString stringWithFormat:@"Device Token: %@", deviceToken]);

    [JPUSHService registerDeviceToken:deviceToken];

}

通知失败方法

- (void)application:(UIApplication *)application

didFailToRegisterForRemoteNotificationsWithError:(NSError *)error {

    NSLog(@"did Fail To Register For Remote Notifications With Error: %@", error);

}

通知回调方法

#if __IPHONE_OS_VERSION_MAX_ALLOWED > __IPHONE_7_1

- (void)application:(UIApplication *)application

didRegisterUserNotificationSettings:

(UIUserNotificationSettings *)notificationSettings {

}


// Called when your app has been activated by the user selecting an action from

// a local notification.

// A nil action identifier indicates the default action.

// You should call the completion handler as soon as you've finished handling

// the action.

- (void)application:(UIApplication *)application handleActionWithIdentifier:(NSString *)identifier forLocalNotification:(UILocalNotification *)notification  completionHandler:(void (^)())completionHandler {

}


// Called when your app has been activated by the user selecting an action from

// a remote notification.

// A nil action identifier indicates the default action.

// You should call the completion handler as soon as you've finished handling

// the action.

- (void)application:(UIApplication *)application handleActionWithIdentifier:(NSString *)identifier forRemoteNotification:(NSDictionary *)userInfo completionHandler:(void (^)())completionHandler {

}

#endif


- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {

    [JPUSHService handleRemoteNotification:userInfo];

    NSLog(@"iOS6及以下系统,收到通知:%@", [self logDic:userInfo]);


}


- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {

    [JPUSHService handleRemoteNotification:userInfo];

    NSLog(@"iOS7及以上系统,收到通知:%@", [self logDic:userInfo]);

    

    if ([[UIDevice currentDevice].systemVersion floatValue]<10.0 || application.applicationState>0) {

        

    }

    

    completionHandler(UIBackgroundFetchResultNewData);

}


- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification {

    [JPUSHService showLocalNotificationAtFront:notification identifierKey:nil];

}


#ifdef NSFoundationVersionNumber_iOS_9_x_Max

#pragma mark- JPUSHRegisterDelegate

- (void)jpushNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(NSInteger))completionHandler {

    NSDictionary * userInfo = notification.request.content.userInfo;

    

    UNNotificationRequest *request = notification.request; // 收到推送的请求

    UNNotificationContent *content = request.content; // 收到推送的消息内容

    

    NSNumber *badge = content.badge// 推送消息的角标

    NSString *body = content.body;    // 推送消息体

    UNNotificationSound *sound = content.sound// 推送消息的声音

    NSString *subtitle = content.subtitle// 推送消息的副标题

    NSString *title = content.title// 推送消息的标题

    

    if([notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) {

        [JPUSHService handleRemoteNotification:userInfo];

        NSLog(@"iOS10 前台收到远程通知:%@", [self logDic:userInfo]);

        

    }

    else {

        // 判断为本地通知

        NSLog(@"iOS10 前台收到本地通知:{\nbody:%@\ntitle:%@,\nsubtitle:%@,\nbadge%@\nsound%@\nuserInfo%@\n}",body,title,subtitle,badge,sound,userInfo);

    }

    completionHandler(UNNotificationPresentationOptionBadge|UNNotificationPresentationOptionSound|UNNotificationPresentationOptionAlert); // 需要执行这个方法,选择是否提醒用户,有BadgeSoundAlert三种类型可以设置

}


- (void)jpushNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)())completionHandler {

    

    NSDictionary * userInfo = response.notification.request.content.userInfo;

    UNNotificationRequest *request = response.notification.request; // 收到推送的请求

    UNNotificationContent *content = request.content; // 收到推送的消息内容

    

    NSNumber *badge = content.badge// 推送消息的角标

    NSString *body = content.body;    // 推送消息体

    UNNotificationSound *sound = content.sound// 推送消息的声音

    NSString *subtitle = content.subtitle// 推送消息的副标题

    NSString *title = content.title// 推送消息的标题

    

    if([response.notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) {

        [JPUSHService handleRemoteNotification:userInfo];

        NSLog(@"iOS10 收到远程通知:%@", [self logDic:userInfo]);

        

    }

    else {

        // 判断为本地通知

        NSLog(@"iOS10 收到本地通知:{\nbody:%@\ntitle:%@,\nsubtitle:%@,\nbadge%@\nsound%@\nuserInfo%@\n}",body,title,subtitle,badge,sound,userInfo);

    }

    

    completionHandler();  // 系统要求执行这个方法

}

#endif


// log NSSet with UTF8

// if not ,log will be \Uxxx

- (NSString *)logDic:(NSDictionary *)dic {

    if (![dic count]) {

        return nil;

    }

    NSString *tempStr1 = [[dic description] stringByReplacingOccurrencesOfString:@"\\u" withString:@"\\U"];

    NSString *tempStr2 =  [tempStr1 stringByReplacingOccurrencesOfString:@"\"" withString:@"\\\""];

    NSString *tempStr3 = [[@"\"" stringByAppendingString:tempStr2] stringByAppendingString:@"\""];

    NSData *tempData = [tempStr3 dataUsingEncoding:NSUTF8StringEncoding];

    NSString *str = [NSPropertyListSerialization propertyListFromData:tempData  mutabilityOption:NSPropertyListImmutable  format:NULL errorDescription:NULL];

    return str;

}


成功运行:

--------------------------- JPush Log ----------------------------

--------------------JPush SDK Version:3.0.3--build:34----------

--------------------JCore Lib Version:1.1.2--build:18----------

-----------------AppKey:**********************----------------

----------------------------------------------------------------

2017-05-03 11:08:12.839412+0800 MedChannel[7645:3068629]  | JIGUANG | I - [JIGUANGClientController] Action - jpush setup

2017-05-03 11:08:12.856833+0800 MedChannel[7645:3068629]  | JIGUANG | I - [JIGUANGClientController] Action - setup

<AppDelegate.m 78>:-[AppDelegate application:didFinishLaunchingWithOptions:]_block_invoke NSLog:

  registrationID获取成功:13165ffa4e38f901e23

-----

<AppDelegate.m 233>:-[AppDelegate application:didRegisterForRemoteNotificationsWithDeviceToken:] NSLog:

  Device Token: <d7b48a07 d97f4324 3c2d44fa e9816d0a 99492c77 4e42c8e7 9e0c3f5b f66c3dcf>

-----

2017-05-03 11:08:17.571764+0800 MedChannel[7645:3068623]  | JIGUANG | I - [JIGUANGSessionController] connecting with coreAddr 139.198.0.239,port 7001

2017-05-03 11:08:21.049578+0800 MedChannel[7645:3068629]  | JIGUANG | I - [JIGUANGLogin] 

----- login result -----

uid:9283689888 

registrationID:13165ffa4e38f901e23


详细内容看极光官方文档



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值