2012-02-08 60 views
0

我想用我的应用程序检查一个应用程序是否安装在特定的粉丝页面上,如果它没有安装我想安装它.. 由于某种原因,我无法访问页面令牌。另一个安装一个应用程序

我能够获得用户访问令牌和用户ID,但页面访问令牌返回“异常”“未知字段:access_token”。

这里有什么问题? 我使用这个资源: http://developers.facebook.com/docs/reference/api/page/#tabs https://developers.facebook.com/docs/authentication/

<html> 
    <head> 
    </head> 
    <body> 
     <div id="fb-root"></div> 
     <script> 
     window.fbAsyncInit = function() { 
      FB.init({ 
      appId  : '188474844587139', 
      status  : true, 
      cookie  : true, 
      xfbml  : true, 
      oauth  : true, 
      }); 

      FB.getLoginStatus(function(response) { 
       if (response.status === 'connected') { 
       var uid = response.authResponse.userID; 
       var userAccessToken = response.authResponse.accessToken; 
       console.log("User Access Token: "+userAccessToken); 
       console.log("User ID: "+uid); 

       // get page access token 
       FB.api('https://graph.facebook.com/'+uid+'/accounts?access_token='+userAccessToken, function(response) { 
        console.log(response); 

        var pageAccessToken = 'Need to get from the response...'; 

        // get information if user got this app 
        FB.api("https://graph.facebook.com/102561956524622/tabs/353470634682630?access_token="+pageAccessToken, 
         function(data) { 
         console.log(data); 
        }); 

        // install the app 
        var params = {}; 
        params['app_id'] = '353470634682630'; 
        FB.api('https://graph.facebook.com/102561956524622/tabs'+pageAccessToken, 'post', params, function(response) { 
         if (!response || response.error) { 
         console.log("Error: "+response); 
         } else { 
         console.log("Ok: "+response); 
         } 
        }); 
       }); 
       } else if (response.status === 'not_authorized') { 
       console.log("the user is logged in to Facebook, but not connected to the app."); 
       } else { 
       console.log("the user isn't even logged in to Facebook."); 
       } 
      }); 
     }; 

     (function(d){ 
      var js, id = 'facebook-jssdk'; if (d.getElementById(id)) {return;} 
      js = d.createElement('script'); js.id = id; js.async = true; 
      js.src = "//connect.facebook.net/en_US/all.js"; 
      d.getElementsByTagName('head')[0].appendChild(js); 
     }(document)); 
     </script> 
    </body> 
</html> 

回答

1

我设法解决这个问题,如果任何一个关心这是代码

一它没有工作的原因是因为我使用了完整的地址“http://graph.facebook.com ...”,正如您在代码中看到的,我使用的是添加此地址的 FB.api函数自动。 另一个原因是我使用用户访问令牌来获取有关应用程序的信息,而不是页面访问令牌。 我也遇到安装应用程序的问题,因为我也需要发送页面访问令牌。

P.S:不要忘记您需要manage_pages权限。

<script> 
    window.fbAsyncInit = function() { 
     FB.init({ 
     appId  : '188474844587139', 
     status  : true, 
     cookie  : true, 
     xfbml  : true, 
     oauth  : true, 
     }); 

     FB.getLoginStatus(function(response) { 
      if (response.status === 'connected') { 
      var uid = response.authResponse.userID; 
      console.log(response.authResponse); 
      var userAccessToken = response.authResponse.accessToken; 
      var pageId = '102561956524622'; 
      var appId = '353470634682630'; 
      console.log("User Access Token: "+userAccessToken); 
      console.log("User ID: "+uid); 

      // get page access token 
      FB.api('/'+pageId+'?fields=access_token='+userAccessToken, function(response) { 
       var pageAccessToken = response.access_token; 

       // get information if user got this app 
       FB.api('/'+pageId+'/tabs/'+appId+'?access_token='+pageAccessToken, 
        function(data) { 
        if (data.data.length < 1) { 
         console.log("Not installed, Installing..."); 

         // install the app 
         var params = {}; 
         params['app_id'] = appId; 
         FB.api('/'+pageId+'/tabs?access_token='+pageAccessToken, 'post', params, function(response) { 
          if (!response || response.error) { 
           console.log("Error Installing:"); 
           console.log(response); 
          } else { 
           console.log("Installed :)"); 
           console.log(response); 
          } 
         }); 
        } 
        else { 
         console.log("Already installed."); 
        } 
       }); 
      }); 
      } else if (response.status === 'not_authorized') { 
      console.log("the user is logged in to Facebook, but not connected to the app."); 
      } else { 
      console.log("the user isn't even logged in to Facebook."); 
      } 
     }); 
    }; 

(function(d){ 
    var js, id = 'facebook-jssdk'; if (d.getElementById(id)) {return;} 
    js = d.createElement('script'); js.id = id; js.async = true; 
    js.src = "//connect.facebook.net/en_US/all.js"; 
    d.getElementsByTagName('head')[0].appendChild(js); 
}(document)); 

+0

你真的应该解释一下您的解决方案,而不是仅仅抛出代码在这里了。虽然这在技术上可能是解决方案,但它不是一个非常翔实的答案。 – Lix 2012-02-09 14:35:09

+0

不要灰心试图回答问题! (我看到这是你的第一个答案)。只要注意提供高质量的答案。 – Lix 2012-02-09 14:35:47

+1

你说得对,我会立即解释.. – DanR 2012-02-09 14:47:31

相关问题