专栏首页Scott_Mr 个人专栏两个App之间调起通信

两个App之间调起通信

前言

经常使用一些app的分享功能,比如点击QQ分享,就从app打开(跳转到)QQ,然后分享完之后又回到我们的app,那么这是怎样实现的呢?

假设有这么一个需求,由app1跳转到app2,当app2完成任务之后,要把app2中的某些信息传到app1中(假设我们自己的程序是app1)

过程

我们创建两个新的工程,一个叫Test1,一个叫Test2。

本篇文章将使用Test1作为第一个app的URL Schemes,Test2作为第二个app的URL Schemes

Test1工程配置

由于iOS9.0之后跳转URL Schemes需要将添加白名单

对于URL Schemes中的Test1是本应用留给其他应用调用的。

Test2工程配置

对于URL Schemes中的Test2是本应用留给其他应用调用的。

Test1工程中测试代码

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
        // Test2是在Test2这个项目的info.plist中配置的URL Schemes
        if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"Test2://"]]) {
            [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"Test2://success=1&&name=test2"]];
        }
        return YES;
    }
    - (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
        NSString *str = [[url host] stringByRemovingPercentEncoding];
        NSLog(@"%@---%@",str, url.absoluteString); 
        return YES;
    }

我们首先需要判断手机是否安装了应用Test2,通过Test2工程公开的URL Schemes来判断,即Test2://。需要传参数时,是通过URL参数来传的。如:Test2://success=1&&name=test2就是一个URL。

Test2工程中测试代码

    - (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
        NSString *str = [[url host] stringByRemovingPercentEncoding];
        NSLog(@"%@---%@",str, url.absoluteString); 
        [self performSelector:@selector(goBackToApp1) withObject:nil afterDelay:2];
        return YES;
    }
    - (void)goBackToApp1 {
        if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"Test1://"]]) {
            [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"Test1://loginSuccess=1"]];
        }
    }

我们在- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url处理来自Test1应用的调用,获取到相应的参数了。

当我们处理数据完成,需要反馈给Test1时,就需要调用通过Test1://loginSuccess=1调用回到Test1并将状态带回去。

Test1打印日志

2016-06-05 23:23:09.807 test1[1277:219009] loginSuccess=1---Test1://loginSuccess=1

说明参数能从Test2正确地传递过来。

Test2打印日志

2016-06-05 23:22:15.008 test2[1243:216871] success=1&&name=test2---Test2://success=1&&name=test2

说明参数能从Test1正确地传递过来。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 两个App之间调起通信

    Scott_Mr
  • 程序员进阶之算法练习(一)

    Scott_Mr
  • 程序员进阶之算法练习(一)

    Scott_Mr
  • 两个App之间调起通信

    Scott_Mr
  • 提问 | 1、SPSS的文字类型处理问题 2、如何剔除不满三年的样本?

    来自经管之家 提问1: SPSS的文字类型处理问题,求大神教!! 在EXCEL中这样的数据类型转到SPSS怎么就成字符型再改为日期型还空白了呢? ? 解答: 这...

    CDA数据分析师
  • Tomcat在SpringBoot中是如何启动的?

    我们知道SpringBoot给我们带来了一个全新的开发体验,我们可以直接把web程序打成jar包,直接启动,这就得益于SpringBoot内置了容器,可以直接启...

    挨踢小子部落阁
  • P2P RTMFP Server - MonaServer 中事件(Event)的基本使用

    当Server的app被创建的时候并且第一次执行到的时候,才会调用这个事件,这个事件的第一个参数是app的path

    用户3765803
  • 白话TCP流量控制

    上篇(一个故事读懂TCP拥塞控制)讲的是拥塞控制,这篇讲流量控制。还是以运输粮食为场景。

    用户1260737
  • 使用触发器记录oracle用户登陆信息

          Oracle 提供了强大的审计功能,可以针对用户级,系统级范围,以及标准审计,细粒度审计等多种方式来审计各种数据库层面上的操作。然很多中小型数据库需...

    Leshami
  • CSS调用远程字体

    Demo 可以参考:http://idv3.sinaapp.com 中标题字体的用法,具体用法如下:

    大江小浪

扫码关注云+社区

领取腾讯云代金券