2016-08-04 63 views
3

我实现了在Android和iOS一custom URL scheme,与我们会发送一个“激活”电子邮件发送至用户的想法,他点击了一个产生本地应用程序的链接。无法取得Gmail的Android打开自定义URL方案或意向:// URL

技术上,我们发送HTML格式的电子邮件,其中包含一个链接,如:

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

在iOS上它工作正常,但在Android上,这是行不通的。

我见过一些其他的S.O帖子和类似的东西,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上,Android应用程序的GMail内没有可点击的内容,而针对intent 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> 

我试图建立一个Web服务器,这“反映”回自定义应用程序方案,以及这是否工作同时在Android和iOS

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

该页面做了302重定向到

myapp://activate/accountId/uniqueToken 

Web浏览器(Android版Chrome)遵循这种重定向,从而导致本机应用程序启动,因此,它提供了一个解决方案(各种)为Android应用程序的Gmail。

虽然它引入了云服务器上的人为依赖关系,但这很容易避免。

在iOS上它的叶子在Safari浏览器也是一个空白页面,这是次要的,但不幸的后面。

+0

对于'myapp:// activate/accountId/uniqueToken',您可能需要在您的Intent中包含完整路径,或者至少在您的AndroidManifest.xml中的intent-filter路径中包含足够的路径'可以识别它。 你能否粘贴你的'AndroidManifest.xml'的'intent-filter'来处理url方案? – nicobatu

回答

2

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

通过云目的路由真的是做到这一点的唯一可靠的方法,并在Branch.io,我们用类似于您已经把解决方案。如果您通过智能重定向将云端目标与通用链接(iOS 9+),URL方案(iOS < 8,基本Android),应用链接(更新的Android)和Chrome内容(Android Android上的Chrome)结合使用,那么您已经处理了大多数情况会出现。另一个好处是您也可以在没有应用程序的情况下处理设备,因为如果所有上述方法都失败,它们将在云端目标处看到内容。在iOS上,您也可以在应用程序启动后触发最终重定向,这样就不会出现空白屏幕,但在任何情况下都不起作用。

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