iOS — 通过openURL实现APP之间跳转并传递数据

释放双眼,带上耳机,听听看~!

在博客iOS — 通过UIApplication的openURL来实现APP之间的相互跳转中, 介绍了如何实现iOS APP之间的相互跳转, 使用的就是UIApplication的openURL:方法.
那么, 如果想要在openURL方法中传递参数和数据, 应该如何实现呢?

AppDelegate的application:openURL:options方法

- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString*, id> *)options

当使用openURL从其他APP跳转至当前APP时, 该方法会自动调用.

通过URL传递参数

在AppDelegate的application:openURL:options方法中, 参数url在两个APP都是一样的值.
如在APP DemoOpenURL中,

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"demomixpanel://params?param1=111&param2=222"]];

则在APP DemoMixpanel的AppDelegate.m文件的application:openURL:options方法中, 即可获取该url的完整信息.

- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString*, id> *)options {
    NSLog(@"url: %@", url);
}

这样, 就通过URL本身在两个APP之间传递了参数.
该参数的格式与Http请求的GET格式保存一致.

通过UIPasteboard传递数据

通过URL只能简单地传递参数, 如果要传递负责的数据如image就只能通过剪贴板UIPasteboard了.

如在APP DemoOpenURL中, 向系统剪贴板中填充数据:

UIPasteboard *pasteboard = [UIPasteboard generalPasteboard];
pasteboard.string = @"Modal.jpg";
pasteboard.image = [UIImage imageNamed:@"Modal.jpg"];

// NSData *imageData = UIImageJPEGRepresentation([UIImage imageNamed:@"Modal.jpg"], 0);
// [pasteboard setData:imageData forPasteboardType:@"Modal.jpg"];

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"demomixpanel://params?param1=111&param2=222"]];

则在APP DemoMixpanel中, 从剪贴板中取出数据便可以使用:

- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString*, id> *)options {
    NSLog(@"url: %@", url);

    UIPasteboard *pasteboard = [UIPasteboard generalPasteboard];
    // label.text = pasteboard.string;    
    // imageView.image = pasteboard.image;
    // NSData *imageData = [pasteboard dataForPasteboardType:@"Modal.jpg"];
    // imageView.image = [UIImage imageWithData:imageData];
}

Demo

Demo地址:
DemoOpenURL,
DemoMixpanel

 

人已赞赏
iOS文章

iOS 实现两个APP之间跳转

2019-9-27 15:20:02

iOS文章

iOS-URL Schemes 使用详解

2019-9-27 18:02:06

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
有新消息 消息中心
搜索