如何检测Android设备浏览器访问链接并发送至应用做欺诈分析?
移动端欺诈链接检测Overlay应用:读取浏览器URL方案
Android 平台实现
核心权限要求
- 悬浮窗权限:
SYSTEM_ALERT_WINDOW,Android 6.0+得引导用户去系统设置手动开启,光靠代码申请不够。 - 辅助功能权限(Accessibility Service):这是能拿到浏览器URL的关键——Android没有直接API跨App拿数据,辅助功能可以监听浏览器的界面变化,抓地址栏内容。
具体操作步骤
- 写个继承
AccessibilityService的辅助服务类,在onAccessibilityEvent方法里监听浏览器的界面节点变化。 - 遍历浏览器的视图树,找地址栏控件:不同浏览器的控件ID不一样,比如Chrome的地址栏ID是
com.android.chrome:id/url_bar,UC、QQ浏览器得单独适配。 - 捕获地址栏内容变化:一旦检测到地址栏文本更新,就把它取出来当当前URL,然后通过本地广播、Binder或者Content Provider把URL传给你的Overlay应用。
- 悬浮窗展示结果:Overlay应用拿到URL后,调用后端API分析,把结果显示在悬浮窗里。
要踩的坑
- 主流浏览器都得适配,每个的控件结构可能不一样,得做兼容。
- 辅助服务需要用户手动开,得做个清晰的引导页面告诉用户怎么操作。
- 别让系统把辅助服务杀了:申请
FOREGROUND_SERVICE权限,把服务设成前台服务,挂个通知保活。
iOS 平台实现
系统限制说明
iOS沙盒管得严,普通App没法直接读其他App(包括浏览器)的URL,只能用官方允许的两种方式:
方案一:分享扩展(适配所有浏览器)
用户在浏览器里点分享,选你的应用,就能把URL传过来:
- 创建Share Extension target,在
ShareViewController里写代码拿URL:
override func viewDidLoad() { super.viewDidLoad() if let item = extensionContext?.inputItems.first as? NSExtensionItem, let provider = item.attachments?.first, provider.hasItemConformingToTypeIdentifier(kUTTypeURL as String) { provider.loadItem(forTypeIdentifier: kUTTypeURL as String) { [weak self] (url, error) in if let url = url as? URL { // 用App Groups把URL共享给主应用 let userDefaults = UserDefaults(suiteName: "你的App Group ID") userDefaults?.set(url.absoluteString, forKey: "current_url") userDefaults?.synchronize() // 关闭扩展页面 self?.extensionContext?.completeRequest(returningItems: [], completionHandler: nil) } } } }
- 主App监听App Groups里的变化,拿到URL后提交后端分析,再用悬浮窗(iOS 15+可以用
UISheetPresentationController,或者自定义UIWindow)展示结果。
方案二:Safari 扩展(只针对Safari)
开发Safari专属扩展,直接在浏览器里拿URL:
- 创建Safari Extension target,在
SafariExtensionHandler的messageReceived方法里获取URL:
override func messageReceived(withName messageName: String, from page: SFSafariPage, userInfo: [String : Any]?) { page.getPropertiesWithCompletionHandler { properties in if let url = properties?.url { // 同样用App Groups共享给主App let userDefaults = UserDefaults(suiteName: "你的App Group ID") userDefaults?.set(url.absoluteString, forKey: "current_url") userDefaults?.synchronize() } } }
- 主App实时读取共享的URL,做分析和展示。
注意点
- iOS的悬浮窗权限有限,iOS 13+可以用多窗口实现,但得用户授权。
- 分享扩展需要用户主动触发,没法自动获取URL——这是iOS的规则,没辙。
URL 提交后端分析
不管Android还是iOS,拿到URL后直接发POST请求给后端接口就行,举个Android的例子:
OkHttpClient client = new OkHttpClient(); RequestBody body = new FormBody.Builder() .add("url", currentUrl) .build(); Request request = new Request.Builder() .url("https://你的后端地址/analyze") .post(body) .build(); client.newCall(request).enqueue(new Callback() { @Override public void onResponse(Call call, Response response) throws IOException { // 解析后端返回的结果,更新悬浮窗内容 } });
后端分析完返回结果(比如安全/危险、风险等级),你再把结果展示在Overlay里就行。
内容的提问来源于stack exchange,提问作者Aswin Pratapsingh
相关产品推荐
相关产品推荐

