Facebook 应用程序 Link 仅在重新抓取后有效

Facebook App Link only works after rescraping

Facebook 应用程序 Link 仅在使用 facebook url debug tool. 重新抓取 url 后才能运行 如果没有此步骤,Facebook 应用程序将在内部网络浏览器中打开页面。重新抓取后,应用程序切换和到应用程序商店的导航都可以正常工作(如果未安装应用程序)。共享 link 的头部部分如下所示:

<head>
<meta charset="utf-8">
<title>Title</title>

<meta property="fb:app_id" content="1234567890123456">
<meta property="og:url" content="http://www.myawesomeapp.com/model/{{$model->id}}">
<meta property="og:type" content="website">
<meta property="og:title" content="MyAwesomeApp">
<meta property="og:image" content="{{$model->image}}"/>
<meta property="og:description" content="{{$model->text}}">
<meta property="og:site_name" content="MyAwesomeApp">

<!--applink-->
<meta property="al:ios:url" content="myawesomeapp://model/{{$model->id}}" />
<meta property="al:ios:app_store_id" content="<<random app id for testing>>" />
<meta property="al:ios:app_name" content="MyAwesomeApp" />
<meta property="al:web:should_fallback" content="false" />

link 是通过 iOS 应用通过以下方式共享的:

FBSDKShareLinkContent *content = [[FBSDKShareLinkContent alloc] init];
[content setContentDescription:model.text];
[content setContentURL:[NSURL URLWithString:[NSString stringWithFormat:@"http://www.myawesomeapp.com/model/%ld", model.id]]];
content.imageURL = model.image ? [NSURL model.image] : nil;
[FBSDKShareAPI shareWithContent:content delegate:self];

是我做错了什么还是 facebook 的错误?或者,也许我必须在每次 link 共享后自动调用 rescraping 工具?

好吧,我从 php 后端想出了一个 hackish 的方法,它解决了问题,但是......它很丑陋:

$url = 'https://graph.facebook.com/?id=' . urlencode('https://www.myqwesomeapp.com/model/' . $model->id) . '&scrape=true';
$cmd = "curl -X POST " . "'" . $url . "' > /dev/null 2>&1 &";
exec($cmd, null, null); 

当从 iOS 应用程序共享内容时,我通知后端,并且 post 共享 url 到具有 scrape=true 的图 api 端点参数.