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对象

相关文章
相关标签/搜索