显示如何使用自己的button或Facebookbutton在Android中使用Facebook SDK 4.0login的任何示例?

有没有教程或例子显示如何使用自己的buttonlogin使用Android SDK中的Facebook SDK 4.0 ? 我没有得到任何地方和使用Facebook开发人员的网站,这是很难理解的。下面的时候调用FBloginbutton,我想要检查去login,如果用户还没有login或如果login我希望访问令牌获取Facebook的个人资料信息和用户喜欢。

FBlogin.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //Facebook login Code to get profile info and user likes } }); 

我也尝试loginFacebook的Facebook。

  <com.facebook.login.widget.LoginButton android:id="@+id/login_button" android:layout_width="244dp" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:layout_marginTop="30dp" android:layout_marginBottom="30dp" /> 

但它在xml中显示错误: –

 java.lang.NoClassDefFoundError: Could not initialize class com.facebook.login.widget.LoginButton at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:408) at org.jetbrains.android.uipreview.ViewLoader.createNewInstance(ViewLoader.java:413) at org.jetbrains.android.uipreview.ViewLoader.loadView(ViewLoader.java:105) at com.android.tools.idea.rendering.LayoutlibCallback.loadView(LayoutlibCallback.java:176) at android.view.BridgeInflater.loadCustomView(BridgeInflater.java:206) at android.view.BridgeInflater.createViewFromTag(BridgeInflater.java:131) at android.view.LayoutInflater.rInflate_Original(LayoutInflater.java:739) at android.view.LayoutInflater_Delegate.rInflate(LayoutInflater_Delegate.java:64) at android.view.LayoutInflater.rInflate(LayoutInflater.java:711) at android.view.LayoutInflater.inflate(LayoutInflater.java:489) at android.view.LayoutInflater.inflate(LayoutInflater.java:372) at com.android.layoutlib.bridge.impl.RenderSessionImpl.inflate(RenderSessionImpl.java:369) at com.android.layoutlib.bridge.Bridge.createSession(Bridge.java:326) at com.android.ide.common.rendering.LayoutLibrary.createSession(LayoutLibrary.java:350) at com.android.tools.idea.rendering.RenderService$5.compute(RenderService.java:708) at com.android.tools.idea.rendering.RenderService$5.compute(RenderService.java:697) at com.intellij.openapi.application.impl.ApplicationImpl.runReadAction(ApplicationImpl.java:932) at com.android.tools.idea.rendering.RenderService.createRenderSession(RenderService.java:697) at com.android.tools.idea.rendering.RenderService.render(RenderService.java:816) at org.jetbrains.android.uipreview.AndroidLayoutPreviewToolWindowManager.doRender(AndroidLayoutPreviewToolWindowManager.java:646) at org.jetbrains.android.uipreview.AndroidLayoutPreviewToolWindowManager.access$1700(AndroidLayoutPreviewToolWindowManager.java:82) at org.jetbrains.android.uipreview.AndroidLayoutPreviewToolWindowManager$7$1.run(AndroidLayoutPreviewToolWindowManager.java:589) at com.intellij.openapi.progress.impl.ProgressManagerImpl$2.run(ProgressManagerImpl.java:178) at com.intellij.openapi.progress.ProgressManager.executeProcessUnderProgress(ProgressManager.java:209) at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:212) at com.intellij.openapi.progress.impl.ProgressManagerImpl.runProcess(ProgressManagerImpl.java:171) at org.jetbrains.android.uipreview.AndroidLayoutPreviewToolWindowManager$7.run(AndroidLayoutPreviewToolWindowManager.java:584) at com.intellij.util.ui.update.MergingUpdateQueue.execute(MergingUpdateQueue.java:320) at com.intellij.util.ui.update.MergingUpdateQueue.execute(MergingUpdateQueue.java:310) at com.intellij.util.ui.update.MergingUpdateQueue$2.run(MergingUpdateQueue.java:254) at com.intellij.util.ui.update.MergingUpdateQueue.flush(MergingUpdateQueue.java:269) at com.intellij.util.ui.update.MergingUpdateQueue.flush(MergingUpdateQueue.java:227) at com.intellij.util.ui.update.MergingUpdateQueue.run(MergingUpdateQueue.java:217) at com.intellij.util.concurrency.QueueProcessor.runSafely(QueueProcessor.java:238) at com.intellij.util.Alarm$Request$1.run(Alarm.java:327) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:745) 

我的活动课程: –

 protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); FacebookSdk.sdkInitialize(getApplicationContext()); setContentView(R.layout.activity_main); 

Ia有任何例子/教程login使用Facebook SDKD4.0? 我被卡住了。 请帮忙。

Solutions Collecting From Web of "显示如何使用自己的button或Facebookbutton在Android中使用Facebook SDK 4.0login的任何示例?"

这可能会帮助你

 // Custom button private Button fbbutton; // Creating Facebook CallbackManager Value public static CallbackManager callbackmanager; @Override protected 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 callback private 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()); } }); } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); callbackmanager.onActivityResult(requestCode, resultCode, data); } 

在清单中添加以下,

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

最好的解决scheme是使用LoginManagerlogin。 这是我如何pipe理这个(点击是用ButterKnife做的):

  @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mCallbackManager = CallbackManager.Factory.create(); } @Override public 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")); } @Override public 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(); } @Override public void onCancel() { } @Override public void onError(FacebookException e) { } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (resultCode == Activity.RESULT_OK) { mCallbackManager.onActivityResult(requestCode, resultCode, data); } } 

所以我就是这样做的 随意问;)

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

记得插入清单

 <activity android:name="com.facebook.FacebookActivity" android:label="@string/app_name" android:theme="@android:style/Theme.Translucent.NoTitleBar" /> 

对于Facebook SDK版本4.X,在您的活动或片段(通常onCreate()方法):

 // Initialize Facebook Sdk before UI FacebookSdk.sdkInitialize(getApplicationContext()); callbackManager = CallbackManager.Factory.create(); loginButton = (LoginButton) findViewById(R.id.login_button); loginButton.setReadPermissions("user_friends"); // Callback registration loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() { @Override public void onSuccess(LoginResult loginResult) { // App code Log.v(TAG, "fblogin onSuccess"); } @Override public void onCancel() { // App code Log.v(TAG, "fblogin onCancel"); } @Override public void onError(FacebookException exception) { // App code Log.v(TAG, "fblogin onError"); } }); 

而且也不要忘记将facebook活动结果传递给经理:

 @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { ... callbackManager.onActivityResult(requestCode, resultCode, data); } 

使用Android的Facebook SDK 4.X与faceboooklogin默认Login_button

 public class FbDefaultBtnLogin extends AppCompatActivity { private CallbackManager callbackManager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); FacebookSdk.sdkInitialize(getApplicationContext()); setContentView(R.layout.activity_fb_default_btn_login); callbackManager = CallbackManager.Factory.create(); // LoginButton loginButton=(LoginButton)findViewById(R.id.login_button); LoginManager.getInstance().logInWithReadPermissions(this,Arrays.asList("email","user_photos","public_profile")); LoginManager.getInstance().registerCallback(callbackManager, new FacebookCallback<LoginResult>() { @Override public void onSuccess(LoginResult loginResult) { } @Override public void onCancel() { } @Override public void onError(FacebookException e) { } }); } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); callbackManager.onActivityResult(requestCode, resultCode, data); } <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.jitendra.facebooklogin.FbDefaultBtnLogin"> <!--<com.facebook.login.widget.LoginButton--> <!--android:id="@+id/login_button"--> <!--android:layout_width="wrap_content"--> <!--android:layout_height="wrap_content"--> <!--android:layout_gravity="center_horizontal"--> <!--android:layout_marginTop="30dp"--> <!--android:layout_marginBottom="30dp" /> </RelativeLayout> 

在主页: –

  <meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/app_id" /> <activity android:name="com.facebook.FacebookActivity" android:theme="@style/AppTheme" > </activity> 

嗨检查这个教程: 点击这里

在本教程中,您可以使用自定义login注销button逻辑获取最新的 Facebook SDK示例。 在这里输入图像说明