iOS,AppDelegate介紹

1.介紹服務器

2.方法app

3.第三方調用(Open URL)函數

3.通知url

介紹spa

       AppDelegate就是iOS的垃圾場。App的生命週期管理?URL處理?通知?CoreData?大量第三方SDK的初始化?還有那些看起來放到哪裏都不合適的函數?通通都被塞到AppDelegate.m裏面code

       這全部之中,application:didFinishLaunchingWithOptions:是最擁擠的一個。對於許多開發者來講,launchOptions參數如同Java main函數的String[]參數同樣,被忽視了。然而,擺在眼前的事實是,launchOptions包含了許多關鍵性知識,涉及了app在iOS上的衆多啓動方式 對象

方法blog

//當應用程序啓動時(不包括已在後臺的狀況下轉到前臺),調用此回調。
– (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions NS_AVAILABLE_IOS(3_0);
//當應用程序全新啓動,或者在後臺轉到前臺,徹底激活時,都會調用這個方法。若是應用程序是之前運行在後臺,這時能夠選擇刷新用戶界面。
– (void)applicationDidBecomeActive:(UIApplication *)application;
//當應用從活動狀態主動到非活動狀態的應用程序時會調用這個方法。這可致使產生某些類型的臨時中斷(如傳入電話呼叫或SMS消息)。或者當用戶退出應用程序,它開始過渡到的背景狀態。使用此方法能夠暫停正在進行的任務,禁用定時器,下降OpenGL ES的幀速率。遊戲應該使用這種方法來暫停遊戲。
– (void)applicationWillResignActive:(UIApplication *)application;
//當用戶經過其它應用啓動本應用時,會回調這個方法,url參數是其它應用調用openURL:方法時傳過來的。
– (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation NS_AVAILABLE_IOS(4_2);
//當應用可用內存不足時,會調用此方法,在這個方法中,應該儘可能去清理可能釋放的內存。若是實在不行,可能會被強行退出應用。
– (void)applicationDidReceiveMemoryWarning:(UIApplication *)application;
//當應用退出,而且進程即將結束時會調到這個方法,通常不多主動調到,更可能是內存不足時是被迫調到的,咱們能夠在這個方法裏作一些數據存儲操做。
– (void)applicationWillTerminate:(UIApplication *)application;
//當客戶端註冊遠程通知時,會回調下面兩個方法。
//若是成功,則回調第一個,客戶端把deviceToken取出來發給服務端,push消息的時候要用。
//若是失敗了,則回調第二個,能夠從error參數中看一下失敗緣由。
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken NS_AVAILABLE_IOS(3_0);
- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error NS_AVAILABLE_IOS(3_0);
//當應用在前臺運行中,收到遠程通知時,會回調這個方法。
//當應用在後臺狀態時,點擊push消息啓動應用,也會回調這個方法。
– (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo 
//當應用收到本地通知時會調這個方法,若是在前臺運行狀態直接調用,若是在後臺狀態,點擊通知啓動時,也會回調這個方法
– (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification NS_AVAILABLE_IOS(4_0);
//當用戶從臺前狀態轉入後臺時,調用此方法。使用此方法來釋放資源共享,保存用戶數據,無效計時器;並儲存足夠的應用程序狀態信息的狀況下被終止後,將應用程序恢復到目前的狀態。若是您的應用程序支持後臺運行,這種方法被調用,不然調用applicationWillTerminate:用戶退出。
– (void)applicationDidEnterBackground:(UIApplication *)application NS_AVAILABLE_IOS(4_0);
//當應用在後臺狀態,將要進行動前臺運行狀態時,會調用此方法。若是應用不在後臺狀態,而是直接啓動,則不會回調此方法。
– (void)applicationWillEnterForeground:(UIApplication *)application NS_AVAILABLE_IOS(4_0);

 

第三方調用(Open URL)token

 

      application:didFinishLaunchingWithOptions: 經過該方法通知的第三方app打開該應用(通常在應用被殺死狀況下會進入)。生命週期

      -(BOOL)application: openURL: options:經過該方法通知的第三方app打開該應用((該方法在app還未被殺掉會進入這個)


      launchOptions裏面還會附帶下面這些key:
UIApplicationLaunchOptionsURLKey: 標示了該應用程序是爲了打開一個URL啓動。這個Key對應的值是一個NSURL對象,表示要打開的URL。
UIApplicationLaunchOptionsSourceApplicationKey: 標示了要求啓動你的程序的那個app。對應的值是一個NSString,表示那個app的bundle ID。
UIApplicationLaunchOptionsAnnotationKey: 標示了要求打開URL的那個app提供的自定義數據。對應的值是一個property-list類型的對象,包含自定義的數據。 

 

通知

     推送通知

     //註冊推送通知

//註冊推送通知
-(void)registerRemoteNotification{
    // iOS8 下須要使用新的 API
    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0) {
        UIUserNotificationType myTypes = UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert;
        
        UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:myTypes categories:nil];
        [[UIApplication sharedApplication] registerUserNotificationSettings:settings];
    }else {
        [[UIApplication sharedApplication] registerForRemoteNotificationTypes:UIRemoteNotificationTypeBadge|UIRemoteNotificationTypeAlert|UIRemoteNotificationTypeSound];
    }
}

 

 

 

 

// 在 iOS8 系統中,還須要添加這個方法。經過新的 API 註冊推送服務
-(void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings{
    [application registerForRemoteNotifications];
}

//註冊推送服務成功獲取deviceToken
-(void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken{
    //官方文檔上建議開發者在每次啓動應用時應該都向APNS獲取device token並上傳給服務器。
    //處理空格和<>
    NSString *deviceTokenString=[[[[deviceToken description] stringByReplacingOccurrencesOfString: @"<" withString: @""] stringByReplacingOccurrencesOfString: @">" withString: @""]stringByReplacingOccurrencesOfString: @" " withString: @""];
    NSLog(@"deviceToken:%@",deviceTokenString);
}
//註冊推送服務失敗
-(void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error{
    NSLog(@"註冊推送通知失敗:%@",[error.userInfo valueForKey:@"NSLocalizedDescription"]);
}

 

   //接收推送通知

      接收到推送通知後,若是app當前處於前臺運行狀態,appDelgate的 application:didReceiveRemoteNotification:方法會被調用。然而,當app是由於用戶滑動通知中心的推送消息而 啓動時,application:didFinishLaunchingWithOptions:方法會被調用。這個時候,launchOption裏面 會包含名爲UIApplicationLaunchOptionsRemoteNotificationKey的key: 代表app有一個推送通知等待處理。這個key對應的值是一個包含了推送通知負載信息的NSDictionary。

//這樣看來,就有兩個地方要寫處理推送通知的代碼。所以,一個一般的作法是在application:didFinishLaunchingWithOptions:裏面手動調用application:didReceiveRemoteNotification::
- (BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    if (launchOptions[UIApplicationLaunchOptionsRemoteNotificationKey]) {
        [self application:application didReceiveRemoteNotification:launchOptions[UIApplicationLaunchOptionsRemoteNotificationKey]];
    }
}

   本地通知

     //設置本地通知

//設置本地通知
-(void)registerLocalNotification{
    UILocalNotification *notification=[[UILocalNotification alloc] init];
   
    if (notification == nil) {
        return;
    }
    //設置本地通知的觸發時間(若是要當即觸發,無需設置),這裏設置爲20妙後
    notification.fireDate = [NSDate dateWithTimeIntervalSinceNow:5];
    //設置本地通知的時區
    notification.timeZone = [NSTimeZone defaultTimeZone];
    //通知內容
    notification.alertBody=@"起牀了小笨蛋。。。";
    //通知被觸發時播放的聲音
    notification.soundName=UILocalNotificationDefaultSoundName;

     //本地自定義聲音文件,一遍2到4秒

     //notification.soundName=@"BELL.WAV";

//    //通知重複提示的單位能夠是天、周、月
//    notification.repeatInterval=NSCalendarUnitMinute;
    
    //在規定的日期觸發通知
    [[UIApplication sharedApplication] scheduleLocalNotification:notification];
    
    //當即觸發一個通知
    //    [[UIApplication sharedApplication] presentLocalNotificationNow:notification];
}

     與推送通知不一樣,UIApplication的delegate方法提供了一個統一的處理本地通知的地方。若是一個app是被本地通知啓動的,會先 調用application:didReceiveLocalNotification:方法,而後纔會調用 application:didFinishLaunchingWithOptions:(所以,就不須要在 application:didFinishLaunchingWithOptions:裏面手動調用 application:didReceiveLocalNotification了)。

 

本地通知在launchOptions裏面的key爲UIApplicationLaunchOptionsLocalNotificationKey,對應的值爲UILocalNotification對象

相關文章
相關標籤/搜索