iOS 极光推送

一、配置APNs

苹果APNs(英文全称:Apple Push Notification Service)

1.配置开发证书

Paste_Image.png
Paste_Image.png
Paste_Image.png
Paste_Image.png
Paste_Image.png
Paste_Image.png
Paste_Image.png

2.配置生产证书

和配置开发证书的流程相同。

3.将配置好的证书导出为 .p12 文件

Paste_Image.png
Paste_Image.png

Paste_Image.png

一、注册极光推送帐号
可登录 极光推送官网 注册帐号。
注册成功后进入控制台

Paste_Image.png

Paste_Image.png

二、集成极光推送SDK
sdk下载地址 点击传送
我使用的是JPush-iOS-SDK-2.1.0。下载的文件里有个pdf文件iOS+SDK+Integration+Guide.pdf,介绍了集成极光推送的详细代码。
在工程文件中,做如下设置:

我在Xcode7.2里面没找到这个选项

这是我的代码
AppDelegate.h

static NSString *appKey = @"你在极光申请到的KEY";  //AppKey  *必填
static NSString *channel = @"Publish channel"; //发布聚到 选填
static BOOL isProduction = FALSE;  //是否为生产环境

AppDelegate.m
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

//Required

[self configurationPushInfo:launchOptions];

return YES;
}

-(void)configurationPushInfo:(NSDictionary *)launchOptions{
if ([[UIDevice currentDevice].systemVersion floatValue] >= 8.0) {
    //可以添加自定义categories
    [JPUSHService registerForRemoteNotificationTypes:(UIUserNotificationTypeBadge |
                                                      UIUserNotificationTypeSound |
                                                      UIUserNotificationTypeAlert)
                                          categories:nil];
} else {
    //categories 必须为nil
    [JPUSHService registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge |
                                                      UIRemoteNotificationTypeSound |
                                                      UIRemoteNotificationTypeAlert)
                                          categories:nil];
}

[JPUSHService setupWithOption:launchOptions appKey:appKey
                      channel:channel apsForProduction:isProduction];

}

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

/// Required - 注册 DeviceToken
[JPUSHService registerDeviceToken:deviceToken];
}

/**
 *  当前APP处于前台活跃状态时接收到推送通知时调用的方法
 *  当前APP处于后台挂起时接到推送点击顶部提示框进到app中调用的方法
 *  当前APP处于后台挂起时接到推送点击通知栏消息进入到app中调用的方法
 *  @param application       <#application description#>
 *  @param userInfo          <#userInfo description#>
 *  @param completionHandler <#completionHandler description#>
 */
  -(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler{

completionHandler(UIBackgroundFetchResultNewData);
NSLog(@"收到通知:%@", [self logDic:userInfo]);
//[[NSNotificationCenter defaultCenter] postNotificationName:@"gotoMessageView" object:nil userInfo:<#(nullable NSDictionary *)#>];
[[NSNotificationCenter defaultCenter] postNotificationName:@"gotoMessageView" object:userInfo];

}
/**
 *  注册失败的Push 方法
 *
 *  @param application 应用描述
 *  @param error       错误信息
 */
- (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 {

  }

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

}

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

}
#endif

- (void)application:(UIApplication *)application
didReceiveLocalNotification:(UILocalNotification *)notification {
[JPUSHService showLocalNotificationAtFront:notification     identifierKey:nil];
}
//编码问题
- (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;
  }

本文参考自简书作者:hrscy
如有转载请注明出处

推荐阅读更多精彩内容

  • 极光推送和百度比起来较为简单,但是很有新手对于集成极光推送时配置证书比较晕头转向,也没有太小白的教程,所以写了这个...
    Rocherster阅读 825评论 1 17
  • 关于iOS中的推送, 我们使用最多的可能就是极光了, 关于极光推送, 这里不做过多的介绍, 可到其官网进行学习, ...
    流火绯瞳阅读 2,327评论 3 4
  • 由于配置证书和注册极光应用配置网上已经很多了所以在这里就不在多说了!!! 1.首先我们要先将从极光官网上下载来的最...
    海岸没有沙阅读 5,276评论 3 3
  • 今晚去看了徐克导演、周星驰编剧的《西游伏妖篇》。对这部影片期待很久了,我看的时候,一直在期待包袱和大坏boss出现...
    龙飞四月阅读 132评论 1 2
  • 在我的世界里我觉得我是一个多愁善感的人物,我的喜怒哀乐是别人猜不透的也是我自己摸不透的!呵呵……也就是别人眼里所谓...
    南山太抖阅读 88评论 0 0
  • 坚持早睡对我而言是个难题,一向不懂克制,不懂掌控自己,没有自律。 我要学会坚持早睡,对自己好点,学会自律,对人生好...
    0426我爱静静阅读 83评论 0 0
  • 早晨——水,水果,粥,不油腻,油腻 中午——稀的食物,菜,肉,主食最后 下午——再把它顺序再反过来这样去吃 那么这...
    LenaKing_阅读 68评论 0 0