Facebook从活动登录失败了吗?

时间:2016-02-26 10:40:48

标签: android facebook

我在活动中有一个自定义按钮,用于允许用户通过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());
        }
    });  

但是,FB登录对话框不会显示。相反,我最终得到一个错误对话框,要求我登录。我假设这会启动显示用户名和密码编辑文本的对话框。

如何获得该登录对话框?

6 个答案:

答案 0 :(得分:1)

单击“自定义fb”按钮打开fb_login对话框

fb_login_button.performClick();

答案 1 :(得分:1)

事实证明,文档没有提及的一小步。完成从调试密钥库计算哈希后,您必须单击&#34;添加平台&#34;在您的开发者个人资料中,然后选择&#34; Android&#34;并按照屏幕上的说明进行操作。

答案 2 :(得分:0)

点击按钮点击onClick()方法

Fblogin.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View view) {


               LoginManager.getInstance().logInWithReadPermissions(context,

            Arrays.asList("email", "user_photos", "public_profile"));
    }
});



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

答案 3 :(得分:0)

将回调设为全局变量,即将其初始化为

        FacebookSdk.sdkInitialize(getApplicationContext());

还覆盖活动的OnActivityForResult方法,并按如下方式添加callback.onActivityResult(requestCode,resultCode,data)。

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

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

答案 4 :(得分:0)

执行此步骤

  1. 在开始时声明此变量

    public CallbackManager callbackManager;

  2. 调用波纹管功能

    private void initializeFacebookSdk(){

        FacebookSdk.sdkInitialize(getApplicationContext());
        callbackManager = CallbackManager.Factory.create();
    }
    
  3. 点击按钮

    调用此功能

    protected void connectToFacebook(){

        LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList("email", "user_photos", "user_friends", "public_profile", "user_birthday"));
        LoginManager.getInstance().registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
            @Override
            public void onSuccess(final LoginResult loginResult) {
                // App code
                GraphRequest request = GraphRequest.newMeRequest(loginResult.getAccessToken(), new GraphRequest.GraphJSONObjectCallback() {
                    @Override
                    public void onCompleted(JSONObject json, GraphResponse response) {
    
                        Log.v("FaceBook Response :", response.toString());
                    }
                });
                Bundle parameters = new Bundle();
                parameters.putString("fields", "id,name,first_name,last_name,gender, birthday,email,link,picture");
                request.setParameters(parameters);
                request.executeAsync();
            }
    
            @Override
            public void onCancel() {
                Log.v("LoginActivity", "cancel");
            }
    
            @Override
            public void onError(FacebookException exception) {
                Utils.showToast(mActivity, "" + exception);
            }
        });
    }
    

答案 5 :(得分:0)

我在这里分享我的工作代码。希望它会对你有所帮助。

在应用程序类中创建

 FacebookSdk.sdkInitialize(getApplicationContext());

然后将facebook LoginButton放入您的布局中并将其可见性设置为已消失。 然后在自定义按钮的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());
        }


    });

}

从JSON对象获取解析数据

/*Parsing facebook data from JSON Object*/
private Bundle getFacebookData(JSONObject object) {
    Bundle bundle = new Bundle();
    try {

        String id = object.getString("id");

        try {
            URL profile_pic = new URL("https://graph.facebook.com/" + id + "/picture?width=200&height=150");
            Log.i("profile_pic", profile_pic + "");
            bundle.putString("profile_pic", profile_pic.toString());

        } catch (MalformedURLException e) {
            e.printStackTrace();
            return null;
        }

        bundle.putString("idFacebook", id);
        if (object.has("first_name"))
            bundle.putString("first_name", object.getString("first_name"));
        if (object.has("last_name"))
            bundle.putString("last_name", object.getString("last_name"));
        if (object.has("email"))
            bundle.putString("email", object.getString("email"));
        if (object.has("gender"))
            bundle.putString("gender", object.getString("gender"));
        if (object.has("birthday"))
            bundle.putString("birthday", object.getString("birthday"));
        if (object.has("location"))
            bundle.putString("location", object.getJSONObject("location").getString("name"));

        return bundle;
    }catch (JSONException e){
        e.printStackTrace();
    }

    return bundle;
}

最后是onActivityResult

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

希望它会有所帮助:)

相关问题