变更记录

序号 录入时间 录入人 备注
1 2015-03-18 Alfred Jiang -
2 2015-12-18 Alfred Jiang -

方案名称

AppDelegate - iOS APP Launch Options

关键字

AppDelegate \ UIApplication \ iOS程序结构 \ didFinishLaunchingWithOptions \ 应用启动

需求场景

  1. 需要对应用启动进行类别区分时

参考链接

  1. NSHipster - UIApplicationDelegate launch Options
  2. Apple documentation - UIApplication Class Reference

详细内容

  • iOS 程序启动时总会调用 application:didFinishLaunchingWithOptions: ,其中第二个参数 launchOptionsNSDictionary 类型的对象,里面存储有此程序启动的原因。

  • launchOptions 中的可能键值见 UIApplication Class ReferenceLaunch Options Keys 节。

  • 若用户直接启动, lauchOptions 内无数据;

  • 若由其他应用程序通过 openURL: 启动,则 UIApplicationLaunchOptionsURLKey 对应的对象为启动 URL(NSURL) , UIApplicationLaunchOptionsSourceApplicationKey 对应启动的源应用程序的 **bundle ID (NSString)**;

  • 若由本地通知启动,则 UIApplicationLaunchOptionsLocalNotificationKey 对应的是为启动应用程序的的 **本地通知对象 (UILocalNotification)**;

  • 若由远程通知启动,则 UIApplicationLaunchOptionsRemoteNotificationKey 对应的是启动应用程序的的 **远程通知信息 userInfo(NSDictionary)**;

  • 其他key还有:

    • UIApplicationLaunchOptionsAnnotationKey
    • UIApplicationLaunchOptionsLocationKey
    • UIApplicationLaunchOptionsNewsstandDownloadsKey
  • 如果要在启动时,做出一些区分,那就需要在下面的代码做处理。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
NSURL *url = [options objectForKey:UIApplicationLaunchOptionsURLKey];

if(url){
//
}

NSString *bundleId = [options objectForKey:UIApplicationLaunchOptionsSourceApplicationKey];

if(bundleId){
//
}

UILocalNotification * localNotify = [options objectForKey:UIApplicationLaunchOptionsLocalNotificationKey];

if(localNotify){
//
}

NSDictionary * userInfo = [options objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];

if(userInfo){
//
}
}

效果图

(无)

备注

(无)