首页 文章

无法获取用于android的gmail来打开自定义URL方案或intent:// URL

提问于
浏览
7

我在Android和iOS上实现了custom URL scheme,我们将向用户发送一封"activation"电子邮件,用户点击了生成本机应用的链接 .

从技术上讲,我们发送一个HTML格式的电子邮件,其链接如下:

<a href="myapp://activate/accountId/uniquetoken">Click to activate</a>

在iOS上它工作正常,但在Android上,它不起作用 .

我已经看过其他一些S.O帖子和类似的东西,android本身应该处理custom URL scheme,但表明它是Chrome浏览器和GMail for Android应用程序正在剥离这些自定义 myapp:// 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上的Android应用程序的GMail中点击,并且关于意图uri的格式的android文档是非常难以记录的 . 我能找到的最好的是“以编程方式在Java中创建你的意图,然后在其上调用.toUri”,(这就是我生成大部分破坏意图的方法)

任何帮助将非常感激


更新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>

我已经尝试设置一个Web服务器,它“反映”回自定义应用程序方案,这个适用于Android和iOS

<a href="http://mycloudserver.net/myapp/activate/accountId/uniqueToken">Click</a>

该页面执行302重定向

myapp://activate/accountId/uniqueToken

网络浏览器(Chrome for android)遵循此重定向,导致本机应用程序启动,因此确实为Gmail for Android应用程序提供了一种解决方案 .

它引入了对 Cloud 服务器的人为依赖,这将是很好的避免 .

在iOS上它也在Safari浏览器中留下了一个空白页面,这是次要但不幸的 .

1 回答

  • 6

    正如您所发现的那样,没有完美的解决方案 . 自定义网址方案通常无法识别为可点击链接,iOS,Android和Chrome都有不同的规则 . 虽然在特定情况下这不是一个问题,但在没有安装应用程序的情况下处理设备也没有方便的方法 .

    通过 Cloud 目的地路由确实是实现此目的的唯一可靠方法,在Branch.io,我们使用类似于您所组合的解决方案 . 如果您使用具有智能重定向的 Cloud 目标来组合通用链接(iOS 9),URL方案(iOS <8,基本Android),App链接(较新的Android)和Chrome Intents(Android上的Chrome),那么您已经处理了大多数情况会出现 . 另一个好处是您还可以在没有应用程序的情况下处理设备,因为如果上述所有方法都失败,他们将在 Cloud 目的地看到内容 . 在iOS上,您有时也可以在应用程序启动后触发最终重定向,这样就不会留下任何空白屏幕,但这并不适用于所有情况 .

    顺便提一下,以上就是Branch提供的免费服务 . 你可以试一试!

相关问题