IOS推送处理

iOS收到推送后,跳转到某一页面

字数1348 阅读1001 评论4 喜欢26

以前做过推送, 但只是那种最基本的广播推送(向所有安装appde设备通知), 列播组播这种对指定用户推送消息还没做过, 最近刚好有个项目,向指定用户推送物流信息、物品状态等等。于是前几天就和也没做过推送的后台干起来了,详情如下:

我用的是友盟推送, 配置证书这一环节直接跳过了,这个网上有讲的。给大家讲一点常识,友盟推送分生产环境和开发环境。用手机刷上去的就是开发环境, 发布到苹果商店就是生产环境,没发布前怎么模拟呢, 用普通账号打的ad hoc 包, 用企业账号打的ad hoc 包或者enterprise包都可以测试生产环境。

开发环境下, 你把APP删掉,重新调试上来,就会生成一个新的device_token了!下面的几个步骤是自己的理解结合网上的资料写出的想法,大牛们轻的吐槽…… 

1、传device_token的时机

后台向指定用户做同送,那么必须知道某个用户的device_token,那么怎么获取token呢,APP启动后会在appdelegate的didRegisterForRemoteNotificationsWithDeviceToken方法里返回device_token信息:

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
{
  [UMessage registerDeviceToken:deviceToken];
   NSString * token = [[[[deviceToken description] stringByReplacingOccurrencesOfString: @"<" withString: @""]
                     stringByReplacingOccurrencesOfString: @">" withString: @""]
                    stringByReplacingOccurrencesOfString: @" " withString: @""];
  }

但是后台向指定用户推送, 就必须把uid(用户ID)和token关联起来,我这里的做法时, 用户登录的时候就上传token信息, 退出登录的时候, 就清除用户绑定的token信息, 这样确保后台会向用户最后一次登录的设备号做推送(只是自己的理解,当然了,iOS设备收到推送后,还要判断用户是否登录而且登录的是不是你要推送的用户)。

2、 收到通知时app的状态

收到通知的时候APP的状态可能是未启动、前台活跃(任何界面)、后台等三种。

  • 未启动时,点击通知栏启动App, 会在didFinishLaunchingWithOptions方法里收到通知内容。
  • 剩下两种会在didReceiveRemoteNotification方法里收到通内容。
    - (void)application:(UIApplication *)application   didReceiveRemoteNotification:(NSDictionary *)userInfo{
     _userInfo = userInfo;
       //关闭友盟对话框
     [UMessage setAutoAlert:NO];
     [UMessage didReceiveRemoteNotification:userInfo];
     NSLog(@"_______________友盟系统方法 userInfo %@",userInfo);
    if(userInfo)// 调用appdelegate的分类处理业务逻辑
      [self dealWithMyMessagePush:userInfo];
    }

    代码里面删减了一些和推送不相关的代码,我的项目架构是tab+nav 

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
     self.window.rootViewController = [[FDIMGBarController alloc] init];
     //  分类
      [self UMengShareMethodAndCount:launchOptions];
     // 类别
    [self FD_updateAppVersion];
    NSDictionary* userInfo = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
    if(userInfo){//推送信息
      self.userInfo = userInfo;//[userInfo copy]
    }
     return YES;
    }
  • 未启动时收到通知,就判断字典userInfo是否为空, 不为空是说明有通知消息。我这里的做法是把她复制给AppDelegate的某个属性, 在首页控制器取到AppDelegate的这个值,判断是否为空,不为空就进行下一步操作。
  • 用户在前台或后台收到消息的时候, 我会弹出一个弹出框提醒用户,是否前往我的消息界面。

5、 未启动时首页控制器逻辑处理

在viewDidLoad方法里:
AppDelegate * app = (AppDelegate *)[UIApplication sharedApplication].delegate;
//pushName 是我给后天约定的通知必传值,所以我可以根据他是否为空来判断是否有通知
NSString *  pushName = [[app.userInfo objectForKey:@"aps"] objectForKey:@"alert"];
if(![SYFCustomCLASS SYFIsEmptyOrNull:pushName])
    [self getPushInfo:app.userInfo];

如果有通知的话:

-(void)getPushInfo:(NSDictionary *)dict{
 if(!IsLogin){// 判断用户是否登录
    LoginViewController * loginVC = [[LoginViewController alloc] initWithNibName:@"LoginViewController" bundle:nil];
//通知必返回要通知用户的uid, 判断登录的用户是不是你要通知的用户
    loginVC.push_uid = dict[@"uid"];
    FDNavigationController * loginNav = [[FDNavigationController alloc] initWithRootViewController:loginVC];
    [self presentViewController:loginNav animated:YES completion:^{}];
}else
{// 这就文章标题说的某一界面
   MyUserMessageVC * messageVC = [[MyUserMessageVC alloc] initWithNibName:@"MyUserMessageVC" bundle:nil];
    [self.navigationController pushViewController:messageVC animated:YES];
 }
}

当用户的登录成功的时候,在上传device_token的接口方法里, 需要判断登录用户的uid是不是你要通知的用户。如果不是你要通知的用户,dismiss就好了,结束;如果是就要跳转到我的消息界面。

   if(![self.push_uid isEqualToString:currentuid])
        [self dismissViewControllerAnimated:YES completion:NULL];
       else{
        [self dismissViewControllerAnimated:YES completion:^{
         AppDelegate * app = (AppDelegate *)[UIApplication sharedApplication].delegate;
   //AppDelegate的分类
         [app  testLoginerUidCorret];
         }];

方法如下:

- (void)testLoginerUidCorret{
// 取到tabbarcontroller
FDIMGBarController *tabBarController = ( FDIMGBarController*)self.window.rootViewController;
// 取到navigationcontroller
FDNavigationController * nav = (FDNavigationController *)tabBarController.selectedViewController;
//取到nav控制器当前显示的控制器
  UIViewController * baseVC = (UIViewController *)nav.visibleViewController;
//如果是当前控制器是我的消息控制器的话,刷新数据即可
if([baseVC isKindOfClass:[MyUserMessageVC class]])
{
    MyUserMessageVC * vc = (MyUserMessageVC *)baseVC;
    [vc reloadMessageData];
    return;
}
// 否则,跳转到我的消息
MyUserMessageVC * messageVC = [[MyUserMessageVC alloc] initWithNibName:@"MyUserMessageVC" bundle:nil];
[nav pushViewController:messageVC animated:YES];
}

6、应用在前台或后台的逻辑处理

逻辑和未启动时很多情况都是类似,弹出提醒框, 点击立即前往时,判断用户是否登录,如果用户登录,直接跳转到我的消息界面;没有登录请参考上面逻辑。

时间: 2024-11-06 18:16:57

IOS推送处理的相关文章

iOS 推送证书

push 服务器证书 钥匙串:登入-->证书,选项里面导出证书命名为cert.p12,跟密钥命名为key.p12 需要将上面的2个.p12文件转成.pem格式: openssl pkcs12 -clcerts -nokeys -out cert.pem -in cert.p12 openssl pkcs12 -nocerts -out key.pem -in key.p12 如果需要对 key不进行加密: openssl rsa -in key.pem -out key.unencrypted.

申请iOS推送证书.p12

iOS APP需要推送通知,要用到iOS推送证书,分为测试调试用的iOS推送证书(开发环境)和上架到App Store的ios 推送证书(生产环境)! 一.iOS发布推送证书(开发环境)测试APP iOS证书申请这里用到一个工具Appuploader,可以在win系统中辅助快速申请iOS证书,如果没有Mac也无所谓. 可以很快速的创建iOS推送证书 先安装好Appuploader安装教程 1.打开Appuploader,选择Certification. 2.点击+ADD\选择Push Notif

IOS推送功能push

笔记:ios推送功能 推送可实时提醒用户你想要让客户端用户知道的信息,那怕用户并没有开启这个应用.应用场景很广泛,如淘宝应用:在你使用淘宝客户端的时候,假如你拍的东西发货了,如果没有推送功能,你不会及时知道你拍下的东西已经发货.但使用了推送后,淘宝就会发送一条推送通知,告知使用客户端App的你,你拍下的东西已经发货.使用推送的场景很多,在用户的体验度上更人性. 苹果的推送机制(APNS)咯(ps:其实每一篇教程都有),先来看一张苹果官方对其推送做出解释的概要图. Provider是给你手机应用发

iOS推送小结

iOS推送小结 (吐槽,md的代码编辑功能不知道是不会用还是确实不好用) 1.推送配置 1.1证书配置 请自行谷百. 1.2注册推送 //代码来源:环信Demo //In method application:(UIApplication *)application didFinishLaunchingWithOptions: UIApplication *application = [UIApplication sharedApplication]; //注册APNS if([applicat

iOS推送 再备

这是一篇编译的文章,内容均出自Parse.com的iOS开发教程,同时作者还提供了视频讲解.本文将带领开发者一步一步向着iOS推送通知的深处探寻,掌握如何配置iOS推送通知的奥义. 介绍一点点背景资料 众所周知,使用推送通知是一个很棒的.给应用添加实时消息通知的方式.这样做的结局是,开发者和用户之间,彼此永远保持着一种令人愉悦的亲密关系. 然而不幸的是,iOS的推送通知并非那么容易驾驭,往往会搞的开发者精疲力尽,灰心丧气,无法持久.现在,救星来了!只要通读本教程,你就能摆脱这些烦恼,成为一名活力

iOS 推送证书制作(JAVA/PHP)

iOS 推送证书制作(JAVA/PHP) 在使用Java或者PHP制作iOS推送服务器的时候,需要自己从开发者网站上导出的aps_developer_identity证书和Apple Development Push Services证书进行合成,生成可以供Java使用的p12证书或供PHP使用的pem证书.aps_developer_identity证书和Apple Development Push Services证书的申请过程可以参考:http://www.cnblogs.com/hubj

教你做IOS推送 包会!

最近在研究iOS的推送问题,遇到了一些问题,最终整理了一下,放在这里和大家分享. APNS的推送机制 首先我们看一下苹果官方给出的对iOS推送机制的解释.如下图 Provider就是我们自己程序的后台服务器,APNS是Apple Push Notification Service的缩写,也就是苹果的推送服务器. 上图可以分为三个阶段: 第一阶段:应用程序的服务器端把要发送的消息.目的iPhone的标识打包,发给APNS. 第二阶段:APNS在自身的已注册Push服务的iPhone列表中,查找有相

ios推送消息php做推送服务器

<?php /** * Main method to run the object * $message 消息内容 * $deviceToken 这里是iphone手机唯一的Token码(记得去掉空格) * $badge 就是应用图标右上角那个数字 * $sound 消息的声音 * $apnsCert 证书路径 * $passphrase 私钥的密码(可以不写) */ public function iosPush($message,$deviceToken,$badge=1,$sound='D

IOS推送通知测试工具PushMeBaby

下载了PushMeBaby在xcode5里中不能使用,类库变了.需要添加Carbon.framework库,在引用的地方改成: #include <Carbon/Carbon.h>,程序就可以 运行了.测试时要变成自己的证书. 下载地址:点击打开链接 IOS推送通知测试工具PushMeBaby,码迷,mamicode.com

iOS推送证书申请

iOS APP需要推送通知,要用到iOS推送证书,分为测试调试用的iOS推送证书和上架到App Store的ios 推送证书! iOS证书申请这里用到一个工具Appuploader,可以在win系统中辅助快速申请iOS证书,如果没有Mac也无所谓. 可以很快速的创建iOS推送证书 先安装好Appuploader安装教程 一.iOS发布推送证书(上架到App Store使用) 1.打开Appuploader,选择Certification. 2.点击+ADD\选择Push Notification