• 远程通知中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
    

      

  • 相关阅读:
    Difference between ClassNotFoundException and NoClassDefFoundError 规格严格
    RPM包。。。 规格严格
    Cygwin sshd Apache sshd 规格严格
    查看真实物理CPU个数 规格严格
    工具类网页 规格严格
    探测无线网卡。 规格严格
    DB2 Error 规格严格
    AIX 安装SSH 规格严格
    美国GIS研究的19个方向
    史上最有趣的Readme
  • 原文地址:https://www.cnblogs.com/ioriwellings/p/6192737.html
Copyright © 2020-2023  润新知