标签: url-scheme

Firefox for Android在点击链接时无法启动应用

Firefox不会按照应有的方式触发点击链接的意图.因此,无法通过点击Firefox中的链接启动他们的应用程序(可以在Chrome和其他浏览器中使用).

编辑:请记住,这是2013年的帖子.

所需的行为如下:在我的网站上,我有一个链接,点击后应启动我的Android应用程序.如果未安装该应用,最好打开Goog​​le Play中的页面进行下载.

方法

我实现它的方式是使用以下形式的"intent URI": intent://myhost.com/#Intent;scheme=myscheme;package=com.myapp;end

在应用程序中,我在清单中注册了一个intent过滤器并监听匹配的意图.但是,单击链接时,浏览器需要触发此类意图,以便我的应用程序可以启动.

我已经使用各种浏览器测试了这种方法,并且它适用于大多数浏览器.除了Firefox之外的明显例外.使用其他浏览器,我的应用程序将启动,或者Google Play中的页面加载(如果设备上未安装该页面).

具有"意图URI"的方法是Google推荐的方法.它在Chrome和其他一些浏览器上运行良好.还有其他方法.我已经阅读了许多有关可能性的主题和文章.主要的替代方案是:

替代方法

  1. 使用自定义方案,如 myscheme://mywebsite.com
  2. 使用常规的http链接,比如 http://mywebsite.com

不推荐备选方案1有两个原因: - 我没有这样的方案,它在全球范围内不存在,这是错误的.谷歌也曾用它market://...来启动谷歌播放应用程序,但他们承认这是错误的,应该改变. - 如果我的应用程序当前未安装,则不会启动它,并且大多数浏览器都会显示错误页面,这显然是不合需要的.

备选方案2在大多数浏览器上不起作用,似乎不赞成使用"意图URI"方法.

特别是Firefox

仅适用于自定义方案(备选方案1).在常规http链接(备选2)的情况下,它只加载链接并显示网站.在推荐的"intent URI"方法的情况下,它什么都不做.实际上,它会显示一个对话框,询问您是否要启动应用程序,但是当您单击是时,没有任何反应.所以似乎Firefox识别像" intent://..." 这样的链接,但没有正确处理它们.

问:从Firefox中的链接启动应用程序的推荐方法是什么?为什么Firefox不支持"intent URI"方法?

相关链接:https : //developers.google.com/chrome/mobile/docs/intents /sf/answers/243055991/(请记住,该主题很老)

firefox android url-scheme intentfilter android-intent

27
推荐指数
1
解决办法
8916
查看次数

为什么我们需要"URL Identifier"(CFBundleURLName)plist字段在iOS上使用自定义URL方案?

我在设备上点击此Web链接时使用自定义URL方案打开我的iOS应用程序:Demo77:// someurl

为了进行设置,我将Demo77作为项添加到Info.plist中的URL Schemes(CFBundleURLSchemes)数组中.

Apple文档说我还需要在Info.plist中包含URL标识符(CFBundleURLName)字符串密钥.此密钥包含"URL方案的抽象名称".

我并没有包括URL标识密钥和链接仍然打开我的应用程序.一切都没有URL标识符.

问题:我是否真的需要在plist中包含URL标识符键?如果是这样 - 为什么?

在此输入图像描述

更新

此问题与URL标识符和URL方案不同,后者会询问使用"URL标识符"键的内容.我不是在问它用于什么.我问我们是否需要使用"URL Identifier"?没有它我的应用程序中的URL方案工作得很好.请注意,URL标识符和URL方案问题的答案根本不能解决我的问题.对不起,如果我的初步问题不够明确.

url-scheme ios

27
推荐指数
2
解决办法
1万
查看次数

如何在iOS上使用tel:with*(星号,星号)或#(hash,pound)?

我正在尝试使用带有tel*的网址在iPhone上发起呼叫.它会正确显示调用对话框,但在您单击调用时会回退到safari.

<a href="tel:123*12">Test</a>
Run Code Online (Sandbox Code Playgroud)

html url-scheme phone-call ios

26
推荐指数
3
解决办法
1万
查看次数

URI方案的有效字符?

我正在考虑将应用程序注册到URL协议,我想知道,方案中允许哪些字符?

一些例子:

  • h323(有号码)
    • h323:[<user>@]<host>[:<port>][;<parameters>]
  • z39.50r(也有.)
    • z39.50r://<host>[:<port>]/<database>?<docid>[;esn=<elementset>][;rs=<recordsyntax>]
  • 狗仔队:http(有一个:)
    • paparazzi:http:[//<host>[:[<port>][<transport>]]/

那么,我可以使用哪些角色?
我们可以......

  • @:TwitterUser
  • #:HashTag
  • $:CapitalStock
  • ?:ID-10T

......等等,或者方案中的字符受标准限制?

standards-compliance url-scheme custom-protocol illegal-characters

24
推荐指数
3
解决办法
9257
查看次数

如果不处理Android自定义URL方案,如何回归市场?

我们有一个处理自定义URL方案的应用程序(vstream://).当有人访问具有某些vstream://内容的网页时,如果他们没有安装我们的应用,我们需要将它们重定向到商店.

在iOS中,我们这样做:

setTimeout(function() {
  window.location =
    "itms://itunes.apple.com/us/app/kaon-v-stream/id378890806?mt=8&uo=4";
}, 25);

window.location = "vstream:view?code=...stuff...";
Run Code Online (Sandbox Code Playgroud)

如果window.location分配失败,则在对话框出现之前超时会跳过App Store.(我在这里找到了这种技术:是否可以为YouTube应用程序注册基于http +域的URL方案,如YouTube和地图?)

不幸的是,这个技巧在Android中无效.我们检测到设备服务器端并写了这个而不是itms:line:

"market://details?id=com.kaon.android.vstream";
Run Code Online (Sandbox Code Playgroud)

麻烦的是,当你去一个未处理的网址方案时,iOS会抛出一个错误,Android会转到生成的页面.因此,超时永远不会有机会运行.

是否有某种方式在网页上明确测试是否处理自定义URL方案,或者有人建议像这样的黑客将在Android中工作吗?(当然,我想我需要一个黑客,无论他们使用什么浏览器都可以工作,这可能是一个很高的订单...)

更新:以下方法在Nexus 7上的Jelly Bean中不起作用.新的Chrome浏览器不会转到生成的页面(因此不需要iFrame),但似乎没有任何方法可以知道URL计划得到了处理.如果是的话,无论如何都会触发超时.如果没有处理,超时会触发.如果我使用onload处理程序和iframe,onload处理程序永远不会触发(无论是否安装了应用程序).如果我弄清楚如何知道该计划是否得到处理,我会更新...

我已经删除了我以前的解决方案中的"已解决",因为它不再起作用了.

更新2:我现在有一个很好的跨平台解决方案,适用于iOS,Android 4.1,Chrome和Android预Chrome.见下文...

更新3:谷歌再次打破了一切.看看非常好的解决方案,我已经接受了amit_saxena那里的某个地方/

android url-scheme ios

24
推荐指数
4
解决办法
3万
查看次数

用户取消后,iOS Safari无法识别网址方案

我最近注意到Safari中的奇怪行为.

我为我的应用程序注册了一个url方案,然后进入myapp://Safari.这会立即启动我的应用程序.

然后我回到Safari,myapp://再次进入Safari,这次它提示我"在"myapp"中打开这个页面?" 取消或打开.

如果我点击打开,我的应用程序将启动,后续尝试将显示相同的警报.如果我尝试点击取消,我的应用将无法启动.这是预料之中的.

但是,如果我myapp://再次进入URL栏,则会提示"无法打开页面""Safari无法打开页面,因为地址无效."

对于所有后续尝试,这将以相同的方式失败,直到我杀死Safari并重新启动它,或打开另一个选项卡.

这与Youtube和Evernote的行为相同.我的猜测是,当用户点击取消时,Safari会将URL缓存为无效的URL.是否有关于此行为的官方文档?

在iOS 8.1.2和iOS 6.1.3中保留

iphone safari mobile-safari url-scheme ios

24
推荐指数
1
解决办法
7844
查看次数

如何使用默认URL方案处理

我想在我的应用程序中构建URI(或URL方案)支持.

LSSetDefaultHandlerForURLScheme()在我的工作中+ (void)initialize也设置了特定的URL方案info.plist.所以我没有Apple Script或没有URL方案Apple Events.

当我myScheme:在我最喜欢的浏览器中调用时,系统会激活我的应用程序.

问题是,如何在调用方案时处理这些方案.或者更好地说:如何定义应用程序应该执行的操作,何时myScheme:调用.

有一种特殊的方法我必须实现或者我必须在某处注册吗?

macos cocoa url-scheme appkit

23
推荐指数
3
解决办法
2万
查看次数

从URL和Pass Parameters打开iOS应用程序

链接应该打开应用程序.我有这个工作.我只是想知道如何传递参数.假设网址是"addappt://?code = abc".弹出视图控制器时,代码字段应填充文本 - 等于符号后的字母.我有部分工作要做.我使用以下内容 (in app delegate.m):

NSArray *elements = [url.query componentsSeparatedByString:@"="];
NSString *key = [[elements objectAtIndex:0] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
          val = [[elements objectAtIndex:1] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
Run Code Online (Sandbox Code Playgroud)

(顺便说一下:val在appdelegate.h中声明

我也可以传递val给视图控制器.我唯一的问题是填充文本字段,命名为'code'.一旦应用程序被链接打开,您如何填充代码?

帮助感谢.

parameters objective-c url-scheme ios

23
推荐指数
1
解决办法
4万
查看次数

Snapchat网址方案无法正常工作 - 相机打开但没有配置文件

我正在尝试这个http://handleopenurl.com/scheme/snATA,该应用程序打开并显示相机,而不是显示我的个人资料.

是否有针对Snapchat的其他URL方案?

url-scheme ios

23
推荐指数
2
解决办法
7080
查看次数

使用URL启动应用程序,但OpenUrl未调用

我已经实现了一个URL方案,并使用它通过调用方法将数据传递给我的应用程序.整个代码如下所示

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url{
    // Check the calling application Bundle ID
    if ([[url scheme] isEqualToString:@"yuvitime"])
    {
        NSLog(@"URL scheme:%@", [url scheme]);
        NSString * yuvitimeRequestValue = [url query];
        NSDictionary * userInfor = [[NSDictionary alloc]initWithObjectsAndKeys:yuvitimeRequestValue, @"YuvitimeRequest", nil];
        NSNotificationCenter * notificationCentre = [NSNotificationCenter defaultCenter];
        [notificationCentre postNotificationName:@"URLSCHEMEACTIVATEDNOTIFICATION" object:self userInfo:userInfor];

        return YES;
    }
    else
        return NO;
}
Run Code Online (Sandbox Code Playgroud)

如果我的应用程序在后台,一切正常.单击URL时,应用程序将返回到Foreground,URL将按照上述函数中的编码进行处理.

但是,如果应用程序已终止(应用程序尚未启动),则通过单击URL,它仅启动应用程序而不调用上面显示的处理函数.

经过搜索,我得到的最好结果就是这个

application:WillFinishLaunchingWithOptions: 当要求打开URL时,此方法的返回结果与application:didFinishLaunchingWithOptions:方法的返回结果相结合,以确定是否应该处理URL.如果任一方法返回NO,则系统不会调用application:openURL:options:method.如果未实现其中一个方法,则仅考虑已实现方法的返回值.

- application:didFinishLaunchingWithOptions: 此方法表示您处理launchOptions字典中任何键的最后机会.如果您没有评估application:willFinishLaunchingWithOptions:方法中的键,则应该在此方法中查看它们并提供适当的响应.不是app委托的对象可以通过观察名为的通知UIApplicationDidFinishLaunchingNotification并访问通知的userInfo字典来访问相同的launchOptions字典值.该方法返回后不久发送该通知.此方法的返回结果与application:willFinishLaunchingWithOptions:方法的返回结果相结合,以确定是否应处理URL.如果任一方法返回NO,则不处理URL.如果未实现其中一个方法,则仅考虑已实现方法的返回值.

尽管有解释,我仍然不知道该怎么做,我在网上找不到其他任何东西.

谢谢

问候

objective-c url-scheme ios

22
推荐指数
6
解决办法
3万
查看次数