两个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正确地传递过来。

版权声明:本文版权归作者所有,遵循 CC 4.0 BY-SA 许可协议, 转载请注明原文链接
https://www.cnblogs.com/scott-mr/p/8947624.html

两个imageView实现图片轮播-编程思维

前言 在不少的项目中,都会用到图片轮播这个功能,现在网上关于图片轮播的轮子也层出不穷,千奇百怪,笔者根据自己的思路,用两个imageView也实现了图片轮播,这里给大家介绍笔者的主要思路以及大概步骤。 轮播实现步骤 层级结构 最底层是一个UIView,上面有一个UIScrollView和UIPageControl,sc

如何正确使用const(常量),define(宏)-编程思维

前言 在开发中,也许我们会经常使用到宏定义,或者用const修饰一些数据类型,经常有开发者不知道怎么正确使用,导致项目中乱用宏定义与const修饰符。本篇主要介绍在开发中怎么正确使用const与define(宏定义) 当我们想定义全局共用的一些数据时,比如通知名字,动画时长等等,我们可以用宏、常量、变量: 宏: /

自定义转场详解(一)-编程思维

前言 本文是我学习了onevcat的这篇转场入门做的一点笔记。 今天我们来实现一个简单的自定义转场,我们先来看看这篇文章将要实现的一个效果图吧: 过程详解 热身准备 我们先创建一个工程,首先用storyboard快速的创建两个控制器,一个作为主控制器,叫ViewController,另外一个作为present出来的

用 notion 管理信用卡与花呗-编程思维

用 notion 管理信用卡与花呗 Notion原文,排版更佳 概述 不需要提醒功能和安卓用户可以忽略Scriptable和快捷指令 app的设置 Notion 建立信用卡表格,录入信用卡基本信息,自动计算还款日 使用 Scriptable iOS app 建立屏幕组件,调用 notion 私人 API 获取即将要还款