您的位置:首页 > 移动开发 > IOS开发

ios打开手机另一个应用的指定的页面

2014-05-07 11:58 363 查看
最近公司要求实现从分享的链接里能够直接打开应用并跳转到指定的页面。

于是在网上查阅了不少资料,并且在自己的demo里实现了下。

首先第一步要实现的是在应用中打开另一个应用,那么大家知道苹果的app打开另一个应用是通过

[[UIApplication
sharedApplication] openURL:url];

这个方法来打开的,那么要打开本地的另一个应用,你需要这个应用在本地的url。怎样给这个应用设置一个本地可以调用的url,打开这个程序,在程序的.plist的文件里

找到URL Schemes添加一个item 命名为myapp(这个可以自定义)

如果还没有URL Schemes可以在URL types中添加会自动提醒一个

这样你就可以在你的其他应用中通过调用这个url打开这个应用,具体的方法就是

NSURL *url = [NSURL
URLWithString:@"myapp://docid=23344&&channelid=88888"];

    [[UIApplication
sharedApplication] openURL:url];

这样就实现了第一步打开要调用的应用,myapp://就是本地的url,后面的参数则是你要传递的参数,这是为了后面打开应用中指定的页面做准备。

好了,我们开始第二步。

大家知道,在打开你需要的应用的时候,这个应用有可能处在两种状态,一种是没有运行,一种是在后台运行

首先处理下应用处在未运行的状态的情况

这个时候通过调用本地url打开这个应用的时候,程序是从

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary
*)launchOptions
这个delegate方法中进入的,那么我们要得到的url以及url中传递过来的参数就包含在launchOptions这个参数中,你可以将其打印下,然后根据内容取得你所需的参数,这里有个地方需要注意下,很多第一次接触的开发者会通过
if (launchOptions!=nil)
来做个简单的判断区分程序的打开方式的不同,但值得注意的是,如果你的程序中加入了推送功能,那么从推送打开程序的时候launchOptions同样不等于nil,所以在这里有必要进行深入一步的判断

[launchOptions objectForKey:@"UIApplicationLaunchOptionsRemoteNotificationKey"];

通过这个值可以准确的判断程序是从哪里打开的,这里我就不详细得去写了,大家可以获取下看下里面的值来判断一下。

好,到这一步取得本地url的参数后,你就可以打开程序中指定的页面了,比如我做的是一个新闻页的app,那么我获取到url中传过来的docid和channelid两个参数,我就可以把着两个参数赋给我程序中得新闻页面,根据docid和channelid获取我的正文内容然后跳转到正文页,这里根据大家自己的程序来传递参数,跳转页面。

现在再来处理下程序处在后台运行的情况:
程序处在后台运行的情况下,那么你通过本地url在别的应用中打开程序的时候,程序不会调用
- (BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

这个方法,而是调用

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString
*)sourceApplication annotation:(id)annotation

这两个方法,这两个方法中得参数url就是你调用传递过来的本地url,你可以在这个参数中获取你传递过来的参数,然后和上面第一种情况说的一样通过参数来跳转到指定的程序界面。

希望通过这篇博客能够对大家有所帮助。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: