简体   繁体   English

Android facebook登录回调没有发生

[英]Android facebook login callback not happening

I'm trying to implement Facebook login for my android app using the facebook sdk 4.1.0.我正在尝试使用 facebook sdk 4.1.0 为我的 android 应用程序实现 Facebook 登录。 The LoginButton is placed inside a splashActivity and upon successful login should start the MainActivity. LoginButton 放置在 splashActivity 内,成功登录后应启动 MainActivity。 However, the facebook callback method is not runnning at all for me and I can't figure out what is causing this.但是,facebook 回调方法对我来说根本没有运行,我无法弄清楚是什么导致了这种情况。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    FacebookSdk.sdkInitialize(this.getApplicationContext());
    setContentView(R.layout.activity_splash);
    callbackManager = CallbackManager.Factory.create();
    cache = new DiskBasedCache(getApplicationContext().getCacheDir(), 1024 * 1024);
    network = new BasicNetwork(new HurlStack());
    mRequestQueue =  new RequestQueue(cache, network);
    getUserInfo();

    skip = (Button) findViewById(R.id.btnSkip);
    skip.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent done = new Intent(getBaseContext(),MainActivity.class);
            startActivity(done);
            finish();
        }
    });

    loginButton = (LoginButton) findViewById(R.id.login_button);

    loginButton.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // Call private method
            onFblogin();
            loginButton.post(new Runnable() {
                @Override
                public void run() {
                    loginButton.setVisibility(View.INVISIBLE);
                }
            });
        }
    });

    accessTokenTracker = new AccessTokenTracker() {
        @Override
        protected void onCurrentAccessTokenChanged(AccessToken oldAccessToken, AccessToken newAccessToken) {
            if(newAccessToken == null){
                LoginManager.getInstance().logOut();
            }

        }
    };
    AccessToken accessToken = AccessToken.getCurrentAccessToken();
    if(accessToken != null){
        skip.setVisibility(View.INVISIBLE);
        Intent done = new Intent(this,MainActivity.class);
        startActivity(done);
        finish();
    }
    ProfileTracker profileTracker = new ProfileTracker() {
        @Override
        protected void onCurrentProfileChanged(Profile oldProfile, Profile newProfile) {

        }
    };


    accessTokenTracker.startTracking();
}






private void onFblogin() {
        // Set permissions
        LoginManager.getInstance().logInWithReadPermissions(this,  Arrays.asList("email", "public_profile"));
        LoginManager.getInstance().registerCallback(callbackManager,
                new FacebookCallback<LoginResult>() {
                    @Override
                    public void onSuccess(LoginResult loginResult) {
                        AccessToken token = loginResult.getAccessToken();
//                        Set denied = loginResult.getRecentlyDeniedPermissions();
//                        loginResult.getRecentlyGrantedPermissions();
                        System.out.println("Success");
                        GraphRequest.newMeRequest(
                                loginResult.getAccessToken(), new GraphRequest.GraphJSONObjectCallback() {
                                    @Override
                                    public void onCompleted(JSONObject jsonObject, GraphResponse graphResponse) {
                                        if (graphResponse.getError() != null) {
                                            // handle error
                                            System.out.println("ERROR");
                                        } else {
                                            try {
                                                mRequestQueue.start();
                                                String jsonresult = String.valueOf(jsonObject);
                                                System.out.println("JSON Result" + jsonresult);

                                                JSONObject loginDetailsJSON = new JSONObject();
                                                loginDetailsJSON.put("id", jsonObject.getString("id"));
                                                loginDetailsJSON.put("name", jsonObject.getString("name"));
                                                loginDetailsJSON.put("first_name", jsonObject.getString("first_name"));
                                                loginDetailsJSON.put("last_name", jsonObject.getString("last_name"));
                                                loginDetailsJSON.put("link", jsonObject.getString("link"));
                                                loginDetailsJSON.put("gender", jsonObject.getString("gender"));
                                                loginDetailsJSON.put("locale", jsonObject.getString("locale"));
                                                loginDetailsJSON.put("timezone", jsonObject.getString("timezone"));
                                                loginDetailsJSON.put("email", jsonObject.getString("email"));
                                                loginDetailsJSON.put("verified", jsonObject.getString("verified"));
                                                loginDetailsJSON.put("updated_time", jsonObject.getString("updated_time"));
                                                loginDetailsJSON.put("age_range", "");
                                                loginDetailsJSON.put("connector", "FB");
                                                JsonObjectRequest req = new JsonObjectRequest(Request.Method.POST,
                                                        connetionStrings.LoginUrl, loginDetailsJSON.toString(), new Response.Listener<JSONObject>() {
                                                    @Override
                                                    public void onResponse(JSONObject response) {
                                                        try {
                                                            VolleyLog.v("Response:%n %s", response.toString(4));
                                                            Log.d("response: ", response.toString(4));
                                                        } catch (JSONException e) {
                                                            e.printStackTrace();
                                                        }
                                                    }
                                                }, new Response.ErrorListener() {
                                                    @Override
                                                    public void onErrorResponse(VolleyError error) {
                                                        VolleyLog.e("Error: ", error.getMessage());

                                                        Toast toast = Toast.makeText(getApplicationContext(), "Please try again", Toast.LENGTH_LONG);
                                                        toast.show();
                                                    }

                                                });
                                                mRequestQueue.add(req);
                                                Intent done = new Intent(getBaseContext(), MainActivity.class);
                                                startActivity(done);

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

Look at the https://developers.facebook.com/docs/facebook-login/android/v2.3#get_current and check, if you implemented everything (what I'm missing in your code is onActivityResult callback).查看https://developers.facebook.com/docs/facebook-login/android/v2.3#get_current并检查,如果您实现了所有内容(我在您的代码中缺少的是 onActivityResult 回调)。 Don't put initation of callback into onFbLogin method - put it directly in onCreate.不要将回调的启动放入 onFbLogin 方法中 - 将其直接放入 onCreate 中。 You don't have to add listener to LoginButton.您不必向 LoginButton 添加侦听器。 It works just after inflation.它在通货膨胀之后起作用。 And visibility of UI elements you can change in callback methods of FacebookCallback listener (make your activity implementation of it).您可以在 FacebookCallback 侦听器的回调方法中更改 UI 元素的可见性(使您的活动实现它)。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM