是否可以添加一个链接,下载一个只能通过在Facebook上分享下载的文件?

这种情况可能吗?

客户到我的网站,想要下载一个感兴趣的PDF技术文档,他们点击下载button,Facebook共享窗口出现login,分享到Facebook。 一旦他们点击分享,并将其张贴在他们的墙上,那么下载开始?

非常感谢。

伊恩

UPDATE

根据Facebook的新政策,这个行为是不允许的。 使用风险自负。 我不负责使用这个。

是的,使用JavaScript SDK ,它提供了一个response (现在不用了)。我们将创build一个if语句来查看响应是否有post_id如果是,则显示下载链接,否则执行其他操作(提醒用户,也许?

DEMO(API 2.0)(不工作;需要修改)

演示(API 2.7)工作Rev#63

HTML

 <div class="container"> <div> <p>This file is locked, to unlock and download it, share it</p> <p class="hidden">Thanks for sharing, the file is unlocked and ready for download</p> <p class="hidden">In order to download this file, you need to share it</p> </div> <a class="fsl fsl-facebook" href="#" id="facebook-share"> <span class="fa-facebook fa-icons fa-lg"></span> <span class="sc-label">Share on Facebook</span> </a> <a class="fsl content-download" href="#" id="download-file"> <span class="fa-download fa-icons fa-lg"></span> <span class="sc-label">Download File</span> </a> </div> 

JavaScript(jQuery)

 $('#ShareToDownload').on('click', function(e) { e.preventDefault(); FB.ui({ display: 'popup', method: 'share', href: location.href, }, /** our callback **/ function(response) { if (response && response.post_id) { /** the user shared the content on their Facebook, go ahead and continue to download **/ $('#ShareToDownload').fadeOut(function(){ $('#downloadSection').fadeIn() }); } else { /** the cancelled the share process, do something, for example **/ alert('Please share this page to download this file'): } }); }); 

顺便说一下,我build议您从JSON文件中获得下载链接,因为书呆子可以查看您的页面源,检查元素以获取下载并绕过您的调查

UPDATE

随着API版本2.0的发布, Feed对话框被弃用 ,并被新的现代Share对话框取代,所以上面的代码使用新的Share对话框

谢谢,作品完美! 我不知道如何从JSON文件中获得下载链接,所以我做了一些稍微不同的,也许不是那么安全。

将其添加到检查响应的部分

 $.post('optimus.php', { 'fieldname' : 'download', 'value' : 'yes'}); 

设置了会话的新页面(optimus.php)

 <?php session_start(); $_SESSION[$_POST['fieldname']] = $_POST['value']; ?> 

Download.php包含下面的代码

 <?php session_start(); if($_SESSION['download'] == "yes"){ session_destroy(); $file = 'file.zip'; if (file_exists($file)) { header('Content-Description: File Transfer'); header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment; filename='.basename($file)); header('Content-Transfer-Encoding: binary'); header('Expires: 0'); header('Cache-Control: must-revalidate'); header('Pragma: public'); header('Content-Length: ' . filesize($file)); ob_clean(); flush(); readfile($file); exit; } } else { echo "You didn't share, or you already downloaded the file"; } ?> 

所以,当用户分享的时候,$ _SESSION ['download']被设置为yes。 Download.php检查是否是,当它是下载自动启动。 此外,会话被破坏,所以他们只能下载一次。