遠程通知中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
相關文章
相關標籤/搜索