【问题标题】:Can't get gmail for android to open a custom URL scheme, or an intent:// URL无法让 gmail for android 打开自定义 URL 方案或意图:// URL
【发布时间】: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.xmlintent-filter

标签: android url-scheme


【解决方案1】:

正如您所发现的,没有完美的解决方案。自定义 URL 方案通常不被识别为可点击链接,并且 iOS、Android 和 Chrome 对于允许的内容都有不同的规则。尽管在您的特定情况下这不是问题,但也没有方便的方法来处理未安装应用程序的设备。

通过云目的地路由确实是实现此目的的唯一可靠方法,在Branch.io,我们使用与您组合的解决方案类似的解决方案。如果您使用具有智能重定向的云目标来组合通用链接(iOS 9+)、URL 方案(iOS

顺便说一句,以上正是 Branch 作为免费服务提供的。你可以看看!

【讨论】:

    猜你喜欢
    • 2015-07-13
    • 1970-01-01
    • 2011-04-30
    • 2011-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-13
    • 1970-01-01
    相关资源
    最近更新 更多