Any Example showing how to login using Facebook SDK 4.0 in Android either by using own button or Facebook Button?
This might help you
// Custom buttonprivate Button fbbutton;// Creating Facebook CallbackManager Valuepublic static CallbackManager callbackmanager;@Overrideprotected void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Initialize SDK before setContentView(Layout ID) FacebookSdk.sdkInitialize(getApplicationContext()); setContentView(R.layout.activity_main); // Initialize layout button fbbutton = (Button) findViewById(R.id.button2); fbbutton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // Call private method onFblogin(); } });}// Private method to handle Facebook login and callbackprivate void onFblogin(){ callbackmanager = CallbackManager.Factory.create(); // Set permissions LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList("email","user_photos","public_profile")); LoginManager.getInstance().registerCallback(callbackmanager, new FacebookCallback<LoginResult>() { @Override public void onSuccess(LoginResult loginResult) { System.out.println("Success"); GraphRequest.newMeRequest( loginResult.getAccessToken(), new GraphRequest.GraphJSONObjectCallback() { @Override public void onCompleted(JSONObject json, GraphResponse response) { if (response.getError() != null) { // handle error System.out.println("ERROR"); } else { System.out.println("Success"); try { String jsonresult = String.valueOf(json); System.out.println("JSON Result"+jsonresult); String str_email = json.getString("email"); String str_id = json.getString("id"); String str_firstname = json.getString("first_name"); String str_lastname = json.getString("last_name"); } catch (JSONException e) { e.printStackTrace(); } } } }).executeAsync(); } @Override public void onCancel() { Log.d(TAG_CANCEL,"On cancel"); } @Override public void onError(FacebookException error) { Log.d(TAG_ERROR,error.toString()); } });}@Overridepublic void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); callbackmanager.onActivityResult(requestCode, resultCode, data);}
In manifest add following,
<application android:allowBackup="true" android:icon="@drawable/app_icon" android:label="@string/app_name" android:theme="@style/AppTheme" > . . <!-- [START Facebook] --> <activity android:name="com.facebook.FacebookActivity" android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation" android:label="@string/app_name" android:theme="@android:style/Theme.Translucent.NoTitleBar" /> <meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/facebook_app_id" /> <!-- [END Facebook] --> . .</application>
The best solution is to log in by using LoginManager. Here is how I managed this ( on click is made with ButterKnife ):
@Overridepublic void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mCallbackManager = CallbackManager.Factory.create();}@Overridepublic void onViewCreated(View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); LoginManager.getInstance().registerCallback(mCallbackManager, this);}@OnClick(R.id.facebook_login_button)@SuppressWarnings("unused")public void loginWithFacebookAccount() { LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList("public_profile", "email"));}@Overridepublic void onSuccess(LoginResult loginResult) { Bundle parameters = new Bundle(); parameters.putString("fields", "id,name,last_name,link,email,picture"); GraphRequest request = GraphRequest.newMeRequest(loginResult.getAccessToken(), (jsonObject, graphResponse) -> { String id = null; if (jsonObject != null) { try { id = jsonObject.getString("id"); } catch (JSONException e) { e.printStackTrace(); } } }); request.setParameters(parameters); request.executeAsync();}@Overridepublic void onCancel() {}@Overridepublic void onError(FacebookException e) {}@Overridepublic void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (resultCode == Activity.RESULT_OK) { mCallbackManager.onActivityResult(requestCode, resultCode, data); }}
So this is how I've made it. Feel free to ask ;)
public class AuthWFacebookSDKFour extends Activity implements View.OnClickListener,FacebookCallback<LoginResult> { List<String> permissionNeeds=Arrays.asList("user_photos","friends_photos", "email", "user_birthday", "user_friends"); //facebook callbacks manager private CallbackManager cm; private LoginButton mFbLoginButton; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //init facebook sdk and FacebookSdk.sdkInitialize(getApplicationContext()); //instantiate callbacks manager mCallbackManager = CallbackManager.Factory.create(); mFbLoginButton=(LoginButton)findViewById(R.id.FBBUTTONID); //set permissions mFbLoginButton.setReadPermissions(ApplicationContext.facebookPermissions); // register callback //means hey facebook after login call onActivityResult of **this** mFbLoginButton.registerCallback(mCallbackManager, this); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); //manage login result mCallbackManager.onActivityResult(requestCode, resultCode, data); } @Override public void onSuccess(LoginResult loginResults) { //login ok get access token AccessToken.getActiveAccessToken(); } @Override public void onCancel() { Log.e(TAG(),"facebook login canceled"); } @Override public void onError(FacebookException e) { Log.e(TAG(),"facebook login failed error"); }}
remember to insert in manifest
<activity android:name="com.facebook.FacebookActivity" android:label="@string/app_name" android:theme="@android:style/Theme.Translucent.NoTitleBar" />