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

时间:2016-08-04 22:54:53

标签: android url-scheme

我在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's out。

根据其中一些帖子的建议,我尝试创建一个意向网址。我已经尝试了以下所有

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>

我尝试过设置一个“反映”回自定义应用方案的网络服务器,这个功能适用于Android和iOS

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

该页面将302重定向到

myapp://activate/accountId/uniqueToken

网络浏览器(适用于Android的Chrome)遵循此重定向,这会导致原生应用程序启动,因此确实为Gmail for Android应用程序提供了一种解决方案。

它引入了对云服务器的人为依赖,这样可以避免。

在iOS上,它在Safari浏览器中也留下了一个空白页面,这很小但很不幸。

1 个答案:

答案 0 :(得分:6)

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

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

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