android 拦截自定义协议,Android / iOS – 自定义URI /协议处理

编辑5/2014,因为这似乎是一个受欢迎的问题,我已经添加了很多细节的答案:

安卓:

对于Android, 单击自定义URI时 ,请参阅意图filter以启动“我的活动” 。

您使用意图filter:

这附加到您要启动的活动。 例如:

然后,在你的活动中,如果没有运行,活动将通过在Intent中传递的URI来启动。

Intent intent = getIntent(); Uri openUri = intent.getData();

如果已经运行,onNewIntent()将在您的活动中被调用,同样在意图中使用URI。

最后,如果您不想在您的本机应用程序中托pipeUIWebView托pipe的自定义协议,则可以使用:

myWebView.setWebViewClient(new WebViewClient() { public Boolean shouldOverrideUrlLoading(WebView view, String url) { // inspect the url for your protocol } });

iOS版:

对于iOS,请参阅在iOS 4下工作的URL(通过UIApplicationDelegate的handleOpenURL),但不在iOS 3.2下 。

通过Info.plist键定义您的URLscheme,类似于:

CFBundleURLTypesCFBundleURLNamecom.yourcompany.myappCFBundleURLSchemesmyapp

然后定义一个处理函数在你的应用程序委托中被调用

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation { // parse and validate the URL }

如果您想在您的本机应用程序中托pipe的UIWebViews中处理自定义协议,则可以使用UIWebViewDelegate方法:

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { NSURL *urlPath = [request URL]; if (navigationType == UIWebViewNavigationTypeLinkClicked) { // inspect the [URL scheme], validate if ([[urlPath scheme] hasPrefix:@"myapp"]) { ... } } }

}

对于WKWebView (iOS8 +),您可以使用WKNavigationDelegate和此方法:

- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler { NSURL *urlPath = navigationAction.request.URL; if (navigationAction.navigationType == WKNavigationTypeLinkActivated) { // inspect the [URL scheme], validate if ([[urlPath scheme] hasPrefix:@"myapp"]) { // ... handle the request decisionHandler(WKNavigationActionPolicyCancel); return; } } //Pass back to the decision handler decisionHandler(WKNavigationActionPolicyAllow); }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值