2017-05-22 46 views
0

今天我分别在“协议激活”(自定义URI方案处理)如何在部署在同一个UWP项目的桌面和电话上工作时遇到了非常奇怪的差异。在桌面上,您的应用程序已成功激活。在手机上,它说,你必须从商店安装适当的应用程序来处理你的自定义URI方案(事实上,你之前已经在手机上安装了你的应用程序,甚至现在它正在运行 - 为什么要搜索商店?)。如果通过HTTP返回UWP协议302重定向

重要提示:如果您将该自定义URI直接输入到浏览器窗口中,那么在两个硬件上都可以。如果通过正确的HTTP 302重定向将自定义URI作为HTTP请求的结果返回,则会出现此问题。因此,完整的使用案例是“请求正常的URL - >响应HTTP 302到自定义URI位置”

最后,我得出结论:与桌面浏览器相比,Edge的移动版本在302重定向上做了不同的事情。快速编写与XAML的WebView和UnsupportedUriSchemeIdentified事件处理程序最简单的应用程序,我才知道两件事情:

  1. 桌面的WebView看到您的重定向URI作为“yourapp://主机/ PARAMS清单”,一切正常
  2. 电话的WebView看到您的重定向URI像 “意图是什么?: // yourapp/确认 PARAMS列表#意向; 方案= yourapp; ” 转义形式(所以主机部分完全丢失,其他部分都逃脱了)

我的问题是:

  1. 为什么手机就实现这一意图,逃避?
  2. 什么是在同一代码库范围内的“协议激活”在桌面和手机上工作的最佳做​​法?
+0

你的手机是否安装了该APP?看起来如果您的设备中没有应用程序,它会搜索商店? – Scavenger

+0

@清道夫,当然我有,见上面:[quote](事实上,你之前已经在手机上安装了你的应用程序,甚至现在它正在运行 - 为什么要搜索商店?)。[/ quote] –

回答

0

所以,这个问题是由服务器端逻辑引起的(在桌面浏览器或手机浏览器提供的User-Agent头部中进行天真的子串搜索)。

Backend guys!永远不要信任用户代理字符串!

的Mozilla/5.0(Windows Phone的10.0;安卓6.0.1;微软; 950的Lumia双 SIM)为AppleWebKit/537.36(KHTML,例如Gecko)浏览器/ 52.0.2743.116 移动版Safari/537.36边/ 15.15063