【问题标题】:appLinks don't open iPhone app from emailappLinks 不会从电子邮件打开 iPhone 应用程序
【发布时间】:2016-03-15 15:05:25
【问题描述】:

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

所以,我按照 (applinks.org) 中的描述,了解如何在我自己的服务器上设置元标记来执行打开 AppLink 的任务。所以,我有一个带有以下 html 的网页:

<!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。使用他们的Open Graph Object Debugger,我能够抓取我用他们的工具创建的 AppLink 的内容。 Facebook 元标签与我的元标签非常相似,但有一些不同之处。正如我之前提到的,第一个区别是您只能使用 Facebook 工具指定一个应用程序,因此只有一个 iPhone url、app_name 和 app_store_id 元标记。另外两个区别是以下标签[我将以下标签中的 app_id 替换为 ....]:

<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。我不知道那里发生了什么,但是即使我将所有这些标签都放在我的网页头标签中,结果也是一样的。如果您从“邮件”或“便笺”等移动应用程序中单击链接,则只会打开我的网页。我的应用程序或 Facebook 不会发生重定向。

请注意,我还向每个应用程序的 info.plists 和 appDelegates 添加了所需的方案信息。即,在我的 info.plist 的 URL 类型中,我添加了 com.myApp.myAppLinkScheme 的标识符和 myAppLinkScheme 的方案。对 info.plist 的精简版进行了类似的添加。我还为我的 appDelegate 添加了付费版和免费版应用程序的必要更改:

-(BOOL)application:(UIApplication *)application
           openURL:(NSURL *)url
 sourceApplication:(NSString *)sourceApplication
        annotation:(id)annotation {

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

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

【问题讨论】:

    标签: html ios iphone facebook applinks


    【解决方案1】:

    那些&lt;meta&gt;标签受到应用程序(如Facebook)的尊重,这些应用程序已经实现了Applinks协议并知道要查找它们。 Mail 和 Safari 等其他应用程序完全忽略它们,而是打开备用 URL。

    当您使用 Mobile Hosting API 时,会注册该备用 URL 以打开 Facebook 应用程序。不幸的是,Facebook 之后不会将您转发到您自己的应用程序。

    当您使用自己的服务器时,回退只是您网站上的一个 URL……它没有注册到任何东西。然而。

    要解决此问题,您需要以某种不依赖于 Facebook 的方式执行链接到应用程序的重定向。有几个选项:

    1. 在您的服务器上实现 JavaScript 重定向,如下所示:

      setTimeout(function() {
        window.location = "https://itunes.apple.com/path/to/your/app/";
      }, 25);
      
      // If "yourapp://" is registered, the user will see a dialog
      // asking if want to open your app. If they agree, your app will 
      // launch  immediately and the timer won't fire.
      // If not installed, you'll get an ugly "Cannot Open Page" 
      // dialogue and the App Store will launch when the timer expires.
      
      window.location = "yourapp://";
      

      显然这不是一个理想的解决方案,并且它有 令人讨厌的边缘情况,最明显的是“无法打开页面”错误,如果用户没有安装您的应用程序,他们会看到。直到最近,通过使用此脚本更细微的版本智能地重定向到 App Store,以一种相当用户友好的方式解决这个问题是可能的。遗憾的是,Apple intentionally broke that 更新了 iOS 9.2。

    2. Enable Universal Links。 Apple 知道这是一个烦人的问题,并正在努力提供帮助。通用链接让您可以使用正常 URL 到您网站上的页面(处理未安装应用程序的后备问题),该 URL 会被您的手机拦截并在安装后直接发送到您的应用程序。不幸的是,通用链接仅在 iOS 9+ 中有效,a lot of apps(讽刺的是,包括 Facebook)中打开时仍然有效。

    最好的解决方案是上述方法的组合:通用链接和应用链接在所有支持它们的地方,以及作为后备的智能 JavaScript 重定向。这需要处理很多事情,所以最好的选择可能是像Branch.io 这样的免费服务(完全披露:我与团队合作)来处理所有技术方面的问题。

    【讨论】:

      猜你喜欢
      • 2012-07-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-30
      • 2011-05-08
      • 2018-01-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多