I did Facebook integration in my project, everything is fine on emulator. When it comes to run on real device it is not working. I think the problem is Facebook access token
you can save access token on sharedReference when login as follow
public void onComplete(Bundle values)
{
SharedPreferences sp;
Editor editor = sp.edit();
editor.putString("access_token",fb.getAccessToken());
editor.putLong("access_expires",fb.getAccessExpires());
editor.commit();
}
and Check this onCreate Method as follow
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_facebook_app);
if(access_token != null){
fb.setAccessToken(access_token);
}
if(expires != 0){
fb.setAccessExpires(expires);
}
}
There is another answer for this question. We can have pre-installed facebook application to our mobile device , but we will not be interacting with the already installed application,i.e. we will not use single sign on ,better known as SSO(though it is recommended to use). We are having this method in facebook sdk. single sign-on may be disabled by passing FORCE_DIALOG_AUTH as the activityCode parameter in your call to authorize().
public void authorize(Activity activity, String[] permissions,
int activityCode, final DialogListener listener)
Here the third parameter plays the role i.e. activityCode.Now lets see its role
if (activityCode >= 0) {
singleSignOnStarted = startSingleSignOn(activity, mAppId,
permissions, activityCode);
}
// Otherwise fall back to traditional dialog.
if (!singleSignOnStarted) {
startDialogAuth(activity, permissions);
}
It means if we want to be untouched with the pre installed facebook application we have to pass activityCode with less than 0 (< 0) value.Now in your main activity where facebook api is called use
int FORCE_DIALOG_AUTH =-1;
mFacebook.authorize(this, new String[] { "publish_stream",
"read_stream", "offline_access", "friends_birthday",
"user_birthday", "email", "read_friendlists",
"manage_friendlists" },FORCE_DIALOG_AUTH , new LoginDialogListener());
If we would like to force the use of legacy dialog-based authorization, pass FORCE_DIALOG_AUTH for this parameter. Otherwise just omit this parameter and Facebook will use a suitable default. It was just to solve the problem from SSO.
The code above given is absolutely correct...The problem is if we have already installed any facebook application in our device which are upgraded versions than we are using our application will not work...If we uninstall the facebook applications in our device it will work...and there is also another way to work our application and other facebook application in our device by following steps::: if u r using eclipse then goto
Windows>Preferences>Android>Build and get the path of the debug keystore
now open terminal and run the following command
keytool -export -alias androiddebugkey -keystore "debug keystore path" | openssl sha1 -binary | openssl enc -a -e
it will ask for the password then enter android as ur password Now add the HASH KEY to your Facebook API configuration located @ http://www.facebook.com/developers/ under EDIT SETTINGS / Mobile and Devices screen.
Now i was able to run my application on HTC device