消息推送

工作

--- 消息推送

 

消息推送

消息推送集成参考友盟 http://dev.umeng.com/push/ios/integration

注意测试环境下,(友盟)设备在手机启动程序的时候已经在友盟服务器注册了,但是还需要手动添加设备方可推送

 

消息推送方法回调

 

一共有以下情况

  • 应用启动,在前台显示收到推送消息 
  • 应用会alert出来(这里我没有做处理)
  • 应用启动,退到后台收到推送消息 
  • 在方法里面
- (void) application:(UIApplication*)application didReceiveLocalNotification:(UILocalNotification*)notification
//数据在notification里面

 

  • 应用未启动收到推送信息(由于我的工程是用了covadova框架,所以这里主要说一下如何在covadova框架的适配)
  • 首先,这里的前提是由于应用关闭的状态下来接收推送消息的,所以要明白一点

“Each device establishes an accredited and encrypted IP connection with the service and 
receives notifications over this persistent connection. If a notification for an app arrives 
when that app is not running, the device alerts the user that the app has data waiting for 
it.
 ”
意思就是,每个设备都会与苹果的provider(服务器)加密连接,如果一个app的推送消息送达,但是app没有运行,那么设备就会提醒用户去处理该app的推送消息,简而言之,无论多少个应用有推送功能,无论该应用是运行或关闭,设备都会与苹果服务器进行加密连接。

  • 二,在方法 
- (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOption

其实我们在里面设置一些UI全局参数以及自定义控制器,如果之前没有接触过消息推送的话,可能没留意到这个启动参数,如果没有接收到推送消息,那么这个启动参数(字典就为null),如果应用关闭的时候接收到推送消息然后点击这个推送消息来启动应用,那么里面的字典就存储了该推送消息。

  • 三,我要实现页面跳转,由于covadova框架只有一个UIWebView实例,所以我要等webView加载完毕之后才能执行目标跳转,这里我需要了解控制器与AppDelegate里面个方法的执行顺序, 只是我在xcode7.1.1里面运行多次,都是viewDidAppearance运行在最后而非applicationDidBecomeActive,于是我觉得还是以自己当前的版本为准,在viewDidAppearace里面加载目标页面,但失败了,于是乎我猜想,可能是在加载目标url后,程序还在继续执行和面的代码,导致覆盖掉了效果,于是我想到了利用异步线程处理,当然由于是界面渲染,所以最后一定要回到主线程执行。像这样
dispatch_queue_t queue = dispatch_queue_create("some", DISPATCH_QUEUE_CONCURRENT);
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 * NSEC_PER_SEC)), queue, ^{
dispatch_async(dispatch_get_main_queue(), ^{
UIWebView * webView = window.rootViewController.view.subviews[0];
[webView stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"window.location='%@'",_targetUrl]];
});
});

最后我发现,无论在viewDidAppearance还是在applicationDidBecomeActive方法里面执行该段代码,均可获得一样的效果,于是乎为了方便,我最终在appdelegate里面完成跳转。