D_R
D_R

Reputation: 4972

Installing one application by another

I am trying to check with my application if one application is installed on specific fan page and if it is not installed I want to install it.. for some reason i am unable to get the page access tokens.

I am able to get the user access tokens and user id, but the page access token returns "Exception" "Unknown fields: access_token".

What is wrong here? I am using this resources: 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>

Upvotes: 0

Views: 680

Answers (1)

D_R
D_R

Reputation: 4972

I managed to solve this issue if any one care this is the code

One of reasons it didn't work was because I used the full address "http://graph.facebook.com..." and as you can see in the code I am using the FB.api function which is adding this address automatically. Another reason is that I used the user access token to get information about the application instead of the page access token. I was also having problem to install the application because I needed to send the page access token as well.

P.S: Don't forget that you need manage_pages permission.

  <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));

Upvotes: 1

Related Questions