Search code examples
facebookfacebook-graph-apirestfb

Facebook: send an app invitation


How can I send an invitation to use an app with Graph API? I looked at the reference, and can't find something that fits. Any clue?


Solution

  • If you need to use restfb, as I got from your tags, you can try this:

    This is a self contained junit test that retrieves the authentication token and posts an apprequest. No user generated auth_token is required but you can only send apprequests like this to users that already have authorized your app.

    Dependencies are JUnit, Commons HttpClient and restfb itself.

    package com.apprequesttest;
    
    import org.apache.commons.httpclient.HttpClient;
    import org.apache.commons.httpclient.HttpMethod;
    import org.apache.commons.httpclient.methods.GetMethod;
    import org.junit.Test;
    
    import com.restfb.DefaultFacebookClient;
    import com.restfb.Facebook;
    import com.restfb.FacebookClient;
    import com.restfb.Parameter;
    import com.restfb.types.FacebookType;
    
    public class AppRequestTest
    {
        @Test
        public void testAppRequest() throws Exception
        {
            String appId = "YOUR_APP_ID";
            String appSecret = "YOUR_ACCESS_TOKEN";
            String tokenUrl = "https://graph.facebook.com/oauth/access_token?client_id=" + appId + "&client_secret=" + appSecret
                    + "&grant_type=client_credentials";
            HttpClient client = new HttpClient();
            HttpMethod method = new GetMethod(tokenUrl);
    
            client.executeMethod(method);
            String rawAccessToken = new String(method.getResponseBody());
    
            String accessToken = rawAccessToken.split("=")[1];
    
            FacebookClient facebookClient = new DefaultFacebookClient(accessToken);
    
            String apprequestCall = "TARGET_USER_ID/apprequests";
    
            AppRequestResponse apprequest = facebookClient.publish(apprequestCall,
                                                                   AppRequestResponse.class,
                                                                   Parameter.with("message", "BANANAMSG"),
                                                                   Parameter.with("data", "BANANADATA"));
    
            System.out.println(apprequest.request);
            System.out.println(apprequest.to);
    
        }
    
        /**
         * Couldn't find any beans that would acomodate this response on restfb so we create our own here
         * Looks like "to" is an array but this works well enough for the sake of the example 
         */
        public static class AppRequestResponse extends FacebookType
        {
            private static final long serialVersionUID = 1L;
    
            public AppRequestResponse()
            {
                // Empty
            }
    
            @Facebook
            public String request;
    
            @Facebook
            public String to;
        }
    }