Android 从活动登录Facebook失败?

Android 从活动登录Facebook失败?,android,facebook,Android,Facebook,我在活动中有一个自定义按钮,用于允许用户通过Facebook登录。我的点击代码如下所示: CallbackManager callback = CallbackManager.Factory.create(); List<String> permissions = Arrays.asList("email","public_profile"); LoginManager.getInstance().logInWithReadPermissions(this,p

我在活动中有一个自定义按钮,用于允许用户通过Facebook登录。我的点击代码如下所示:

    CallbackManager callback = CallbackManager.Factory.create();
    List<String> permissions = Arrays.asList("email","public_profile");
    LoginManager.getInstance().logInWithReadPermissions(this,permissions);
    LoginManager.getInstance().registerCallback(callback, new FacebookCallback<LoginResult>() {
        @Override
        public void onSuccess(LoginResult loginResult) {
            setUserLoggedIn(PrefUtils.Values.LOG_IN_METHOD_FACEBOOK);
        }

        @Override
        public void onCancel() {
            // todo: something
        }

        @Override
        public void onError(FacebookException error) {
            Logger.d("TAG",error.getMessage());
        }
    });  
CallbackManager callback=CallbackManager.Factory.create(); 列表权限=Arrays.asList(“电子邮件”、“公共配置文件”); LoginManager.getInstance().logInWithReadPermissions(此,权限); LoginManager.getInstance().registerCallback(回调,new FacebookCallback()){ @凌驾 成功时公共无效(LoginResult LoginResult){ setUserLoggedIn(PrefUtils.Values.LOG\u IN\u METHOD\u FACEBOOK); } @凌驾 公开作废{ //托多:什么 } @凌驾 public void onError(facebook异常错误){ Logger.d(“TAG”,error.getMessage()); } }); 但是,FB登录对话框不会显示。相反,我最终会出现一个错误对话框,要求我登录。我假设这将启动显示用户名和密码编辑文本的对话框


如何获得该登录对话框?

将此按钮置于click onClick()方法上


将此按钮置于click onClick()方法上


将回调设置为全局变量,即在

        FacebookSdk.sdkInitialize(getApplicationContext());
还要重写活动的OnActivityForResult方法并添加callback.onActivityResult(请求代码、结果代码、数据),如下所示

         @Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    callback.onActivityResult(requestCode, resultCode, data);
}

希望这有帮助。如果它不让我知道。

将回调作为全局变量,即在您的

        FacebookSdk.sdkInitialize(getApplicationContext());
还要重写活动的OnActivityForResult方法并添加callback.onActivityResult(请求代码、结果代码、数据),如下所示

         @Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    callback.onActivityResult(requestCode, resultCode, data);
}
希望这有帮助。如果没有通知我。

请执行以下步骤

  • 在开始时声明此变量

    公共CallbackManager CallbackManager

  • 呼叫波纹管功能

    private void initializeFacebookSdk(){

  • 单击按钮调用此函数

    受保护的无效connectToFacebook(){

    LoginManager.getInstance().logInWithReadPermissions(此,数组.asList(“电子邮件”、“用户照片”、“用户朋友”、“公共档案”、“用户生日”));
    LoginManager.getInstance().registerCallback(callbackManager,new FacebookCallback()){
    @凌驾
    成功时公开作废(最终登录结果登录结果){
    //应用程序代码
    GraphRequest request=GraphRequest.NewMereRequest(loginResult.getAccessToken(),new GraphRequest.GraphJSONObjectCallback()){
    @凌驾
    未完成公共void(JSONObject json,GraphResponse响应){
    Log.v(“FaceBook响应:,Response.toString());
    }
    });
    Bundle参数=新Bundle();
    参数.putString(“字段”、“id、姓名、姓、性别、生日、电子邮件、链接、图片”);
    请求。设置参数(参数);
    request.executeAsync();
    }
    @凌驾
    公开作废{
    Log.v(“物流活动”、“取消”);
    }
    @凌驾
    public void onError(facebook异常){
    Utils.showtoos(mActivity,“+”例外);
    }
    });
    }
    
  • 执行以下步骤

  • 在开始时声明此变量

    公共CallbackManager CallbackManager

  • 呼叫波纹管功能

    private void initializeFacebookSdk(){

  • 单击按钮调用此函数

    受保护的无效connectToFacebook(){

    LoginManager.getInstance().logInWithReadPermissions(此,数组.asList(“电子邮件”、“用户照片”、“用户朋友”、“公共档案”、“用户生日”));
    LoginManager.getInstance().registerCallback(callbackManager,new FacebookCallback()){
    @凌驾
    成功时公开作废(最终登录结果登录结果){
    //应用程序代码
    GraphRequest request=GraphRequest.NewMereRequest(loginResult.getAccessToken(),new GraphRequest.GraphJSONObjectCallback()){
    @凌驾
    未完成公共void(JSONObject json,GraphResponse响应){
    Log.v(“FaceBook响应:,Response.toString());
    }
    });
    Bundle参数=新Bundle();
    参数.putString(“字段”、“id、姓名、姓、性别、生日、电子邮件、链接、图片”);
    请求。设置参数(参数);
    request.executeAsync();
    }
    @凌驾
    公开作废{
    Log.v(“物流活动”、“取消”);
    }
    @凌驾
    public void onError(facebook异常){
    Utils.showtoos(mActivity,“+”例外);
    }
    });
    }
    

  • 点击自定义fb按钮打开fb_登录对话框

    fb_login_button.performClick();
    

    点击自定义fb按钮打开fb_登录对话框

    fb_login_button.performClick();
    

    在这里我分享我的工作代码。希望它能帮助你

    在应用程序类内部oncreate

     FacebookSdk.sdkInitialize(getApplicationContext());
    
    然后将facebook登录按钮放在布局中,并将其可见性设置为gone。 然后在自定义按钮的onclick中编写以下代码:

    btnFBLogin.performClick(); //btnFBLogin is the Facebook LoginButton.
    
    不要忘记在初始化LoginButton后添加此选项

    btnLoginFB.setReadPermissions(Arrays.asList("email", "user_birthday"));  
    
    在oncreate中,在初始化callbackmanager后调用此函数

    callbackManager = CallbackManager.Factory.create();
    registerfb_callback();
    
    下面是registerfb_callback()函数

     /*Registering fb callback*/
    private void registerfb_callback(){
    
        btnLoginFB.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
    
            @Override
            public void onSuccess(LoginResult loginResult) {
    
                showProgressDialog(); //Show dialog as your wish
    
                String accessToken = loginResult.getAccessToken().getToken();
                Log.i("accessToken", accessToken);
    
                GraphRequest request = GraphRequest.newMeRequest(loginResult.getAccessToken(), new GraphRequest.GraphJSONObjectCallback() {
    
                    @Override
                    public void onCompleted(JSONObject object, GraphResponse response) {
    
            //Here I am logging out after completing the call.
                        LoginManager.getInstance().logOut();
    
                        progressDialog.hide();
    
                        try {
                            if(object != null) {
    
                                System.out.println("GraphResponse" + response.toString());
                                System.out.println("JSONObjectResponse" + object.toString());
                                Log.i("Activity", response.toString());
    
                                // Get facebook data from login
                                Bundle bFacebookData = getFacebookData(object);
    
    
    
                            }
                        }catch (Exception e){                     
                            e.printStackTrace();
                        }
    
                    }
    
    
                });
    
                Bundle parameters = new Bundle();
                parameters.putString("fields", "id, first_name, last_name, email,gender, birthday, location"); // Parámetros que pedimos a facebook
                request.setParameters(parameters);
                request.executeAsync();
            }
    
    
            @Override
            public void onCancel() {
                System.out.println("onCancel");
            }
    
            @Override
            public void onError(FacebookException exception) {
                Toast.makeText(Registration.this,"Network Error! Please try again!",Toast.LENGTH_LONG).show();
    
                System.out.println("onError"+exception.toString());
            }
    
    
        });
    
    }
    
    最后是活性结果

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

    希望它能帮上忙:)

    我在这里分享我的工作代码。希望它能帮到你

    在应用程序类内部oncreate

     FacebookSdk.sdkInitialize(getApplicationContext());
    
    然后将facebook登录按钮放在布局中,并将其可见性设置为gone。 然后在自定义按钮的onclick中编写以下代码:

    btnFBLogin.performClick(); //btnFBLogin is the Facebook LoginButton.
    
    不要忘记在初始化LoginButton后添加此选项

    btnLoginFB.setReadPermissions(Arrays.asList("email", "user_birthday"));  
    
    在oncreate中,在初始化callbackmanager后调用此函数

    callbackManager = CallbackManager.Factory.create();
    registerfb_callback();
    
    下面是registerfb_callback()函数

     /*Registering fb callback*/
    private void registerfb_callback(){
    
        btnLoginFB.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
    
            @Override
            public void onSuccess(LoginResult loginResult) {
    
                showProgressDialog(); //Show dialog as your wish
    
                String accessToken = loginResult.getAccessToken().getToken();
                Log.i("accessToken", accessToken);
    
                GraphRequest request = GraphRequest.newMeRequest(loginResult.getAccessToken(), new GraphRequest.GraphJSONObjectCallback() {
    
                    @Override
                    public void onCompleted(JSONObject object, GraphResponse response) {
    
            //Here I am logging out after completing the call.
                        LoginManager.getInstance().logOut();
    
                        progressDialog.hide();
    
                        try {
                            if(object != null) {
    
                                System.out.println("GraphResponse" + response.toString());
                                System.out.println("JSONObjectResponse" + object.toString());
                                Log.i("Activity", response.toString());
    
                                // Get facebook data from login
                                Bundle bFacebookData = getFacebookData(object);
    
    
    
                            }
                        }catch (Exception e){                     
                            e.printStackTrace();
                        }
    
                    }
    
    
                });
    
                Bundle parameters = new Bundle();
                parameters.putString("fields", "id, first_name, last_name, email,gender, birthday, location"); // Parámetros que pedimos a facebook
                request.setParameters(parameters);
                request.executeAsync();
            }
    
    
            @Override
            public void onCancel() {
                System.out.println("onCancel");
            }
    
            @Override
            public void onError(FacebookException exception) {
                Toast.makeText(Registration.this,"Network Error! Please try again!",Toast.LENGTH_LONG).show();
    
                System.out.println("onError"+exception.toString());
            }
    
    
        });
    
    }
    
    最后是活性结果

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

    希望它能有所帮助:)

    事实证明,有一点文档无法做到