草庐IT

android - 无法让 Android 的 gmail 打开自定义 URL 方案或 Intent ://URL

coder 2023-11-24 原文

我已经实现了 custom URL scheme在 Android 和 iOS 上,我们会向用户发送一封“激活”电子邮件,用户点击一个链接会生成 native 应用程序。

从技术上讲,我们会发送一封 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 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 应用程序中,没有一个是可点击的,而且关于 intent uri 格式的 android 文档记录非常少。我能找到的最好的是“以编程方式在 Java 中创建您的 Intent ,然后对其调用 .toUri”,(这就是我生成上面大部分损坏的 Intent uri 的方式)

任何帮助将不胜感激


更新 1. 这是我在 Android list 中的 Activity 和 Intent

    <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 服务器,它“反射(reflect)”回自定义应用方案,这对 Android 和 iOS 都有效

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

该页面执行 302 重定向到

myapp://activate/accountId/uniqueToken

Web 浏览器(Android 版 Chrome)遵循此重定向,这会导致 native 应用程序启动,因此确实为 Gmail for Android 应用程序提供了(某种)解决方案。

虽然它引入了对云服务器的人为依赖,但最好避免这种情况。

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

最佳答案

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

通过云目的地路由确实是实现此目的的唯一可靠方法,并且在 Branch.io ,我们使用类似于您放在一起的解决方案。如果您使用具有智能重定向的云目的地来组合通用链接(iOS 9+)、URL 方案(iOS < 8,基本="" android)、应用程序链接(较新的="" android)和="" chrome="" intents(android="" 上的="" chrome),那么您已经处理了大多数情况都会出现。附带的好处是您还可以在没有应用程序的情况下处理设备,因为如果上述所有方法都失败,它们将在云目的地看到内容。在="" ios="">

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

关于android - 无法让 Android 的 gmail 打开自定义 URL 方案或 Intent ://URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38778618/

有关android - 无法让 Android 的 gmail 打开自定义 URL 方案或 Intent ://URL的更多相关文章

  1. ruby - Facter::Util::Uptime:Module 的未定义方法 get_uptime (NoMethodError) - 2

    我正在尝试设置一个puppet节点,但ruby​​gems似乎不正常。如果我通过它自己的二进制文件(/usr/lib/ruby/gems/1.8/gems/facter-1.5.8/bin/facter)在cli上运行facter,它工作正常,但如果我通过由ruby​​gems(/usr/bin/facter)安装的二进制文件,它抛出:/usr/lib/ruby/1.8/facter/uptime.rb:11:undefinedmethod`get_uptime'forFacter::Util::Uptime:Module(NoMethodError)from/usr/lib/ruby

  2. ruby-on-rails - 由于 "wkhtmltopdf",PDFKIT 显然无法正常工作 - 2

    我在从html页面生成PDF时遇到问题。我正在使用PDFkit。在安装它的过程中,我注意到我需要wkhtmltopdf。所以我也安装了它。我做了PDFkit的文档所说的一切......现在我在尝试加载PDF时遇到了这个错误。这里是错误:commandfailed:"/usr/local/bin/wkhtmltopdf""--margin-right""0.75in""--page-size""Letter""--margin-top""0.75in""--margin-bottom""0.75in""--encoding""UTF-8""--margin-left""0.75in""-

  3. ruby - 使用 Vim Rails,您可以创建一个新的迁移文件并一次性打开它吗? - 2

    使用带有Rails插件的vim,您可以创建一个迁移文件,然后一次性打开该文件吗?textmate也可以这样吗? 最佳答案 你可以使用rails.vim然后做类似的事情::Rgeneratemigratonadd_foo_to_bar插件将打开迁移生成的文件,这正是您想要的。我不能代表textmate。 关于ruby-使用VimRails,您可以创建一个新的迁移文件并一次性打开它吗?,我们在StackOverflow上找到一个类似的问题: https://sta

  4. ruby-on-rails - 无法使用 Rails 3.2 创建插件? - 2

    我对最新版本的Rails有疑问。我创建了一个新应用程序(railsnewMyProject),但我没有脚本/生成,只有脚本/rails,当我输入ruby./script/railsgeneratepluginmy_plugin"Couldnotfindgeneratorplugin.".你知道如何生成插件模板吗?没有这个命令可以创建插件吗?PS:我正在使用Rails3.2.1和ruby​​1.8.7[universal-darwin11.0] 最佳答案 随着Rails3.2.0的发布,插件生成器已经被移除。查看变更日志here.现在

  5. ruby-on-rails - Rails 3.2.1 中 ActionMailer 中的未定义方法 'default_content_type=' - 2

    我在我的项目中添加了一个系统来重置用户密码并通过电子邮件将密码发送给他,以防他忘记密码。昨天它运行良好(当我实现它时)。当我今天尝试启动服务器时,出现以下错误。=>BootingWEBrick=>Rails3.2.1applicationstartingindevelopmentonhttp://0.0.0.0:3000=>Callwith-dtodetach=>Ctrl-CtoshutdownserverExiting/Users/vinayshenoy/.rvm/gems/ruby-1.9.3-p0/gems/actionmailer-3.2.1/lib/action_mailer

  6. ruby - 无法运行 Rails 2.x 应用程序 - 2

    我尝试运行2.x应用程序。我使用rvm并为此应用程序设置其他版本的ruby​​:$rvmuseree-1.8.7-head我尝试运行服务器,然后出现很多错误:$script/serverNOTE:Gem.source_indexisdeprecated,useSpecification.Itwillberemovedonorafter2011-11-01.Gem.source_indexcalledfrom/Users/serg/rails_projects_terminal/work_proj/spohelp/config/../vendor/rails/railties/lib/r

  7. ruby - 在 jRuby 中使用 'fork' 生成进程的替代方案? - 2

    在MRIRuby中我可以这样做:deftransferinternal_server=self.init_serverpid=forkdointernal_server.runend#Maketheserverprocessrunindependently.Process.detach(pid)internal_client=self.init_client#Dootherstuffwithconnectingtointernal_server...internal_client.post('somedata')ensure#KillserverProcess.kill('KILL',

  8. ruby-on-rails - 无法在centos上安装therubyracer(V8和GCC出错) - 2

    我正在尝试在我的centos服务器上安装therubyracer,但遇到了麻烦。$geminstalltherubyracerBuildingnativeextensions.Thiscouldtakeawhile...ERROR:Errorinstallingtherubyracer:ERROR:Failedtobuildgemnativeextension./usr/local/rvm/rubies/ruby-1.9.3-p125/bin/rubyextconf.rbcheckingformain()in-lpthread...yescheckingforv8.h...no***e

  9. ruby-on-rails - form_for 中不在模型中的自定义字段 - 2

    我想向我的Controller传递一个参数,它是一个简单的复选框,但我不知道如何在模型的form_for中引入它,这是我的观点:{:id=>'go_finance'}do|f|%>Transferirde:para:Entrada:"input",:placeholder=>"Quantofoiganho?"%>Saída:"output",:placeholder=>"Quantofoigasto?"%>Nota:我想做一个额外的复选框,但我该怎么做,模型中没有一个对象,而是一个要检查的对象,以便在Controller中创建一个ifelse,如果没有检查,请帮助我,非常感谢,谢谢

  10. ruby - 主要 :Object when running build from sublime 的未定义方法 `require_relative' - 2

    我已经从我的命令行中获得了一切,所以我可以运行rubymyfile并且它可以正常工作。但是当我尝试从sublime中运行它时,我得到了undefinedmethod`require_relative'formain:Object有人知道我的sublime设置中缺少什么吗?我正在使用OSX并安装了rvm。 最佳答案 或者,您可以只使用“require”,它应该可以正常工作。我认为“require_relative”仅适用于ruby​​1.9+ 关于ruby-主要:Objectwhenrun

随机推荐