远程通知中app更新提示。
Posted 不及格的程序员-八神
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了远程通知中app更新提示。相关的知识,希望对你有一定的参考价值。
// // AppDelegate.m // SDJK // // Created by Jobs on 6/13/16. // Copyright (c) 2016 com.FlintInfo.dEMO. All rights reserved. // #import "AppDelegate.h" #import <SMS_SDK/SMSSDK.h> #import "YTKNetworkConfig.h" #import "YTKUrlArgumentsFilter.h" #import <BaiduMapAPI/BMKMapManager.h> #import <BaiduMapAPI/BMKLocationService.h> #import <BaiduMapAPI/BMapKit.h> #import "MessageBox.h" #import "AudioPlayerController.h" #import "JPUSHService.h" #define smsAppKey @"14de71d0c204e" #define smsAppSecret @"3b28f08695e5241779e274a9c05970e1" @interface AppDelegate () <BMKGeneralDelegate, BMKLocationServiceDelegate, JPUSHRegisterDelegate> { BMKMapManager *_mapManager; BMKLocationService *_locService; } @end @implementation AppDelegate #pragma mark - BMKGeneralDelegate /** *返回网络错误 *@param iError 错误号 */ - (void)onGetNetworkState:(int)iError { } /** *返回授权验证错误 *@param iError 错误号 : 为0时验证通过,具体参加BMKPermissionCheckResultCode */ - (void)onGetPermissionState:(int)iError { } #pragma mark - BMKLocationServiceDelegate /** *在将要启动定位时,会调用此函数 */ - (void)willStartLocatingUser { } /** *在停止定位后,会调用此函数 */ - (void)didStopLocatingUser { } /** *用户方向更新后,会调用此函数 *@param userLocation 新的用户位置 */ - (void)didUpdateUserHeading:(BMKUserLocation *)userLocation { } /** *用户位置更新后,会调用此函数 *@param userLocation 新的用户位置 */ - (void)didUpdateBMKUserLocation:(BMKUserLocation *)userLocation { self.locationCoordinate = userLocation.location.coordinate; if(CLLocationCoordinate2DIsValid(self.locationCoordinate) == YES) { NSLog(@"didUpdateUserLocation lat %f,long %f",userLocation.location.coordinate.latitude,userLocation.location.coordinate.longitude); [_locService stopUserLocationService]; } } - (CLLocationDistance) getCLLocationDistance:(CLLocationCoordinate2D)coordinateA TheTowCoordinate:(CLLocationCoordinate2D )coordinateB { CLLocationDistance dis; dis = BMKMetersBetweenMapPoints(BMKMapPointForCoordinate(coordinateA), BMKMapPointForCoordinate(coordinateB)) ; return dis; } /** *定位失败后,会调用此函数 *@param error 错误号 */ - (void)didFailToLocateUserWithError:(NSError *)error { } #pragma mark - viewcontroller - (void)setupRequestFilters { NSString *appVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"]; YTKNetworkConfig *config = [YTKNetworkConfig sharedInstance]; #if !defined (TestApi) config.baseUrl = @"https://121.42.156.51/"; config.serverIP = @"https://121.42.156.51"; config.serverPort = nil; #else config.baseUrl = @"https://121.42.156.51:10443/"; config.serverIP = @"https://121.42.156.51"; config.serverPort = @"10443"; #endif YTKUrlArgumentsFilter *urlFilter = [YTKUrlArgumentsFilter filterWithArguments:@{@"version": appVersion, @"UIID":[UIDevice currentDevice].identifierForVendor.UUIDString, @"name":[UIDevice currentDevice].name, @"model":[UIDevice currentDevice].model, @"appkey":@"297FF4A97FCDA4BC0ECF0BB18168034A" }]; [config addUrlFilter:urlFilter]; } -(void)initJPush:(NSDictionary*)launchOPtions { //NSString *advertisingId = [[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString]; //Required // if ([[UIDevice currentDevice].systemVersion floatValue] >= 10.0) // { //// JPUSHRegisterEntity * entity = [[JPUSHRegisterEntity alloc] init]; //// entity.types = UNAuthorizationOptionAlert|UNAuthorizationOptionBadge|UNAuthorizationOptionSound; //// [JPUSHService registerForRemoteNotificationConfig:entity delegate:self]; // } // else 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]; } //Required // init Push(2.1.5版本的SDK新增的注册方法,改成可上报IDFA,如果没有使用IDFA直接传nil ) // 如需继续使用pushConfig.plist文件声明appKey等配置内容,请依旧使用[JPUSHService setupWithOption:launchOptions]方式初始化。 static NSString *channel = @"Publish channel"; static BOOL isProduction = FALSE; #ifdef DEBUG isProduction = NO; #else isProduction = YES; #endif [JPUSHService setupWithOption:launchOPtions appKey:@"5b40040d828351e75003d2cb" channel:channel apsForProduction:isProduction advertisingIdentifier:nil]; } - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Override point for customization after application launch. NSDictionary *userInfo = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey]; if(userInfo != nil) { self.hasNotification = YES; self.notificationUserInfo = userInfo; if([userInfo objectForKey:@"update"]) { //[self alertUpdateApp]; } //NSLog(@"launching userInfo:%@", userInfo); //[MessageBox showMsg:[[userInfo description] stringByAppendingString:@"launch"]]; } [SMSSDK registerApp:smsAppKey withSecret:smsAppSecret]; [self setupRequestFilters]; // 注册百度地图 _mapManager = [[BMKMapManager alloc]init]; BOOL ret = [_mapManager start:@"wCjpTyCmWpARGmybaEkoHAs8flZOWAvR" generalDelegate:self]; if (!ret) { NSLog(@"manager start failed!"); } self.locationCoordinate = kCLLocationCoordinate2DInvalid; _locService = [[BMKLocationService alloc]init]; _locService.delegate = self; [_locService startUserLocationService]; [self basicSetup]; [self initJPush:launchOptions]; return YES; } -(void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification { application.applicationIconBadgeNumber = 0; NSLog(@"==left notifi:%@", [[UIApplication sharedApplication] scheduledLocalNotifications]); } -(void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings { } #pragma mark- JPUSHRegisterDelegate //// ios 10 Support //- (void)jpushNotificationCenter:(UNUserNotificationCenter *)center // willPresentNotification:(UNNotification *)notification // withCompletionHandler:(void (^)(NSInteger))completionHandler //{ // // Required //// NSDictionary * userInfo = notification.request.content.userInfo; //// if([notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) //// { //// [JPUSHService handleRemoteNotification:userInfo]; //// } //// completionHandler(UNNotificationPresentationOptionAlert); // 需要执行这个方法,选择是否提醒用户,有Badge、Sound、Alert三种类型可以选择设置 //} // //// iOS 10 Support //- (void)jpushNotificationCenter:(UNUserNotificationCenter *)center // didReceiveNotificationResponse:(UNNotificationResponse *)response // withCompletionHandler:(void (^)())completionHandler //{ // // Required //// NSDictionary * userInfo = response.notification.request.content.userInfo; //// if([response.notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) { //// [JPUSHService handleRemoteNotification:userInfo]; //// } //// completionHandler(); // 系统要求执行这个方法 //} -(void)alertUpdateApp { __weak typeof(self) ws = self; UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"当前app有新版本,是否马上更新?" message:nil preferredStyle:UIAlertControllerStyleAlert]; UIAlertAction *ok = [UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) { NSURL *url = [NSURL URLWithString:[ws.notificationUserInfo objectForKey:@"update"]]; [[UIApplication sharedApplication] openURL:url]; }]; UIAlertAction *cancel = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) { ; }]; [alert addAction:ok]; [alert addAction:cancel]; alert.view.backgroundColor = [UIColor whiteColor]; UIViewController *rootVC = [UIApplication sharedApplication].keyWindow.rootViewController; UIViewController *tempVC; while ((tempVC = rootVC.presentedViewController)) { rootVC = tempVC; } [rootVC presentViewController:alert animated:YES completion:^{ }]; } - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler { // Required, iOS 7 Support [JPUSHService handleRemoteNotification:userInfo]; completionHandler(UIBackgroundFetchResultNewData); NSLog(@"iOS7及以上系统,收到通知:%@", [self logDic:userInfo]); self.notificationUserInfo = userInfo; //[MessageBox showMsg:[[userInfo description] stringByAppendingString:@"ios7"]]; if([userInfo objectForKey:@"update"]) { [self alertUpdateApp]; } else { [[NSNotificationCenter defaultCenter] postNotificationName:receiveRemoteNotification object:self userInfo:userInfo]; } } - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo { // Required,For systems with less than or equal to iOS6 [JPUSHService handleRemoteNotification:userInfo]; NSLog(@"iOS6及以下系统,收到通知:%@", [self logDic:userInfo]); //[MessageBox showMsg:[[userInfo description] stringByAppendingString:@"ios6"]]; self.notificationUserInfo = userInfo; if([userInfo objectForKey:@"update"]) { [self alertUpdateApp]; } else { [[NSNotificationCenter defaultCenter] postNotificationName:receiveRemoteNotification object:self userInfo:userInfo]; } } // log NSSet with UTF8 // if not ,log will be \Uxxx - (NSString *)logDic:(NSDictionary *)dic { if (![dic count]) { return nil; } NSString *tempStr1 = [[dic description] stringByReplacingOccurrencesOfString:@"\\u" withString:@"\\U"]; NSString *tempStr2 = [tempStr1 stringByReplacingOccurrencesOfString:@"\"" withString:@"\\\""]; NSString *tempStr3 = [[@"\"" stringByAppendingString:tempStr2] stringByAppendingString:@"\""]; NSData *tempData = [tempStr3 dataUsingEncoding:NSUTF8StringEncoding]; NSString *str = [NSPropertyListSerialization propertyListFromData:tempData mutabilityOption:NSPropertyListImmutable format:NULL errorDescription:NULL]; return str; } - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { /// Required - 注册 DeviceToken [JPUSHService registerDeviceToken:deviceToken]; //[MessageBox showMsg:[deviceToken description]]; } - (void)applicationWillResignActive:(UIApplication *)application { // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game. } - (void)applicationDidEnterBackground:(UIApplication *)application { // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. } - (void)applicationWillEnterForeground:(UIApplication *)application { // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background. } - (void)applicationDidBecomeActive:(UIApplication *)application { // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. application.applicationIconBadgeNumber = 0; } - (void)applicationWillTerminate:(UIApplication *)application { // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. } #pragma mark -download backgroundSessionHandle- -(void)application:(UIApplication *)application handleEventsForBackgroundURLSession:(NSString *)identifier completionHandler:(void (^)())completionHandler { self.backgroundSessionCompletionHandler = completionHandler; } # pragma mark - Remote control - (void)basicSetup { // Remove control [[UIApplication sharedApplication] beginReceivingRemoteControlEvents]; [self becomeFirstResponder]; } - (BOOL)canBecomeFirstResponder { return YES; } - (void)remoteControlReceivedWithEvent:(UIEvent *)receivedEvent { if (receivedEvent.type == UIEventTypeRemoteControl) { switch (receivedEvent.subtype) { case UIEventSubtypeRemoteControlPause: [[AudioPlayerController audioPlayerController] stop]; break; case UIEventSubtypeRemoteControlStop: [[AudioPlayerController audioPlayerController] stop]; break; case UIEventSubtypeRemoteControlPlay: [[AudioPlayerController audioPlayerController] play]; break; case UIEventSubtypeRemoteControlTogglePlayPause: [[AudioPlayerController audioPlayerController] playerStatus]; break; case UIEventSubtypeRemoteControlNextTrack: [[AudioPlayerController audioPlayerController] theNextSong]; break; case UIEventSubtypeRemoteControlPreviousTrack: [[AudioPlayerController audioPlayerController] inASong]; break; default: break; } } } @end
以上是关于远程通知中app更新提示。的主要内容,如果未能解决你的问题,请参考以下文章
Android中使用Notification实现进度通知栏(示例三)