Firefox不会按照应有的方式触发点击链接的意图.因此,无法通过点击Firefox中的链接启动他们的应用程序(可以在Chrome和其他浏览器中使用).
编辑:请记住,这是2013年的帖子.
所需的行为如下:在我的网站上,我有一个链接,点击后应启动我的Android应用程序.如果未安装该应用,最好打开Google Play中的页面进行下载.
我实现它的方式是使用以下形式的"intent URI":
intent://myhost.com/#Intent;scheme=myscheme;package=com.myapp;end
在应用程序中,我在清单中注册了一个intent过滤器并监听匹配的意图.但是,单击链接时,浏览器需要触发此类意图,以便我的应用程序可以启动.
我已经使用各种浏览器测试了这种方法,并且它适用于大多数浏览器.除了Firefox之外的明显例外.使用其他浏览器,我的应用程序将启动,或者Google Play中的页面加载(如果设备上未安装该页面).
具有"意图URI"的方法是Google推荐的方法.它在Chrome和其他一些浏览器上运行良好.还有其他方法.我已经阅读了许多有关可能性的主题和文章.主要的替代方案是:
myscheme://mywebsite.comhttp://mywebsite.com不推荐备选方案1有两个原因: - 我没有这样的方案,它在全球范围内不存在,这是错误的.谷歌也曾用它market://...来启动谷歌播放应用程序,但他们承认这是错误的,应该改变. - 如果我的应用程序当前未安装,则不会启动它,并且大多数浏览器都会显示错误页面,这显然是不合需要的.
备选方案2在大多数浏览器上不起作用,似乎不赞成使用"意图URI"方法.
仅适用于自定义方案(备选方案1).在常规http链接(备选2)的情况下,它只加载链接并显示网站.在推荐的"intent URI"方法的情况下,它什么都不做.实际上,它会显示一个对话框,询问您是否要启动应用程序,但是当您单击是时,没有任何反应.所以似乎Firefox识别像" intent://..." 这样的链接,但没有正确处理它们.
问:从Firefox中的链接启动应用程序的推荐方法是什么?为什么Firefox不支持"intent URI"方法?
相关链接:https : //developers.google.com/chrome/mobile/docs/intents /sf/answers/243055991/(请记住,该主题很老)
我在设备上点击此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方案问题的答案根本不能解决我的问题.对不起,如果我的初步问题不够明确.
我正在尝试使用带有tel*的网址在iPhone上发起呼叫.它会正确显示调用对话框,但在您单击调用时会回退到safari.
<a href="tel:123*12">Test</a>
Run Code Online (Sandbox Code Playgroud) 我正在考虑将应用程序注册到URL协议,我想知道,方案中允许哪些字符?
一些例子:
h323:[<user>@]<host>[:<port>][;<parameters>].)
z39.50r://<host>[:<port>]/<database>?<docid>[;esn=<elementset>][;rs=<recordsyntax>]:)
paparazzi:http:[//<host>[:[<port>][<transport>]]/那么,我可以使用哪些角色?
我们可以......
@:TwitterUser#:HashTag$:CapitalStock?:ID-10T......等等,或者方案中的字符受标准限制?
standards-compliance url-scheme custom-protocol illegal-characters
我们有一个处理自定义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那里的某个地方/
我最近注意到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中保留
我想在我的应用程序中构建URI(或URL方案)支持.
我LSSetDefaultHandlerForURLScheme()在我的工作中+ (void)initialize也设置了特定的URL方案info.plist.所以我没有Apple Script或没有URL方案Apple Events.
当我myScheme:在我最喜欢的浏览器中调用时,系统会激活我的应用程序.
问题是,如何在调用方案时处理这些方案.或者更好地说:如何定义应用程序应该执行的操作,何时myScheme:调用.
有一种特殊的方法我必须实现或者我必须在某处注册吗?
链接应该打开应用程序.我有这个工作.我只是想知道如何传递参数.假设网址是"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'.一旦应用程序被链接打开,您如何填充代码?
帮助感谢.
我正在尝试这个http://handleopenurl.com/scheme/snATA,该应用程序打开并显示相机,而不是显示我的个人资料.
是否有针对Snapchat的其他URL方案?
我已经实现了一个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.如果未实现其中一个方法,则仅考虑已实现方法的返回值.
尽管有解释,我仍然不知道该怎么做,我在网上找不到其他任何东西.
谢谢
问候
url-scheme ×10
ios ×7
android ×2
objective-c ×2
appkit ×1
cocoa ×1
firefox ×1
html ×1
intentfilter ×1
iphone ×1
macos ×1
parameters ×1
phone-call ×1
safari ×1