Вход через Facebook в приложении Android не вызывает метод onCompleted ()? - PullRequest
0 голосов
/ 13 июня 2018

Я в основном реализую Вход с Facebook в приложении для Android.Я прошёл через шаги, указанные на developers.facebook.com, и сделал все те вещи, которые там приведены.Но в моем коде метод onCompleted () не вызывается, так как я могу получить информацию о пользователе после успешного входа в систему.Любая помощь будет оценена!

Ниже приведен мой java-код

package com.example.rohitsuthar.facebook_signin;

import android.content.Intent;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Base64;
import android.util.Log;

import com.facebook.AccessToken;
import com.facebook.CallbackManager;
import com.facebook.FacebookCallback;
import com.facebook.FacebookException;
import com.facebook.GraphRequest;
import com.facebook.GraphResponse;
import com.facebook.login.LoginManager;
import com.facebook.login.LoginResult;

import org.json.JSONObject;

import java.security.MessageDigest;

public class MainActivity extends AppCompatActivity {
    CallbackManager callbackManager;
    AccessToken mAccessTokem;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        callbackManager = CallbackManager.Factory.create();
        setContentView(R.layout.activity_main);
        LoginManager.getInstance().registerCallback(callbackManager,
                new FacebookCallback<LoginResult>() {
                    @Override
                    public void onSuccess(LoginResult loginResult) {
                        // App code
                        Log.d("ROHIT","inside on success");
                        mAccessTokem=loginResult.getAccessToken();
                        Log.d("ROHIT","token retrived");
                        GraphRequest graphRequest=GraphRequest.newMeRequest(loginResult.getAccessToken(), new GraphRequest.GraphJSONObjectCallback() {
                            @Override
                            public void onCompleted(JSONObject object, GraphResponse response) {
                                //hi
                                Log.d("ROHIT","oncompleted is called");
                            }
                        });

                    }

                    @Override
                    public void onCancel() {
                        // App code
                        Log.e("ROHIT","inside onCancel");
                    }

                    @Override
                    public void onError(FacebookException exception) {
                        // App code
                        Log.e("ROHIT",exception.toString());
                    }
                });
    }
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        callbackManager.onActivityResult(requestCode, resultCode, data);
        super.onActivityResult(requestCode, resultCode, data);
    }
}

Вот мой лог

06-13 15:00:41.238 32721-32721/com.example.rohitsuthar.facebook_signin D/ROHIT: inside on success
token retrived
06-13 15:00:41.239 32721-32721/com.example.rohitsuthar.facebook_signin D/com.facebook.FacebookSdk: getGraphApiVersion: v3.0
06-13 15:00:41.244 32721-32721/com.example.rohitsuthar.facebook_signin D/AccessTokenTracker: AccessTokenChanged

После получения токена ничего не происходит, кто-нибудь, пожалуйста, скажите мне, чточто происходит и как это исправить!

Ответы [ 2 ]

0 голосов
/ 13 июня 2018

Вы должны вызвать graphRequest.executeAsync(); внутри onSuccess() метода, после того как вы определили свой GraphRequest объект, ваш код должен выглядеть следующим образом:

LoginManager.getInstance().registerCallback(callbackManager,
                new FacebookCallback<LoginResult>() {
                    @Override
                    public void onSuccess(LoginResult loginResult) {
                        // App code
                        Log.d("ROHIT","inside on success");
                        mAccessTokem=loginResult.getAccessToken();
                        Log.d("ROHIT","token retrived");
                        GraphRequest graphRequest=GraphRequest.newMeRequest(loginResult.getAccessToken(), new GraphRequest.GraphJSONObjectCallback() {
                            @Override
                            public void onCompleted(JSONObject object, GraphResponse response) {
                                //hi
                                Log.d("ROHIT","oncompleted is called");
                            }
                        });
                   Bundle parameters = new Bundle();
                   parameters.putString("fields", "id, first_name, last_name, email"); // Here you add the parameters you need from user facebook account
                   graphRequest.setParameters(parameters);
                   graphRequest.executeAsync();
                    }

                    @Override
                    public void onCancel() {
                        // App code
                        Log.e("ROHIT","inside onCancel");
                    }

                    @Override
                    public void onError(FacebookException exception) {
                        // App code
                        Log.e("ROHIT",exception.toString());
                    }
                });
0 голосов
/ 13 июня 2018

Вызовите этот метод в вашем onSuccess(), он будет работать для вас

                @Override
                public void onSuccess(LoginResult loginResult) {
                    getUserDetails(loginResult) 

                }

И метод

private void getUserDetails(LoginResult loginResult) {
        GraphRequest data_request = GraphRequest.newMeRequest(
                loginResult.getAccessToken(), new GraphRequest.GraphJSONObjectCallback() {
                    @Override
                    public void onCompleted(
                            JSONObject json_object,
                            GraphResponse response) {

   //here is your login is success now your requirement is start From here
   //do your work
    Log.e("String Response from Facebook:>",json_object.toString())


                    }

                });
        Bundle permission_param = new Bundle();
  //width and height is optional parameters
        permission_param.putString("fields", "id,name,email,picture.width(120).height(120)");
        data_request.setParameters(permission_param);
        data_request.executeAsync();

    }

Дайте мне знать, если он работает для вас или любая другая проблема вэто.

...