我正在尝试创建一个环境,以便通过电子邮件打开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应用程序中点击指向我的服务器的链接时,它们会被重定向到我的应用程序?
答案 0 :(得分:1)
这些<meta>
标签受到应用程序(如Facebook)的尊重,这些应用程序已实施到Applinks协议并且知道要查找它们。其他应用程序(如Mail和Safari)完全忽略它们,而是打开后备网址。
当您使用移动主机API时,会注册该后备网址以打开Facebook应用。不幸的是,Facebook之后并没有将你转发到你自己的应用程序。
当您使用自己的服务器时,后备只是您网站上的一个网址...它没有注册任何内容。爱好。
要解决这个问题,您需要以某种不依赖于Facebook的方式执行链接到应用程序的重定向。有几个选择:
在您的服务器上实现类似这样的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。
最佳解决方案是上述方法的组合:支持所有地方的Universal Links和Applink,以及作为后备的智能JavaScript重定向。这需要处理很多,所以最好的选择可能是像Branch.io这样的免费服务(完全披露:我与团队合作)来处理所有技术问题。