打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
iOS-应用间通信之自定义URL Schemes
一、URL Schemes知识的了解
URL Scheme是类似http://, ftp://这样的东西,同样你也可以为自己的应用自定URL Scheme,其他应用通过此标识就可以访问你的应用,如果自定的URL Scheme 和系统应用的相同,则会调用系统应用,而不会调用自定的应用程序。
例如:invoking://com.hello/yourpath/?username=WT&password=123456&callback=myapp
其中invoking是URL Scheme 即[url scheme],com.hello是host,即[url host], yourpath是path,即[url path],username=WT&password=123456&callback=myapp是query,即[url query]。
二、调用自己开发的应用
1)在plist文件中,注册自定对外接口
CFBundleURLName(URL Identifier) A string containing the abstract name of the URL scheme. To ensure uniqueness, it is recommended that you specify a reverse-DNS style of identifier, for example, com.acme.myscheme.The string you specify is also used as a key in your app’s InfoPlist.strings file. The value of the key is the human-readable scheme name.
CFBundleURLSchemes(URL Schemes) An array of strings containing the URL scheme names—for example, http, mailto, tel, and sms.
可以设置多个(URL Schemes),设置成功后如下:
调用方的部分代码如下:
[objc] view plaincopy
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
CGRect rectTextView= CGRectMake(10.0f, 30.0f, 300.0f, 100.0f);
self.textView = [[UITextView alloc] initWithFrame:rectTextView];
[self.textView.layer setBorderColor:[UIColor lightGrayColor].CGColor];
[self.textView.layer setBorderWidth:0.5f];
[self.textView setText:@"username=WT&password=123456&callback=invoking"];
[self.view addSubview:self.textView];
CGRect rect = CGRectMake(10.0f, 150.0f, 300.0f, 40.0f);
UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
button.frame = rect;
[button setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
[button setTitle:@"Login" forState:UIControlStateNormal];
[button setBackgroundColor:[UIColor blueColor]];
[button addTarget:self action:@selector(handle:) forControlEvents:UIControlEventTouchUpInside];
[button.layer setMasksToBounds:YES];
[button.layer setCornerRadius:5.0f];
[self.view addSubview:button];
}
- (void)handle:(id)sender
{
NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:
@"invoked://com.hello/path?%@", self.textView.text]];
if ([[UIApplication sharedApplication] canOpenURL:url]) {
[[UIApplication sharedApplication] openURL:url];
} else {
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"message"
message:[NSString stringWithFormat:@"%@", url]
delegate:self cancelButtonTitle:@"确定"
otherButtonTitles:nil, nil nil];
[alertView show];
}
}
被调用方的接收代码:
[objc] view plaincopy
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
NSLog(@"%@", url);
if ([[url scheme] isEqualToString:@"invoked"]) {
if ([[url host] isEqualToString:@"com.hello"]) {
NSString *query = [url query];
NSArray *array = [query componentsSeparatedByString:@"&"];
NSMutableDictionary *dic = [NSMutableDictionary dictionaryWithCapacity:10];
for (NSString *item in array) {
NSArray *valueArray = [item componentsSeparatedByString:@"="];
[dic setValue:[valueArray objectAtIndex:1] forKey:[valueArray objectAtIndex:0]];
}
[self application:application didFinishLaunchingWithOptions:dic];
}
return YES;
}
return NO;
}
同样,可以在传入参数中设置一些预留字段,以便以后扩展,要实现再能够回调回去,就可以加一个callback字段,如:callback=myapp 后面跟上自己应用的URL Scheme,再将执行完成的结果返回回去。代码处理和被调用方大致相同。
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
iOS微信支付
重新熟悉一下CallBack
iOS-获取当前网页的 url 和 title 和 html
UITextView的动态适应高度处理
【IOS】ios中NSUserDefault与android中的SharedPreference用法简单对比
UITextView的使用详解
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服