在博客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¶m2=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¶m2=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
网友评论