iOS开发——极光推送

   1.到极光官网 https://www.jpush.cn/ 下载极光推送SDK。

     具体如何集成最好参考官网的文档,以及一些失败的原因。文档非常详细,我也是参考集成的。

   2.到极光推送官网注册自己的应用信息,关键是参考官网文档把推送证书p12文件上传好。http://docs.jpush.io/client/ios_tutorials/#ios_1

   

3.将下载好的SDK解压的文件拖到项目中,并添加一下框架

  • CFNetwork.framework
  • CoreFoundation.framework
  • CoreTelephony.framework
  • SystemConfiguration.framework
  • CoreGraphics.framework
  • Foundation.framework
  • UIKit.framework
  • Security.framework
  • Xcode7需要的是libz.tbd;Xcode7以下版本是libz.dylib

4.可以参考我的其他博客,设置XCode7支持Http传输方法。

5.还需入下图配置下项目

 

6.在AppDelegate中,导入#import "JPUSHService.h"  

  建议在- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions方法中单独设置一个方法调用,防止和其他的设置混乱
    
    // 极光推送设置
    [self JPush:launchOptions];

7.以下是AppDelegate.m中主要需要实现的代码。包括设置AppKey

- (void)JPush:(NSDictionary *)launchOptions{
    
    // 程序未运行时,接收消息启动app
    NSDictionary *remoteNotification = [launchOptions objectForKey: UIApplicationLaunchOptionsRemoteNotificationKey];
    NSLog(@"未运行收到的消息%@",remoteNotification);

//#ifdef __IPHONE_8_0
    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];
    }
    
//#endif
    // Required
    [JPUSHService setupWithOption:launchOptions appKey:@"ef7**********3d87" channel:@"Publish channel" apsForProduction:YES]; //如需兼容旧版本的方式,请继续使用[JPUSHService setupWithOption:launchOptions]初始化方法和添加pushConfig.plist文件声明AppKey等配置内容。
    
    
    // 开启调试模式debug
    [JPUSHService setDebugMode];
    
    
    //  接受自定义消息
    NSNotificationCenter *defaultCenter = [NSNotificationCenter defaultCenter];
    [defaultCenter addObserver:self selector:@selector(networkDidReceiveMessage:) name:kJPFNetworkDidReceiveMessageNotification object:nil];
    NSNotificationCenter *defaultCenter1 = [NSNotificationCenter defaultCenter];
    [defaultCenter addObserver:self selector:@selector(JPushID:) name:kJPFNetworkDidLoginNotification object:nil];


}

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
    
    // Required
    [JPUSHService registerDeviceToken:deviceToken];
    NSLog(@"注册的token%@",deviceToken);
}

- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error {
    
    //Optional
    NSLog(@"注册远程通知失败did Fail To Register For Remote Notifications With Error: %@", error);
}

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

    NSLog(@"++++本地收到的消息====%@",notification);

}

// 应程序在前台或后台运行时接收消息
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
    
     NSLog(@"获取到的APN推送内容: %@",userInfo);
    
    
    // IOS 7 Support Required
    [JPUSHService handleRemoteNotification:userInfo];
    completionHandler(UIBackgroundFetchResultNewData);
    
   
}


// 获取极光返回的用户ID
- (void)JPushID:(NSNotification *)notification{

    NSLog(@"获取到的registrationID===:%@",[JPUSHService registrationID]);

}

// 通知方法回调:接受自定义消息
- (void)networkDidReceiveMessage:(NSNotification *)notification {
    NSDictionary * userInfo = [notification userInfo];
    NSString *content = [userInfo valueForKey:@"content"];
    NSDictionary *extras = [userInfo valueForKey:@"extras"];
    NSString *customizeField1 = [extras valueForKey:@"customizeField1"]; //自定义参数,key是自己定义的
   // NSString *JPushID       = [];
 
    NSLog(@"接收自定义消息:%@",content);
    
   
    
    
}

8.这样可以单独在极光官网测试推送,最好单独获取到的registrationID单个推送测试。

  我开始可以内网推送,但走苹果APNS失败,最后还是推送证书的问题。重新做的并上传到极光推送逛网。

原文地址:https://www.cnblogs.com/LiuChengLi/p/4971543.html