Android 使用自定义按钮登录FACEBOOK

Android 使用自定义按钮登录FACEBOOK,android,facebook-android-sdk,Android,Facebook Android Sdk,我已经实现了Facebook登录的自定义按钮,一切都在进行中,但我没有收到成功的onSuccess或onCancel或onError的回调,因此我可以得到返回的结果 我正在使用facebookSDKversioncom.facebook.android:facebook-android-SDK:4.1.0 以下是参考代码 public class OnBoardingActivity extends AppCompatActivity { private final String TA

我已经实现了Facebook登录的自定义按钮,一切都在进行中,但我没有收到成功的
onSuccess
onCancel
onError
的回调,因此我可以得到返回的结果

我正在使用facebook
SDK
version
com.facebook.android:facebook-android-SDK:4.1.0

以下是参考代码

public class OnBoardingActivity extends AppCompatActivity {

    private final String TAG = OnBoardingActivity.class.getSimpleName();

    private final int TIME_DELAY = 2000;
    private CallbackManager mCallBackManager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_onboarding);
        FacebookSdk.sdkInitialize(getApplicationContext());
        mCallBackManager = CallbackManager.Factory.create();

 final RelativeLayout facebookSignUp = (RelativeLayout)findViewById(R.id.facebook_signupButton);
        LoginManager.getInstance().registerCallback(mCallBackManager, new FacebookCallback<LoginResult>() {
            @Override
            public void onSuccess(LoginResult loginResult) {
                Log.d(TAG, " Login successfull +++  ");
            }

            @Override
            public void onCancel() {
                Log.d(TAG, " Login got canceled ");
            }

            @Override
            public void onError(FacebookException e) {
                Log.d(TAG, " Error in the login with exception is =  " + e);
            }
        });

           facebookSignUp.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                LoginManager.getInstance().logInWithReadPermissions(OnBoardingActivity.this, Arrays.asList("public_profile", "user_friends", "email"));
            }
        });

}
public类OnBoardingActivity扩展了AppCompatingActivity{
private final String TAG=OnBoardingActivity.class.getSimpleName();
专用最终整数时间延迟=2000;
私有CallbackManager-mCallBackManager;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
requestWindowFeature(窗口。功能\u无\u标题);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_全屏,
WindowManager.LayoutParams.FLAG(全屏);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_Onboard);
sdkinInitialize(getApplicationContext());
mCallBackManager=CallbackManager.Factory.create();
最终RelativeLayout facebookSignUp=(RelativeLayout)findViewById(R.id.facebook_signupButton);
LoginManager.getInstance().registerCallback(mCallBackManager,new FacebookCallback()){
@凌驾
成功时公共无效(LoginResult LoginResult){
Log.d(标记“登录成功+++”);
}
@凌驾
公开作废{
Log.d(标记“登录被取消”);
}
@凌驾
公共无效onError(FaceBook例外e){
Log.d(标记,“登录时出现异常的错误为=”+e);
}
});
facebookSignUp.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
LoginManager.getInstance().logInWithReadPermissions(OnBoardingActivity.this、Arrays.asList(“公共配置文件”、“用户朋友”、“电子邮件”);
}
});
}
下面是Facebook登录的片段

<application>
  <!-- To use Facebook Login or Share below activity is declared -->
        <activity android:name="com.facebook.FacebookActivity"
            android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"
            android:theme="@android:style/Theme.Translucent.NoTitleBar"
            android:label="@string/app_name" />

        <provider android:authorities="com.facebook.app.FacebookContentProvider1234"
            android:name="com.facebook.FacebookContentProvider"
            android:exported="true" />


        <meta-data
            android:name="com.facebook.sdk.ApplicationId"
            android:value="@string/facebook_app_id" />

    </application>

添加了XML布局snipet

<RelativeLayout
            android:id="@+id/facebook_signupButton"
            android:layout_width="match_parent"
            android:layout_height="43dp"
            android:layout_marginTop="10dp"
            android:background="#3a569d">

            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerVertical="true"
                android:layout_marginRight="15dip"
                android:layout_toLeftOf="@+id/login_with_facebook"
                android:scaleType="fitXY"
                android:src="@drawable/icon_facbook_small" />

            <TextView
                android:id="@+id/login_with_facebook"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerInParent="true"
                android:gravity="center"
                android:text="Login with facebook"
                android:textColor="@android:color/white" />

        </RelativeLayout>

使您的代码看起来更智能 在设置布局之前,您必须先初始化Facebook SDK

    FacebookSdk.sdkInitialize(getApplicationContext());
当使用点击按钮或在你的情况下布局调用方法做整个功能

facebookSignUp.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Fblogin();
            }
        });
这里的私有方法处理Facebook登录和回调

private void Fblogin()
{
    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);
}
private void Fblogin()
{
callbackmanager=callbackmanager.Factory.create();
//设置权限
LoginManager.getInstance().logInWithReadPermissions(这是一个数组.asList(“电子邮件”,“用户照片”,“公共档案”));
LoginManager.getInstance().registerCallback(callbackmanager,
新建FacebookCallback(){
@凌驾
成功时公共无效(LoginResult LoginResult){
System.out.println(“成功”);
格拉夫勒奎斯特(
loginResult.getAccessToken(),新GraphRequest.GraphJSONObjectCallback(){
@凌驾
未完成公共void(JSONObject json,GraphResponse响应){
if(response.getError()!=null){
//处理错误
System.out.println(“错误”);
}否则{
System.out.println(“成功”);
试一试{
String jsonresult=String.valueOf(json);
System.out.println(“JSON结果”+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”);
}捕获(JSONException e){
e、 printStackTrace();
}
}
}
}).executeAsync();
}
@凌驾
公开作废{
Log.d(标记为“取消”,“取消时”);
}
@凌驾
public void onError(FacebookException错误){
Log.d(TAG_ERROR,ERROR.toString());
}
});
}
@凌驾
ActivityResult上的公共void(int请求代码、int结果代码、意图数据){
super.onActivityResult(请求代码、结果代码、数据);
callbackmanager.onActivityResult(请求代码、结果代码、数据);
}

我为您提供了解析json文件的完整代码,使您的代码看起来更智能 在设置布局之前,您必须先初始化Facebook SDK

    FacebookSdk.sdkInitialize(getApplicationContext());
当使用点击按钮或在你的情况下布局调用方法做整个功能

facebookSignUp.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Fblogin();
            }
        });
这里的私有方法处理Facebook登录和回调

private void Fblogin()
{
    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);
}
private void Fblogin()
{
callbackmanager=callbackmanager.Factory.create();
//设置权限
LoginManager.getInstance().logInWithReadPermissions(这是一个数组.asList(“电子邮件”,“用户照片”,“公共档案”));
LoginManager.getInstance().registerCallback(callbackmanager,
新建FacebookCallback(){
@凌驾
成功时公共无效(LoginResult LoginResult){
System.out.println(“成功”);
格拉夫勒奎斯特(
loginResult.getAccessToken(),新GraphRequest.GraphJSONObjectCallback(){