Facebook Tab App动态URL

时间:2013-12-08 16:57:43

标签: javascript asp.net-mvc facebook facebook-javascript-sdk

我正在创建一个facebook选项卡应用程序,其中包含我们的主要ASP MVC应用程序的小部件。 我们真实应用中的每个用户都有一个这样的公共配置文件:domain.com/widget/{profile_url},可以在选项卡中显示。这意味着用户安装的每个页面选项卡都需要一个唯一的页面选项卡URL,这是facebook页面选项卡似乎不支持的内容。

我一直在搜索,但无法找到明确的答案,如何获取我在facebook标签应用中控制的动态网址数据?

所以我的想法是,当用户添加选项卡应用程序时,将传递包含我们的应用程序配置文件URL的参数,以及稍后显示每次都会传递参数的选项卡时。我们的应用程序将读取参数并显示正确的配置文件

2 个答案:

答案 0 :(得分:2)

不幸的是,FB没有“安装时间”标签设置 - 用户无法配置他们插入页面的标签。

当FB发布到标签页时,它会发送signed request个“页面”变量,这是嵌入标签页的页面。如果您可以让用户在启用服务时提供其网页ID,则可以使用此功能查找正确的个人资料。

答案 1 :(得分: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>