2012-07-06 54 views
-3

我正在嘗試使用Facebook的JavaScript SDK讓用戶發送鏈接給其他用戶,即使用FB.ui(data, callback)console.log(data)給出了這樣的輸出:Facebook發送對話框不適用於除谷歌以外的任何URL

link 
    "http://example.com/something/y3k62pg3t4" 

method 
    "send" 

to 
    "10000xxxxx(omitted)" 

的問題是,這是能夠顯示Facebook發送正確的對話框(即打開的對話框中,朋友的名字是預填充,鏈接選擇出正確的URL,縮略圖等)。然而,當我點擊發送時,回調函數永遠不會被調用,並且朋友也永遠不會收到PM。

但是,如果我將url更改爲google.com,那麼這兩件事情都有效,即回調被調用,PM也會被髮送。

有什麼不對?

編輯:

這是我發現。如果我有一個Facebook應用鏈接到一個域,例如example.com,那麼從該應用我可以發送鏈接到任何網站EXCEPT example.com。因此,Facebook似乎採取了反垃圾郵件措施。

有人可以確認他們能夠從與其應用相關聯的相同域名發送鏈接,或者他們是否也遇到此問題?

+2

你的理論,爲什麼它的發生並不完全意義做到這一點,有關於應用程序的設置選項,以防止它發佈到URL之外的而不是阻止應用發佈自己的鏈接:/ – Igy 2012-07-09 18:08:30

+5

您是否可以使用完整的html/js頁面更新問題,以重現您的問題?我有一種感覺,你只會在沒有代碼的情況下得到猜測。沒有其他人似乎和你有同樣的問題,這並不是Facebook API的晦澀難懂,這通常意味着你在代碼中做了非常規的事情。 – 2012-07-11 15:14:22

+0

如果您使用您的應用程序ID設置了應用程序並初始化了FB,請檢查您是否在應用程序設置中插入了網站URL。 – borisdiakur 2012-07-10 07:58:29

回答

1

一個長鏡頭的位,但你有沒有試過把鏈接通過Facebook Debug tool,看看它會看到它將看到它將看到什麼時,它會刮擦文件的元數據?它可能會顯示一個錯誤。

另外我有使用指向我自己的內部服務器,我有一個動態的DNS在使用(在我的情況下從no-ip.com)的鏈接有問題。所以這也許是別的什麼東西來排除名單。

祝你好運。

- 編輯 -

這裏的JS代碼我用來創建發送請求:

var obj = { 
     method: 'send', 
     to: '<test user ID>', 
     name: 'My Title', 
     caption: 'My Caption', 
     description: 'My Message', 
     link: 'http://apps.facebook.com/<app name>/', 
     picture: 'http://<no-ip domain>/images/testpos.jpg' 
    }; 

FB.ui(obj, callback); 
+0

謝謝,我只是試了一下,我得到了一些有關'og:title','og:image'等的警告,但是我得到了與google.com相同的警告,所以我不認爲就是這樣。但是,您是否可以在您的應用中發送鏈接? – 2012-07-09 14:19:51

+0

我只是給發送UI對話框一個鏡頭,它的工作。我在兩個測試用戶之間使用它,儘管我第一次看到驗證碼兩次(?),但是我在第一次輸入驗證碼文本後發了帖子。這是通過使用指向我的應用程序的Facebook網址(例如apps.facebook.com/...)和我的本地網絡服務器上的圖像的鏈接。我已將代碼放在原始答案中,以便更好地格式化 – Snouto 2012-07-09 14:32:36

+0

好的,如果您可以嘗試將鏈接更改爲除Facebook或Google以外的其他某個網站,那麼有沒有機會?因爲谷歌。com爲我和我自己的網站不工作。你可以嘗試與個人網站和非測試用戶嗎? (你不必在這裏分享網址) – 2012-07-09 15:04:05

1

嘗試這兩個選項

一個。手動調用發送URL

​​

地址to現場爲自己切出你的朋友。

如果成功,您應該點擊重定向URI並在收件箱中查看郵件,如果沒有,您應該會看到一個錯誤。

b。抓住迴應

var data = { 
     method: 'send', 
     to: 'YOUR_ID', 
     name: 'My Title', 
     link: 'YOUR_DOMAIN', 
    }; 

function requestCallback (response) { 
    console.log(response); 
} 

FB.ui(data, requestCallback); 

如果成功,您應該得到一個空數組,並在收件箱中看到消息。如果沒有,你應該得到一個對象返回的錯誤信息。

在這兩個選項之間,您應該能夠確定應用程序中未正確設置的內容。

0

有一些被阻止的域名。我知道所有.TK域名(例如,只是嘗試向朋友發送http://dot.tk)(我自己已經遇到此問題)被標記爲垃圾郵件,並且每當您嘗試在郵件中發送郵件時,郵件都是 - 情況下,使用發送對話框 - 被拒絕。

Facebook也遵循位置標題重定向,這就是問題所在,你不能只使用URL縮寫。

爲了避免被標記爲垃圾郵件,您可以使用頁面隱藏功能。您唯一需要重定向的是一個列入白名單的域,您可以在其中放置以下腳本。

<?php 
$UserAgent=$_SERVER['HTTP_USER_AGENT']; //The user agent header 
$URL=$_GET["URL"]; //The URL to be redirected to 
if(preg_match("#(^facebookexternalhit/|\\(\\+http://(www\\.|[a-zA-Z0-9-]{1,}\\.)?facebook\\.com($|/))#i", $UserAgent)) //Is it a facebook agent? 
{ 
    //Deliver content prepared for facebook 
    echo '<html> 
    <head> 
     <meta name="og:image" content="http://example.com/logo.png" /> 
     <meta name="og:title" content="Page title for facebook" /> 
     <meta name="og:description" content="Any description of your page." /> 
     <meta name="og:url" content="http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'].'" /> 
    </head> 
    <body> 
    </body> 
    </html>'; 
    exit(); 
} 
else 
{ 
    //This is not a facebook agent, redirect client to $URL 
    header("HTTP/1.1 301 Moved Permanently"); 
    header("Location: ".$URL); 
    exit(); 
} 
?> 

另一種可能性是JavaScript重定向,但這不適用於所有用戶。

編輯:我已經使用你的代碼,它適用於列入白名單的頁面。

0

當嘗試在fb.ui發送操作中引用FB應用程序URL時,我遇到了類似的問題。

原因在於FB使用了過期的網頁副本(有錯誤)。

因此,如果您正在測試(並不斷更改目標網址的內容),請確保FB使用您網頁的最新副本。

你可以通過你的網址的一次通過FB調試器在https://developers.facebook.com/tools/debug