应用间的跳转

应用间的跳转

标签(空格分隔): ios进阶



在手机app中经常需要在应用间跳转,比如微信分享,支付宝付款,第三方登陆等。

简单的例子

这些都是很常见的应用,要实现这样的功能需要在应用程序中设置 URL Schemes(目标应用程序)

然后在程序中写如下代码就可以跳转了

- (IBAction)weixing {
     NSURL *url = [NSURL URLWithString:@"weixin://"];
    if ([[UIApplication sharedApplication] canOpenURL:url]) {
        [[UIApplication sharedApplication] openURL:url];
    }
}

跳转到目标应用程序的具体页面

  • 上面的例子是最简单的跳转,在实际应用中我们往往需要跳转到具体的页面,比如微信的好友页面,和微信的朋友圈页面

    这里我们自己建立了两个最简单的程序来说明这已跳转和返回的过程

    这里也把源应用程序的URL Schemes设置为”news”,把这个标志随跳转一起传到跳转的程序,好让跳转后通过这个标志能返回原程序,

//点击按钮跳到好友页面
- (IBAction)weixinghaoyou {
    [self openURLString:@"weixin://haoyou?news"];//把"news"传出去
}
//点击按钮跳到朋友圈页面
- (IBAction)weixingpenyouquan {
    [self openURLString:@"weixin://pengyou?news"];
}
- (void)openURLString:(NSString *)urlString
{
    NSURL *url = [NSURL URLWithString:urlString];
    NSLog(@"%@",url);
    if ([[UIApplication sharedApplication] canOpenURL:url]) {
        [[UIApplication sharedApplication] openURL:url];
    }
}
  • 在目标应用程序的AppDelegate方法中
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
    // 1.拿到主页控制器
    UINavigationController *rootNav = (UINavigationController *)self.window.rootViewController;
    [rootNav popToRootViewControllerAnimated:NO];
    ViewController *mainVc = [rootNav.childViewControllers firstObject];

    // 1.1.给根控制器的urlString属性赋值
    mainVc.urlString = url.absoluteString;

    // 2.根据URL跳转到固定的界面
    if ([url.absoluteString containsString:@"session"]) {
        // 跳转到朋友圈()
        [mainVc performSegueWithIdentifier:@"mainToSession" sender:nil];
    } else if ([url.absoluteString containsString:@"timeline"]){
        // 跳转到微信好友界面
        [mainVc performSegueWithIdentifier:@"mainToTimeline" sender:nil];
    }
    return YES;
}
  • 在跳转后返回原来的应用程序(控制器都有个成员属性url,能保存传过来的URL)
//将url传出去
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([segue.identifier isEqualToString:@"mainToSession"]) {
        SessionViewController *sessionVc = segue.destinationViewController;
        sessionVc.urlString = self.urlString;
    }
}
  • SessionViewController里面实现的点击返回原程序的按钮的方法:
- (IBAction)backToApp {
    // 1.拿到对应应用程序的URL
    NSString *urlString = [[self.urlString componentsSeparatedByString:@"?"] lastObject];
    NSString *appURLString = [NSString stringWithFormat:@"%@://", urlString];
    NSURL *url = [NSURL URLWithString:appURLString];

    // 2.判断一下应用程序是否可以打开,如果可以打开,则打开对应的应用程序
    if ([[UIApplication sharedApplication] canOpenURL:url]) {
        [[UIApplication sharedApplication] openURL:url];
    }
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-11-07 02:09:43

应用间的跳转的相关文章

iOS应用程序开发之应用间的跳转

简介 配置和实现 判断应用启动方式 一.简介 最实际项目开发中,我们难免会遇到需要从一个应用跳转到另一个应用的情况.比如微信分享,实际就是一种应用间的跳转.但是有时候我们需要实现自己的两个应用间的跳转,以便可以推广我们其他的应用.这个时候我们需要使用UIApplication的openURL:的方法 二.配置 1??注册自定义的URL 首先被启动的应用需要向iPhone注册一个自定义URL协议.这是在你的项目文件夹的info.plist文件进行的 1. 右键,选择“Add Row”, Key值选

Android Activity间动画跳转

本博文主要介绍activity间动画跳转的问题,在这里讲一下怎么设置全部activity的动画跳转和退出跳转.事实上有些软件已经这样做了.比方我们都比較熟悉的大众点评网. 以下我们通过一个实例来看一下怎么实现全部activity动画跳转.这里我们最好还是就模仿下大众点评网activity的动画跳转. 首先在layout/anim新建    anim_enter.xml [html] view plaincopy <? xml version="1.0" encoding=&quo

IOS APP与APP和APP与Safari间的跳转

最近做项目遇到这么一个需求:从APP 跳转到 Safari 然后再跳回APP .以前做过从APP 跳到Safari ,很简单,这里就不多说了.重点说一下从Safari跳回到APP,以及从APP跳到APP.(其实这两个几乎是一回事.) 首先从Safari跳到APP 既然要想跳到你指定的APP,那么就需要在你的APP中定义一个特殊的标示,也就是一个URL协议. 定义URL协议的如下图  TARGETS --> info -->URL Types-->添加一个URL协议 如图 其中URL Sc

不同视图间的跳转方式

从一个视图控制器切换到另一个视图控制器的几种方式 1,模态(modal)画面的显示方法: 例如iphone通讯录管理程序中,追加新的通讯纪录时,就是使用这种模态画面 例:点击一个按钮,进入另一个界面 - (void)goForward { ModalViewController * modalView = [[ModalViewControlleralloc]init]; modalView.modalTransitionStyle = UIModalTransitionStyleFlipHor

ctags-vim代码间快速跳转

ctags-vim代码间快速跳转 1.说明 在Linux环境下使用vim进行驱动程序编写和维护的时候,会经常需要调用Linux内核的函数或宏定义,在驱动程序和kernel代码之间频繁跳转是件很繁琐的事,使用ctags包可以轻松实现函数或宏定义的跳转. 2.配置方法 假设:系统中已经安装ctags. 举例: 以在Linux内核代码linux-3.5创建tags为例,建议先将linux-3.5内核代码编译通过,因为打上ctags包之后,再进行编译或者修改会破坏ctags环境,需要重新打ctags:内

ios业务模块间互相跳转的解耦方案

*此文章需有一点runtime的知识,假设你不了解runtime,<高速理解Runtime of Objective-C>: http://mp.weixin.qq.com/s?__biz=MzIxNDI0OTAzOQ==&mid=403005635&idx=1&sn=71375cb0dee51487c90087d488ff59fe#rd 问题: 一个app通常由很多个模块组成,全部模块之间免不了会相互调用,比如一个读书管理软件,可能会有书架.用户信息.图书详情等等模块

Spring mvc controller间的跳转

1. 需求背景 需求:spring MVC框架controller间跳转,需重定向.有几种情况:不带参数跳转,带参数拼接url形式跳转,带参数不拼接参数跳转,页面也能显示. 本来以为挺简单的一件事情,并且个人认为比较常用的一种方式,一百度全都有了,这些根本不是问题,但是一百度居然出乎我的意料,一堆都不是我想要的结果.无奈啊,自己写一篇比较全都供以后大家一百度吧,哈哈哈...是这些写的不是很全都人们给了我写这篇博客的动力. 2. 解决办法 需求有了肯定是解决办法了,一一解决,说明下spring的跳

IOS应用程序间相互跳转 与 传值

阅读本文之前建议参考:<Communicating with Other App程序间通信[翻译]> 在IOS中,实现在app1中打开app2,方法如下: 1,在app2中注册一个URL Schemes 注册的方法很简单,在XXX-info.plist文件中新增一个URL types数组元素,取一个名字,比如"tekuba_net".或者在工程的-TARGETS-Info,中找到URL Types添加一个URL Schemes,名为"tekuba_net"

ios-私人通讯录 页面间的跳转和传值

这个demo 有多个页面 并涉及顺传和逆传 而且还有一个第三方库的导入 来实现自定义提示消息的特效 利用代理来实现页面间的传值 一个页面代表一个controller 这次  ViewController  反而一句代码都没写 // // HMContact.h // 私人通讯录 // // Created by YaguangZhu on 15/9/6. // Copyright (c) 2015年 YaguangZhu. All rights reserved. // #import <Fou