首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >appLinks不打开电子邮件中的iPhone应用

appLinks不打开电子邮件中的iPhone应用
EN

Stack Overflow用户
提问于 2016-03-15 15:05:25
回答 1查看 779关注 0票数 0

我正在尝试创建一个环境,以便能够从电子邮件中打开iPhone应用程序。如果我使用Facebook的托管服务appLink (Facebook AppLink托管API),只要我点击它在Facebook移动应用程序中生成的链接,我就可以成功地打开该应用程序。但是,如果我试图从另一个移动应用程序(如Notes或Mail)中单击相同的链接,它只会重定向到Facebook,而不会指向我的应用程序。此外,Facebook AppLink托管API只允许您为单个应用程序创建一个链接。我希望能够自动打开我的付费版本的应用程序或免费版本的应用程序(按这个顺序),这取决于用户在移动设备上的应用程序。

因此,我遵循了在(applinks.org)中找到的关于如何在自己的服务器上设置元标记以执行打开AppLink的任务的描述。因此,我有一个包含以下html的网页:

代码语言:javascript
复制
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>MyApp</title>
<meta property="al:iphone:url" content="myAppLinkScheme://Home">
<meta property="al:iphone:app_name" content="MyApp">
<meta property="al:iphone:app_store_id" content="471147787">
<meta property="al:iphone:url" content="myAppLinkLiteScheme://Home">
<meta property="al:iphone:app_name" content="MyApp Lite">
<meta property="al:iphone:app_store_id" content="518829102">
<meta property="al:ipad:url" content="myAppLinkLiteScheme://Home">
<meta property="al:ipad:app_name" content="MyApp Lite">
<meta property="al:ipad:app_store_id" content="518829102">
<meta property="al:web:should_fallback" content="false">
</head>
<body>Redirecting...</body>
</html>

然后,我使用Facebook的工具创建了一个AppLink,用于托管appLink。使用他们的开放式图形对象调试器,我能够抓取我用他们的工具创建的AppLink的内容。Facebook的元标签与我的元标签非常相似,但有一些不同之处。正如我前面提到的,第一个不同之处是,您只能使用Facebook工具指定一个应用程序,因此只有一个iPhone url、app_name和app_store_id元标记。另外两个不同之处是我在下面的标记中用.替换了我的app_id。

代码语言:javascript
复制
<meta property="fb:app_id" content="28...........64">
<meta http-equiv="refresh" content="0;url=https://apps.facebook.com/28...........64/?fb_source=mobile">

显然,将“刷新”元标记重定向到apps.facebook.com。我不知道那里发生了什么,但即使我把所有这些标签都放在我的网页标题标签中,结果也是一样的。如果您单击移动应用程序(如Mail或Notes )的链接,您将只打开我的网页。我的应用程序和Facebook都不会出现重定向的情况。

注意,我还将所需的方案信息添加到我的应用程序的info.plists和appDelegates中。也就是说,在我的info.plist的URL类型中,我添加了com.myApp.myAppLinkScheme的标识符和myAppLinkScheme的方案。info.plist的精馏版也有类似的添加。此外,我还为应用程序的付费和免费版本向我的appDelegate添加了必要的更改:

代码语言:javascript
复制
-(BOOL)application:(UIApplication *)application
           openURL:(NSURL *)url
 sourceApplication:(NSString *)sourceApplication
        annotation:(id)annotation {

    if ([[url scheme] isEqualToString:@"myAppLinkScheme"]) {
        return YES;
    }
    ...
}

所以,我显然遗漏了什么。设置我的服务器需要什么额外的实现,以便当用户单击指向iPhone邮件应用程序中指向我的服务器的链接时,它们被重定向到我的应用程序?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-15 21:47:42

这些<meta>标签被应用程序(比如Facebook)所尊重,这些应用程序实现了Applinks协议并知道如何查找它们。其他应用程序,如Mail和Safari完全忽略了它们,而是打开了备用URL。

当您使用时,将注册该回退URL以打开Facebook应用程序。不幸的是,Facebook之后并没有转发给你自己的应用程序。

当您使用您自己的服务器时,回退只是您的website...which上的一个URL没有注册到任何东西。目前还没有。

为了解决这个问题,你需要以一种不依赖于Facebook的方式执行链接到应用程序的重定向。有几种选择:

  1. 在服务器上实现JavaScript重定向,如下所示: setTimeout(函数(){https://itunes.apple.com/path/to/your/app/";},25);//如果注册了"yourapp: //“,用户将看到一个对话框//询问是否要打开您的应用程序。如果他们同意,您的应用程序将立即//启动,计时器不会启动。//如果没有安装,您将得到一个丑陋的”无法打开页面“//对话,而应用商店将在计时器过期时启动。window.location = "yourapp://"; 显然,这不是一个理想的解决方案,而且它有很多令人讨厌的边缘情况,最明显的是,“无法打开页面”的错误用户会看到他们是否没有安装你的应用程序。直到最近,才有可能以一种对用户相当友好的方式解决这个问题,方法是智能地将这个脚本重新定向到应用程序商店。遗憾的是,苹果故意打破那个的iOS 9.2升级版。
  2. 启用通用链接。苹果公司知道这是一个恼人的问题,并试图提供帮助。通用链接允许您使用一个正常的URL到您的网站上的一个页面(处理应用程序未安装的备份问题),它会被您的手机拦截,并直接发送到您的应用程序安装。不幸的是,通用链接只在iOS 9+中工作,并且在很多应用程序内部打开时还不能工作(具有讽刺意味的是,包括Facebook)。

最好的解决方案是以上方法的结合:支持任何地方的通用链接和Applinks,以及智能JavaScript重定向作为后盾。这需要处理很多问题,所以最好的选择是提供一个免费的服务,比如Branch.io (完全公开:我和团队一起工作)来处理所有的技术方面。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36014989

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档