【发布时间】:2016-12-11 05:49:20
【问题描述】:
我已经在 Android 和 iOS 上实现了custom URL scheme,我们的想法是我们将向用户发送一封“激活”电子邮件,用户点击一个生成本机应用程序的链接。
从技术上讲,我们会发送一封 HTML 格式的电子邮件,其中包含如下链接:
<a href="myapp://activate/accountId/uniquetoken">Click to activate</a>
在 iOS 上可以正常工作,但在 Android 上就不行了。
我已经看到其他一些 SO 帖子和类似的事情,android 本身应该处理 custom URL scheme,但表明它是 Chrome 浏览器和 Android 应用程序的 GMail 正在剥离这些自定义 myapp:// url。
根据其中一些帖子的建议,我尝试创建一个意图 URL。我已经尝试了以下所有方法
intent://activate#Intent;scheme=myapp;package=com.mycompany.myapp;end
#Intent;action=activate;end
#Intent;component=com.mycompany.myapp/.ui.MainActivity;end
intent://#Intent;component=com.mycompany.myapp/.ui.MainActivity;end
但他们都没有工作。在 Android 6 上的 GMail for android 应用程序中没有一个是可点击的,并且关于意图 uri 格式的 android 文档记录得非常差。我能找到的最好的方法是“以编程方式在 Java 中创建您的意图,然后在其上调用 .toUri”,(这就是我生成上述大部分损坏的意图 uri 的方式)
任何帮助将不胜感激
更新 1。这是我在 Android 清单中的活动和意图
<activity android:name=".ui.MainActivity" android:theme="@style/AppTheme.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<!-- load via URL scheme -->
<intent-filter>
<data android:scheme="myapp" />
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.BROWSABLE" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
我尝试设置一个网络服务器,它“反映”回自定义应用方案,这对 Android 和 iOS 都有效
<a href="http://mycloudserver.net/myapp/activate/accountId/uniqueToken">Click</a>
该页面执行 302 重定向
myapp://activate/accountId/uniqueToken
网络浏览器(Android 版 Chrome)遵循此重定向,这会导致本机应用启动,因此确实为 Android 版 Gmail 应用提供了(某种)解决方案。
虽然它引入了对云服务器的人为依赖,但最好避免。
在 iOS 上,它也会在 Safari 浏览器中留下一个空白页面,这虽然微不足道,但很不幸。
【问题讨论】:
-
对于
myapp://activate/accountId/uniqueToken,您可能需要在 Intent 中包含完整路径,或者至少在路径中足够远,以便AndroidManifest.xml中的intent-filter可以识别它。您能否粘贴处理 url 方案的AndroidManifest.xml的intent-filter?
标签: android url-scheme