}]; } } 协议方法: - (void)application:(UIApplication *)application didReceiveRemoteNotification :(NSDictionary *)userInfo { //关闭友盟自带的弹出框 [UMessage setAutoAlert:NO]; [UMessage didReceiveRemoteNotification 应用处于前台时的远程推送接受 //关闭友盟自带的弹出框 [UMessage setAutoAlert:NO]; //必须加这句代码 [UMessage didReceiveRemoteNotification UNPushNotificationTrigger class]]) { //应用处于后台时的远程推送接受 //必须加这句代码 [UMessage didReceiveRemoteNotification
后台收到: 退出收到: 推送分几种分类 普通式推送 就是我们在手机上平时见到的推送 包含声音、弹窗、角标、自定义字段 App 处于前台:不会弹窗,可通过 didReceiveRemoteNotification App: 处于前台:可通过didReceiveRemoteNotification(iOS 7 before)didReceiveRemoteNotification:fetchCompletionHandler 处于后台:可通过didReceiveRemoteNotification:fetchCompletionHandler:获取通知内容 // 获取情况中与普通推送的唯一不同点,此时 iOS 系统允许开发者在 App : 处于前台:可通过didReceiveRemoteNotification(iOS 7 before)didReceiveRemoteNotification:fetchCompletionHandler 处于后台:可通过 didReceiveRemoteNotification:fetchCompletionHandler: 获取通知内容 //获取情况中与普通推送的唯一不同点,此时 iOS 系统允许开发者在
在 func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject completionHandler: (UIBackgroundFetchResult) -> Void) func application(application: UIApplication, didReceiveRemoteNotification LixObjcRouter.registerArticlePush() 做完这些之后,咱们只要 func application(application: UIApplication, didReceiveRemoteNotification completionHandler: (UIBackgroundFetchResult) -> Void) func application(application: UIApplication, didReceiveRemoteNotification
普通推送: 收到推送后(有文字有声音),点开通知,进入APP后,才执行 - (void)application:(UIApplication *)application didReceiveRemoteNotification completionHandler { } 静默推送:收到推送(没有文字没有声音),不用点开通知,不用打开APP,就能执行 - (void)application:(UIApplication *)application didReceiveRemoteNotification
应用还没有加载 这时如果点击通知的显示按钮,会调用didFinishLaunchingWithOptions,不会调用didReceiveRemoteNotification方法。 应用在前台(foreground) 这时如果收到通知,会触发didReceiveRemoteNotification方法。 3).应用在后台 (1)此时如果收到通知,点击显示按钮,会调用didReceiveRemoteNotification方法。 applicationDidBecomeActive 解决方法 根据上面的三种情况可以总结一下 点击通知会根据app是否启动,未启用调用didFinishLaunchingWithOptions,启用调用didReceiveRemoteNotification notificationPushView(){ //跳转页面 self.performSegueWithIdentifier("songhuoSegue", sender: self); } 在didReceiveRemoteNotification
由于我用了跳转选择所以即使不适配iOS10也没关系,因为如果在iOS10环境下运行就不会再走didReceiveRemoteNotification这个方法了。 疑问:iOS10之后不走didReceiveRemoteNotification方法,为什么alertView控件还能显示出来? 解答:alertView是通过走iOS10新增的方法显示出来的。
点击推送触发的几个方法: ios7.0之前 - (void)application:(UIApplication *)application didReceiveRemoteNotification @param userInfo @param completionHandler */ - (void)application:(UIApplication *)application didReceiveRemoteNotification :(NSDictionary *)userInfo iOS 8 - 10 - (void)application:(UIApplication *)application didReceiveRemoteNotification 3.png app被杀死 这个时候会走didReceiveRemoteNotification这些的方法(有很多人认为不会走,经过测试这个是会走的),但是这这里面写跳转什么的 ,就有点比较难处理了,因为 didFinishLaunchingWithOptions这个方法没有走,先走的didReceiveRemoteNotification再走的 didFinishLaunchingWithOptions
pragma mark - UMessage Delegate Methods - (void)application:(UIApplication *)application didReceiveRemoteNotification NSDictionary *)userInfo { // 关闭友盟自带的弹出框 [UMessage setAutoAlert:NO]; [UMessage didReceiveRemoteNotification 应用处于前台时的远程推送接受 //关闭友盟自带的弹出框 [UMessage setAutoAlert:NO]; //必须加这句代码 [UMessage didReceiveRemoteNotification UNPushNotificationTrigger class]]) { //应用处于后台时的远程推送接受 //必须加这句代码 [UMessage didReceiveRemoteNotification
iOS10的静默式推送 //ios 7 前端 、点击、静默式推送有 包括iOS10的静默式推送 - (void)application:(UIApplication *)application didReceiveRemoteNotification shareTool]cleanData:userInfo[@"fid"]]]; } 这个方法可以不用实现 - (void)application:(UIApplication *)application didReceiveRemoteNotification NSDictionary *)userInfo { // Required,For systems with less than or equal to iOS6 NSLog(@"didReceiveRemoteNotification .. } 3、示例代码: // iOS 6 Remote Notificatio - (void)application:(UIApplication *)application didReceiveRemoteNotification
接收推送发送通知的代码: - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo { //关闭友盟自带的弹出框 [UMessage setAutoAlert:NO]; [UMessage didReceiveRemoteNotification
前台和后台的推送回调这个代理方法(退出的设置在didFinishLaunchingWithOptions方法中) - (void)application:(UIApplication *)application didReceiveRemoteNotification NSDictionary *)userInfo; (2)前台、后台和退出的推送都会调用这个代理方法(iOS 7之后可用) - (void)application:(UIApplication *)application didReceiveRemoteNotification deviceToken); } #pragma mark 接收到远程推送的消息时调用此方法(后台和前台时可用) - (void)application:(UIApplication *)application didReceiveRemoteNotification #pragma mark 接收到远程推送的消息时调用此方法(前、后、退出都可用,iOS7以后可用) - (void)application:(UIApplication *)application didReceiveRemoteNotification
(5)苹果的APNS服务器得到推送消息(JSON串)以后,向App发送通知消息,使得App的回调函数application:(UIApplication*)application didReceiveRemoteNotification applicationdidReceiveRemoteNotification:(NSDictionary *)userInfo函数, 此时AppDelegate中函数执行的顺序为: applicationWillEnterForeground application:didReceiveRemoteNotification 此时,不会执行前面提到的 didReceiveRemoteNotification函数,而是在App的applicationDidFinishLaunching函数中处理推送,通过以下代码可以获取推送消息中的数据
AppDelegate.m #import "EBForeNotification.h" //ios7 before - (void)application:(UIApplication *)application didReceiveRemoteNotification userInfo customSound:@"my_sound.wav"]; ... } //ios7 later - (void)application:(UIApplication *)application didReceiveRemoteNotification
AppDelegate.m #import "EBForeNotification.h" //ios7 before - (void)application:(UIApplication *)application didReceiveRemoteNotification customSound:@"my_sound.wav"]; ... } //ios7 later - (void)application:(UIApplication *)application didReceiveRemoteNotification
launchOptions]; return YES; } #pragma mark 修改通知处理函数 -(void)application:(UIApplication *)application didReceiveRemoteNotification JPUSHService registerDeviceToken:deviceToken]; } // Required -(void)application:(UIApplication *)application didReceiveRemoteNotification
NSMutableString stringWithFormat:@"%@",deviceToken]; } 3.收到通知 - (void)application:(UIApplication *)application didReceiveRemoteNotification
但是 application(_:didReceiveRemoteNotification:) 会被立即调用。 如果你的应用正在运行,或者被挂起在后台,并且用户通过点击通知使应用进入前台 application(_:didReceiveRemoteNotification:) 方法会被调用。 为了处理另外两种情况,添加以下代码到 AppDelegate: func application(application: UIApplication, didReceiveRemoteNotification 在AppDelegate内,用下面更强大的版本替换 application(_:didReceiveRemoteNotification:) 方法: func application(application : UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject], fetchCompletionHandler
deviceToken.description); } // 正常接到远程通知的时候会调用这个方法 - (void)application:(UIApplication *)application didReceiveRemoteNotification 正常打开推送后, } // 后台操作(根据收到推送,让程序自己执行一些操作,不管用户是否点击推送) - (void)application:(UIApplication *)application didReceiveRemoteNotification
APP端:在application:didReceiveRemoteNotification:fetchCompletionHandler:方法中监听所接收到的静默推送。
application.applicationIconBadgeNumber=0; } -(void)application:(UIApplication *)application didReceiveRemoteNotification