appLinks不会通过电子邮件打开iPhone应用程序

时间:2016-03-15 15:05:25

标签: html ios iphone facebook applinks

我正在尝试创建一个环境,以便通过电子邮件打开iPhone应用。如果我使用Facebook的托管服务作为appLink(Facebook AppLink Hosting API),只要我点击它在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">

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

请注意,我还在每个应用的info.plists和appDelegates中添加了所需的计划信息。也就是说,在我的info.plist的URL类型中,我添加了com.myApp.myAppLinkScheme的标识符和myAppLinkScheme的方案。对lite.plist的lite版本进行了类似的添加。此外,我为appDelegate添加了必要的更改,用于付费和免费版本的应用程序:

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

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

所以,我显然错过了一些东西。设置我的服务器需要哪些其他实现,以便当用户从iPhone的Mail应用程序中点击指向我的服务器的链接时,它们会被重定向到我的应用程序?

1 个答案:

答案 0 :(得分:1)

这些<meta>标签受到应用程序(如Facebook)的尊重,这些应用程序已实施到Applinks协议并且知道要查找它们。其他应用程序(如Mail和Safari)完全忽略它们,而是打开后备网址。

当您使用移动主机API时,会注册该后备网址以打开Facebook应用。不幸的是,Facebook之后并没有将你转发到你自己的应用程序。

当您使用自己的服务器时,后备只是您网站上的一个网址...它没有注册任何内容。爱好。

要解决这个问题,您需要以某种不依赖于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://";
    

    显然,这不是一个理想的解决方案,而且它有一些令人讨厌的边缘情况 ton ,最明显的是“无法打开页面”#34;错误用户将看到他们是否安装了您的应用。直到最近,才有可能以合理的用户友好方式解决这个问题,方法是使用此脚本的更细微版本智能地重定向到App Store。可悲的是,Apple intentionally broke that更新了iOS 9.2。

  2. Enable Universal Links。 Apple知道这是一个令人讨厌的问题并且正在努力提供帮助。 Universal Links允许您使用网站页面的常规URL(处理未安装的应用程序后备问题),该问题会被手机拦截并直接发送到您的应用程序(如果已安装)。不幸的是,Universal Links仅适用于iOS 9+,而a lot of apps内打开(包括具有讽刺意味的Facebook)。
  3. 最佳解决方案是上述方法的组合:支持所有地方的Universal Links和Applink,以及作为后备的智能JavaScript重定向。这需要处理很多,所以最好的选择可能是像Branch.io这样的免费服务(完全披露:我与团队合作)来处理所有技术问题。