zoukankan      html  css  js  c++  java
  • 两个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需要将添加白名单
    图1
    对于URL Schemes中的Test1是本应用留给其他应用调用的。

    Test2工程配置

    图2
    对于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正确地传递过来。

  • 相关阅读:
    北邮OJ103.反转单词 c++/java
    北邮oj 104. 912星球的研究生
    北邮oj 97. 二叉排序树
    北邮OJ 89. 统计时间间隔 java版
    用欧几里得定理求最大公约数和最小公倍数
    shell执行${var:m:n}报错Bad substitution解决办法
    基于ffmpeg不同编码方式转码后的psnr对比
    ffmpeg使用ss与t参数对视频进行剪辑
    黑菜菌的JAVA学习笔记
    Linux服务器内存监控—每小时检查&超出发送邮件&重启占用最高的Java程式
  • 原文地址:https://www.cnblogs.com/scott-mr/p/8947624.html
Copyright © 2011-2022 走看看