iOS-极光推送开发小结

来源:互联网 发布:数据挖掘技术的历史 编辑:程序博客网 时间:2024/05/17 06:00

一、我的开发

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {     ......       ......    ......// 程序在死亡状态(杀掉进程),再次启动,收到推送通知,跳转至对应页面    if ([launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey]) {                NSDictionary * userInfo = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];        self.notificationUserInfo = userInfo;            // 这里延迟1秒 否则不执行跳转        // 妈蛋,为了这个,废了我N个小时。测试时使用了通知 本地通知等多种方式均未成功。        // 程序启动的过程中,直接执行push maybe 出错,原理现在还不明了        //  执行个事件,就开启个线程?像点击按钮就触发一个线程?        [self performSelector:@selector(skipToMessageCenter) withObject:nil afterDelay:1];    }      return YES;}
#pragma mark - 远程推送接受方法(极光推送)// 程序在未死亡状态,通知到来,会执行此代理,这里做跳转就好- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {    if (application.applicationState == UIApplicationStateActive) {         if(![[User sharedInstance] isRefuseJPush]){         }            } else if (application.applicationState == UIApplicationStateInactive) {         if(![[User sharedInstance] isRefuseJPush]){         }                MessageModel * messageModel = [[MessageModel alloc] initWithNoticeDic:userInfo];        //    BOOL isSaveSuccess = [[CustomMessageRepository alloc] insertCustomMessage:messageModel];        //    if (isSaveSuccess) {        //        NSLog(@"缓存通知成功!");        //    }else{        //        NSLog(@"缓存通知失败!");        //    }                MessageToSpecificViewController * messageToSpecificViewController = [[MessageToSpecificViewController alloc] init];                        [messageToSpecificViewController messageFromViewController:self.rootViewController toSpecificViewControllerWithMessage:messageModel];    }        [self gainUserInfoDicWithDic:userInfo];        [APService handleRemoteNotification:userInfo];}
-(void)skipToMessageCenter {        dispatch_async(dispatch_get_main_queue(), ^{                // 根据通知内容,跳转至不同页面        MessageModel * messageModel = [[MessageModel alloc] initWithNoticeDic:self.notificationUserInfo];        MessageToSpecificViewController * messageToSpecificViewController = [[MessageToSpecificViewController alloc] init];        [messageToSpecificViewController messageFromViewController:self.rootViewController toSpecificViewControllerWithMessage:messageModel];    });}

注:因为推送缺陷,被黑成狗了。所以做什么事情要尽心尽力做好。认真、负责…

二、远程推送相关

远程推送应用配置过程1. 创建支持远程推送功能的App ID2. 申请开发者证书,并选中刚刚创建的App ID3. 下载CER文件,并导入钥匙串管理4. 申请发布证书,并选中刚刚创建的App ID5. 下载CER文件,并导入钥匙串管理6. 检查App ID,确认证书已经指定远程推送应用程序开发过程1. 新建应用程序2. 指定AppID,在developer.apple.com上设置的AppID#ifdef __IPHONE_8_0    // 注册接收通知的类型    UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert | UIUserNotificationTypeBadge | UIUserNotificationTypeSound categories:nil];    [application registerUserNotificationSettings:settings];        // 注册允许接收远程推送通知    [application registerForRemoteNotifications];#else    // 如果是iOS7.0,使用以下方法注册    [application registerForRemoteNotificationTypes:UIUserNotificationTypeAlert | UIUserNotificationTypeBadge | UIUserNotificationTypeSound];#endif// 当得到苹果的APNs服务器返回的DeviceToken就会被调用// 7040f7d5 5a974598 c5cf31b5 3e340b39 68affd25 122f0ce1 3f315226 396c2e5b- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {    NSLog(@"deviceToken是:%@", deviceToken);}// 接收到远程通知,触发方法和本地通知一致- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {    NSLog(@"%@", userInfo);}*** 使用后台的远程消息推送1> Capabilities中打开远程推送通知2> 实现代理方法- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler远程消息数据格式:{"aps" : {"content-available" : 1},"content-id" : 42}执行completionHandler有两个目的1> 系统会估量App消耗的电量,并根据传递的UIBackgroundFetchResult 参数记录新数据是否可用2> 调用完成的处理代码时,应用的界面缩略图会自动更新注意:接收到远程通知到执行完网络请求之间的时间不能超过30if (userInfo) {    int contentId = [userInfo[@"content-id"] intValue];        ViewController *vc = (ViewController *)application.keyWindow.rootViewController;    [vc loadDataWithContentID:contentId completion:^(NSArray *dataList) {        vc.dataList = dataList;            NSLog(@"刷新数据结束");                completionHandler(UIBackgroundFetchResultNewData);    }];} else {    completionHandler(UIBackgroundFetchResultNoData);}

三、证书相关
开发者账号界面.png

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 验兵视力不过关怎么办 军检了感冒了怎么办 双侧附睾头囊肿怎么办 睾丸上面长疙瘩很痒都抓烂了怎么办 睾丸小引起精子数量少怎么办 睾丸发育不完全精子存活率低怎么办 踢到睾丸很痛怎么办 兔子的睾丸烂了怎么办 梗阻性无精穿刺取得精子不好怎么办 甲状腺做完穿刺后是恶性怎么办 硬了之后睾丸痛怎么办 腋下胯间颜色深怎么办 当兵前上班有社保怎么办 别人背后害我我怎么办 左侧胸明显大于右侧胸怎么办 婴儿拉大便次数多怎么办 公鸽子不会踩蛋怎么办 生殖器套东西取不下来怎么办 婴儿成蛋蛋的皮好长怎么办 丈夫总要害自己该怎么办 脚背踢肿了怎么办很疼 踢沙袋脚背伤了怎么办 脚y子烂了怎么办 掐喉咙那会痒会咳嗽怎么办 掐到婴儿脖子了怎么办 孩子胳膊不小心烫破皮了怎么办 孩子嘴角磕破了怎么办 电话不小心拒接了怎么办 手机微信不小心碰到语言英文怎么办 手机微信不小心碰到英文说话怎么办 不小心碰到宝宝卤门怎么办 不小心碰到婴儿头顶囟门怎么办 重要部位被踢了怎么办 吃了带刺的葡萄怎么办 小孩子老是去厕所大便怎么办 家人偷了我的钱怎么办 小孩打闹踢到要害怎么办 腿上汗毛孔没开都是点点怎么办 脸蛋澡巾擦破了怎么办 婴儿后背用擦澡巾擦红了怎么办 搓澡皮肤搓破了怎么办