Auto post on Facebook on user behalf

edited February 2015 in Android Mode

Hi guys! I have developed a physics based (Box2d) game for android using Processing and I want to add score sharing option to it so that the user can share his/her best score on their facebook timeline after the game. I have setup Facebook SDK in eclipse. I have searched over internet and found this solution:

public class FacebookConnector {
            private static final String APP_ID = "****************";
            private Facebook facebook;
            private AsyncFacebookRunner mAsyncRunner;
            String FILENAME = "AndroidSSO_data";
            SharedPreferences mPrefs;

            public FacebookConnector() {
                facebook = new Facebook(APP_ID);
                mAsyncRunner = new AsyncFacebookRunner(facebook);
            }

        public void loginToFacebook() {
            mPrefs = getPreferences(MODE_PRIVATE);
            String access_token = mPrefs.getString("access_token", null);
            long expires = mPrefs.getLong("access_expires", 0);

            if (access_token != null) {
                facebook.setAccessToken(access_token);
            }

            if (expires != 0) {
                facebook.setAccessExpires(expires);
            }

            if (!facebook.isSessionValid()) {
                facebook.authorize(LocalPakistaniGames.this,
                        new String[] { "email",
                        "publish_stream" }, new DialogListener() {

                    public void onCancel() {
                        // Function to handle cancel event
                    }

                    public void onComplete(Bundle values) {
                        // Function to handle complete event
                        // Edit Preferences and update facebook acess_token
                        SharedPreferences.Editor editor = mPrefs.edit();
                        editor.putString("access_token",
                                facebook.getAccessToken());
                        editor.putLong("access_expires",
                                facebook.getAccessExpires());
                        editor.commit();
                    }

                    public void onError(DialogError error) {
                        // Function to handle error

                    }

                    public void onFacebookError(FacebookError fberror) {
                        // Function to handle Facebook errors

                    }

                });
            }
        }

        public void logoutFromFacebook() {
            mAsyncRunner.logout(LocalPakistaniGames.this,
                    new RequestListener() {
                @Override
                public void onComplete(String response, Object state) {
                    Log.d("Logout from Facebook", response);
                    if (Boolean.parseBoolean(response) == true) {
                        // User successfully Logged out
                    }
                }

                @Override
                public void onIOException(IOException e, Object state) {
                }

                @Override
                public void onFileNotFoundException(FileNotFoundException e,
                        Object state) {
                }

                @Override
                public void onMalformedURLException(MalformedURLException e,
                        Object state) {
                }

                @Override
                public void onFacebookError(FacebookError e, Object state) {
                }
            });
        }

        public void getProfileInformation() {
            mAsyncRunner.request("me", new RequestListener() {
                public void onComplete(String response, Object state) {
                    Log.d("Profile", response);
                    String json = response;
                    try {
                        JSONObject profile = new JSONObject(json);
                        // getting name of the user
                        final String name = profile.getString("name");
                        // getting email of the user
                        final String email = profile.getString("email");

                        runOnUiThread(new Runnable() {

                            @Override
                            public void run() {
                                Toast.makeText(getApplicationContext(),
                                        "Name: " + name + "\nEmail: " + email,
                                        Toast.LENGTH_LONG).show();
                            }

                        });

                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                }

                public void onIOException1(IOException e, Object state) {
                }

                public void onFileNotFoundException1(FileNotFoundException e,
                        Object state) {
                }

                public void onMalformedURLException1(MalformedURLException e,
                        Object state) {
                }

                @Override
                public void onFacebookError(FacebookError e, Object state) {
                }

                @Override
                public void onIOException(IOException e, Object state) {
                    // TODO Auto-generated method stub

                }

                @Override
                public void onFileNotFoundException(FileNotFoundException e,
                        Object state) {
                    // TODO Auto-generated method stub

                }

                @Override
                public void onMalformedURLException(MalformedURLException e,
                        Object state) {
                    // TODO Auto-generated method stub

                }
            });
        }

        public void postToWall(int level, int score) {
            // post on user's wall.
            String msg = "I just made new best score in Level " + level
                    + ". My new Best Score is " + score + ". Beat my score!";
            final Bundle parameters = new Bundle();
            parameters.putString("description", msg);
            parameters.putString("picture", "http://i57.tinypic.com/fui2o.png");
            parameters.putString("link",
                    "https://www.facebook.com/LocalPakistaniGamesAndroid");
            parameters.putString("name", "Local Pakistani Games");
            parameters.putString("caption",
                    "Share this. Be a part of preserving Pakistani culture.");
            LocalPakistaniGames.this.runOnUiThread(new Runnable() {
                public void run() {
                    facebook.dialog(LocalPakistaniGames.this, "feed",
                            parameters, new DialogListener() {

                                @Override
                                public void onComplete(Bundle values) {
                                    // TODO Auto-generated method stub
                                    if (values != null) {
                                    Toast.makeText(LocalPakistaniGames.this,
                                            "Shared successfully on your timeline!",
                                            Toast.LENGTH_SHORT).show();
                                    } else {
                                        Toast.makeText(
                                                LocalPakistaniGames.this,
                                                "Share cancelled!",
                                                Toast.LENGTH_SHORT).show();
                                    }
                                }

                                @Override
                                public void onFacebookError(FacebookError e) {
                                    // TODO Auto-generated method stub
                                    Toast.makeText(LocalPakistaniGames.this,
                                            "Facebook Error!",
                                            Toast.LENGTH_SHORT)
                                            .show();
                                }

                                @Override
                                public void onError(DialogError e) {
                                    // TODO Auto-generated method stub
                                    Toast.makeText(LocalPakistaniGames.this,
                                            "Error!", Toast.LENGTH_SHORT)
                                            .show();
                                }

                                @Override
                                public void onCancel() {
                                    // TODO Auto-generated method stub
                                    Toast.makeText(LocalPakistaniGames.this,
                                            "Share cancelled!",
                                            Toast.LENGTH_SHORT).show();
                                }
                            });
                }
            });
        }
    }

Its working fine and giving a pre-filled dialog box where user can either share or close the dialog box. I have checked and It's sharing correctly on Facebook timeline. But the problem is that it is not using Facebook app installed on the device. Its using chrome on my device to login to Facebook. Is there any way to force it to use Facebook app for android instead of going to chrome (or any other browser)??

Comments

Sign In or Register to comment.