本文目录一览
- 1、Android 跨应用间调用: URL Scheme
- 2、微信付款码的URL Scheme参数是什么?
- 3、如何找出iOS App的URL Scheme
- 4、什么是URL的scheme
- 5、什么是URL?
- 6、用urlscheme打开微信支付,回调怎么做
Android 跨应用间调用: URL Scheme
Android中的自定义的 URL Scheme 是一种页面内跳转协议,也可以被称为 URLRouter ,就是通过类似打开网页的方式去通过路由打开一个Activity,而非直接通过显式Intent方式去进行跳转。这样隐式intent的方法跳转好处如下:
上文已经说过, URL Scheme 是就通过类似打开网页的方式去通过路由打开一个Activity,其协议格式和我们打开网页输入的网址类似。
一个完整的完整的URL Scheme协议格式由scheme、host、port、path和query组成,其结构如下所示:
其中scheme既可以是Android中常见的协议,也可以是我们自定义的协议。Android中常见的协议包括content协议、http协议、file协议等,自定义协议可以使用自定义的字符串,当我们启动第三方的应用时候,多是使用自定义协议。
如下是一个自定义协议的URI:
通过上面的路径 Scheme、Host、port、path、query全部包含:
URL Scheme 的使用方法简要言之就是先在manifest中配置能接受Scheme方式启动的activity;当需要调用时,将Scheme协议的URi以Data的形式加入到Intent中,隐式调用该activity。
1). 在AndroidManifest.xml中对activity 标签增加intent-filter设置Scheme
上面的设置中可以看到,MainActivity包含多个intent-filter设置,第一个是正常的启动,也就是在应用列表中启动;第二个是通过 URL Scheme 方式启动,其本身也是隐式Intent调用的一种,不同在于添加了data属性,定义了其接受 URL Scheme 协议格式为 urlschemel://auth_activity
这里需要说明下, URL Scheme 协议格式中,组成URI的这些属性在data 标签中都是可选的 ,但存在如下的依赖关系:
当我们将intent对象中的Uri参数与intent-filter中的data标签指定的URI格式进行对比时,我们只对比intent-filter的data标签指定的部分,例如:
需要注意的是,intent-filter的data标签在指定path的值时,可以在里面使用通配符*,起到部分匹配的效果。
2). 使用URL启动Activity
当然可以在网页中调用
或者是在JS中调用
3.)如何判断URL Scheme是否有效
有时候需要把一些辅助性的、较为独立的APP在Home Launcher中隐藏起来,只允许一些特定的APP调用。这个时候,我们可以利用 URL Scheme 协议来做到这一点,设置AndroidManifest.xml中对activity 标签如下
因为Home Launcher列出的应用图标要求必须有Activity同时满足
上面的配置中有多余的category和data限制存在,所以并不匹配,不会在Home Launcher出现,但是可以使用 URL Scheme 来启动。
这样就可以将一组APP设置一个统一的入口,然后根据实际需要在调用不同子APP,即所谓的 APP业务组件化 , URL Scheme 在其中有着重要的作用,更进一步讨论会在以后的文章中呈现,敬请期待。
参考文献:
http://blog.csdn.net/iispring/article/details/48481793
http://blog.csdn.net/hb707934728/article/details/53196419
http://www.cnblogs.com/whoislcj/p/5825333.html
微信付款码的URL Scheme参数是什么?
微信付款码的URL Scheme参数是由微信按照一定规则生成的一串18位纯数字,生成规则未知(肯定包含了微信用户身份标识)。
付款码的用途与商品条码是一样的,是用作智能POS、把枪等商户端线下设备扫微信用户条码/二维码使用的,不是用于app调用使用的,也无所谓URL Scheme。按照微信支付的 叫法,此类支付方式叫刷卡支付。
微信支付的扫码支付倒是提供了URL Scheme,具体参考 文档。
微信(WeChat)是腾讯公司于2011年1月21日推出的一个为智能终端提供即时通讯服务的免费应用程序,由张小龙所带领的腾讯广州研发中心产品团队打造。
微信支持跨通信运营商、跨操作系统平台通过网络快速发送免费(需消耗少量网络流量)语音短信、 、和文字,同时,也可以使用通过共享流媒体内容的资料和基于位置的社交插件“摇一摇”、“朋友圈”、”公众平台“、”语音记事本“等服务插件。
微信URL Schem其他参数:
weixin://dl/scan 扫一扫。
weixin://dl/feedback 反馈。
weixin://dl/moments 朋友圈。
weixin://dl/settings 设置。
weixin://dl/notifications 消息通知设置。
weixin://dl/chat 聊天设置。
如何找出iOS App的URL Scheme
方法一.Windows7系统下,用itools查找1.用itools查看iOS设备的应用程序,
2.浏览(打开)‘微博’app
3.打开Weibo.app文件夹,找到info.plist文件,
4.打开info.plist文件,找到keyCFBundleURLSchemes/key一行,下面一行string…/string中间的都是‘微博’app的URL Scheme。
方法二.在越狱iOS6系统下,用iFile查找
1.打开iFile,通过路径/var/mobile/Applications下找到‘微博’文件夹(如果Applications目录下是乱码,请在偏好设置中设定显示应用名)。
2.进入‘微博’文件夹中。
3.打开Weibo.app文件夹
4.找到并用文本形式打开Info.plist文件。
5. 找到keyCFBundleURLSchemes/key一行,下面一行string…/string中间的都是‘微博’app的URL Scheme。
转载仅供参考,版权属于原作者。祝你愉快,满意请采纳哦
什么是URL的scheme
URL是什么意思啊?什么的位置啊!谁能详细的告诉我 URL abbr. Uniform 网站的万维网 URL 地址。 URL的一般格式为: scheme://host:port/path?什么是URL?
统一资源定位符(URL,英语Uniform Resource Locator的缩写)也被称为网页地址,是因特网上标准的资源的地址。它最初是由蒂姆·伯纳斯-李发明用来作为万维网的地址的。现在它已经被万维网联盟编制为因特网标准RFC1738了。在因特网的历史上,统一资源定位符的发明是一个非常基础的步骤。统一资源定位符的语法是一般的,可扩展的,它使用ASCII代码的一部分来表示因特网的地址。一般统一资源定位符的开始标志着一个计算机网络所使用的网络协议。
用urlscheme打开微信支付,回调怎么做
微信支付的回调首先,支付回调API的方法,这个方法中完全是按照 文档写的,自己基本上不需要操作
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication
annotation:(id)annotation
{
//如果极简开发包不可用,会跳转支付宝钱包进行支付,需要将支付宝钱包的支付结果回传给开发包
if ([url.host isEqualToString:@"safepay"]) {
[[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {
//【由于在跳转支付宝客户端支付的过程中,商户app在后台很可能被系统kill了,所以pay接口的callback就会失效,请商户对standbyCallback返回的回调结果进行处理,就是在这个方法里面处理跟callback一样的逻辑】
}[[AlipaySDK defaultService] processAuthResult:url standbyCallback:^(NSDictionary *resultDic) {
//【由于在跳转支付宝客户端支付的过程中,商户app在后台很可能被系统kill了,所以pay接口的callback就会失效,请商户对standbyCallback返回的回调结果进行处理,就是在这个方法里面处理跟callback一样的逻辑】
}];
}
if ([sourceApplication isEqualToString:@"com.tencent.xin"]) {
//微信支付回调
return [WXApi handleOpenURL:url delegate:self];
}
//跳转处理
BOOL result = [UMSocialSnsService handleOpenURL:url];
if (result == FALSE) {
//调用其他SDK,例如支付宝SDK等
}
return result;
}
最后微信会调用下面这个方法,我是在这个方法中做的操作,由于这个方法是在AppDelegate中,如果在这里跳转到自己指定的页面,有些困难,
于是就在这个方法中发通知到调起支付的页面,再进行页面跳转操作。
//回调方法
-(void) onResp:(BaseResp*)resp
{
NSString *strMsg = [NSString stringWithFormat:@"errcode:%d", resp.errCode];
NSString *strTitle;
if([resp isKindOfClass:[SendMessageToWXResp class]])
{
strTitle = @"发送媒体消息结果";
}
if([resp isKindOfClass:[PayResp class]]){
//支付返回结果,实际支付结果需要去微信服务器端查询
strTitle = [NSString stringWithFormat:@"支付结果"];
switch (resp.errCode) {
case WXSuccess:{
strMsg = @"恭喜您,支付成功!";
[MYNotificationCenter postNotificationName:@"weixinPaystatusSuccess" object:nil userInfo:@{@"status":@"success"}];
break;
}
case WXErrCodeUserCancel:{
strMsg = @"已取消支付!";
[MYNotificationCenter postNotificationName:@"weixinPaystatusSuccess" object:nil userInfo:@{@"status":@"cancle"}];
break;
}
default:{
strMsg = [NSString stringWithFormat:@"支付失败 !"];
[MYNotificationCenter postNotificationName:@"weixinPaystatusSuccess" object:nil userInfo:@{@"status":@"cancle"}];
break;
}
}
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:strTitle message:strMsg delegate:self cancelButtonTitle:@"确定" otherButtonTitles:nil, nil];
[alert show];
}
}
由于我们的取消和失败,2种状态的处理结果都是一样的,所以就用了相同的通知。
由于在调起支付页面,在调起前就已经注册了通知,现在支付完后,就可以收到支付状态的通知了。下面就很简单了吧
最后在说一下,
由于我们的付款性质不一样,所以就遇到了同样的支付成功状态,由于不同的支付类型要跳转的页面也是不同的,这就要求在AppDelegate中的那个处理方法中识别出,不同的支付类型,(如充值,购物等)但是这个方法是微信api回调的方法,它只返回成功,取消,失败等状态。那就只能是支付前做个识别标示,但是由于支付跳到api了,脱离了应用,这个识别标示又无法直接传过来。我想的方法就是保存一个支付标示:
[[NSUserDefaults standardUserDefaults] setObject:@"CHONGZHI" forKey:@"PAYTYPE"];
在每个类型的支付调起方法中,保存一下不同的key,然后再那个
-(void) onResp:(BaseResp*)resp
- 随机文章