2013-12-08 26 views
0

我做,它將包含我們的主要ASP MVC應用程序的窗口小部件Facebook標籤的應用程序。 在我們的真正的應用程序每個用戶都有一個公衆形象是這樣的:domain.com/widget/{profile_url}這是假設在選項卡中顯示。這意味着用戶安裝的每個頁面標籤都需要一個獨特的頁面標籤url,這是Facebook頁面標籤似乎不支持的東西。Facebook標籤應用動態URL

我一直在尋找,但無法找到一個明確的答案,如何獲得動態的URL數據我在我的Facebook標籤的應用程序內部控制?

所以我的想法是,當用戶添加標籤應用程式的參數會獲得通過包含我們的應用程序配置文件的URL,後來顯示該參數將獲得通過每一次的標籤時。我們的應用程序會讀取參數,並顯示正確的配置文件

回答

2

不幸的是,FB沒有「安裝時間」選項卡設置 - 用戶無法配置它們插入到自己的網頁標籤。

當FB職位,以一個標籤,它沿着signed request發送,具有「頁面」的變量,它是嵌入你的標籤頁。如果您可以讓用戶在啓用服務時提供其頁面ID,則可以使用它來查找正確的配置文件。

0
<%@ page import ="java.io.*,java.util.*" %> <%@ page import = "java.util.Arrays,javax.crypto.Mac,javax.crypto.SecretKey,javax.crypto.spec.SecretKeySpec" %> <%@ page import = "org.json.simple.parser.*,org.apache.commons.codec.binary.Base64" %> <%@ page import = "java.io.UnsupportedEncodingException,javax.xml.bind.DatatypeConverter" %> <% 

if (request.getParameter("signed_request") != null) { 
    String input = request.getParameter("signed_request"); 
    //input ="q3v8X8hbmkKXaF_DZaLBPapMPVjMgpq8bZe-SmYc6Fs.eyJhbGdvcml0aG0iOiJITUFDLVNIQTI1NiIsImlzc3VlZF9hdCI6MTUxMjYyOTY5MiwicGFnZSI6eyJpZCI6IjEzOTg4MTM1MDM3NTUyMzEiLCJhZG1pbiI6dHJ1ZSwibGlrZWQiOnRydWV9LCJ1c2VyIjp7ImNvdW50cnkiOiJpbiIsImxvY2FsZSI6ImVuX0dCIiwiYWdlIjp7Im1pbiI6MjF9fX0"; 
    String secretKey = "d8e6e697b9c958a8ee8f2e"; 
    int max_age = 3600; 
    try 
    { 
     String[] split = input.split("[.]", 2); 
     String encoded_sig = split[0]; 
     String encoded_envelope = split[1]; 
     JSONParser parser = new JSONParser(); 
     // check 
     //out.println("<br>"+ new String(new Base64(true).decode(encoded_envelope))); 
     Map envelope = (Map) parser.parse(new String(new Base64(true).decode(encoded_envelope))); 
     String algorithm = (String) envelope.get("algorithm"); 
     if (!algorithm.equals("HMAC-SHA256")) { 
      throw new Exception("Invalid request. (Unsupported algorithm.)"); 
     } 
     if (((Long) envelope.get("issued_at")) < System.currentTimeMillis()/1000 - max_age) { 
      throw new Exception("Invalid request. (Too old.)"); 
     } 
     byte[] key = secretKey.getBytes(); 
     SecretKey hmacKey = new SecretKeySpec(key, "HMACSHA256"); 
     Mac mac = Mac.getInstance("HMACSHA256"); 
     mac.init(hmacKey); 
     byte[] digest = mac.doFinal(encoded_envelope.getBytes()); 
     if (!Arrays.equals(new Base64(true).decode(encoded_sig), digest)) { 
      throw new Exception("Invalid request. (Invalid signature.)"); 
     } 
     String pageId = ((Map)envelope.get("page")).get("id").toString(); 
     if(pageId.equals("1398813503755231")){ 
      response.sendRedirect("https://yourdomain.com/1111"); 
     } 
     else if(pageId.equals("151433128812548")){ 
      response.sendRedirect("https://yourdomain1.com/2222"); 
     } } 
    catch(Exception e) 
    { 
     out.println("error"+e); 
    } } %> <html> <head> Facebook Store <script> var appId = 'your app id'; var pageId=''; window.fbAsyncInit = function() { 
    FB.init({ 
     appId   : appId, 
     autoLogAppEvents : true, 
     xfbml   : true, 
     version   : 'v2.11' 
    }); }; (function(d, s, id){ 
    var js, fjs = d.getElementsByTagName(s)[0]; 
    if (d.getElementById(id)) {return;} 
    js = d.createElement(s); js.id = id; 
    js.src = "https://connect.facebook.net/en_US/sdk.js"; 
    fjs.parentNode.insertBefore(js, fjs); }(document, 'script', 'facebook-jssdk')); function createPageTab(){ 
    FB.ui(
     { 
      method: 'pagetab', 
      redirect_uri:'https://9d5b71a7.ngrok.io/facebook-store.jsp' 
     }, 
     function(response) { 
      console.log(JSON.stringify(response)); 
      if (response != null && response.tabs_added != null) { 
       for(pageid in response.tabs_added){ 
         pageId = pageid; 
       } 
      } 
     } 
    ); } 

function viewPageTab(){ 
    var url = 'https://facebook.com/pages/-/'+pageId+'?sk=app_'+appId; 
    window.open(url,'_blank'); } 

</script> </head> <body> 
    <button onClick="createPageTab()" >Connect your store with facebook </button> 
    <button onClick="viewPageTab();" > View your Store </button> </body> </html> 
+0

創建Facebook頁面選項卡與動態域名網址客戶端和服務器代碼。以上代碼工作正常。 – LJRKUMAR