Аутентификация Facebook во фрагменте Android с компонентом навигацииAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Аутентификация Facebook во фрагменте Android с компонентом навигации

Сообщение Anonymous »

Я пытаюсь войти в Facebook, используя собственный интерфейс, в классе Activity все работает нормально. то же самое мне нужно сделать и во фрагменте. но он не входит в систему правильно. Я получаю этот экран, когда нажимаю кнопку Facebook
Изображение

когда я нажимаю кнопку «Продолжить», я не получаю сообщение Log.i(), которое печатаю

это мой код фрагмента

Код: Выделить всё

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
binding = FragmentLoginBinding.inflate(inflater, container, false);
// facebook callback
callbackManager = CallbackManager.Factory.create();

LoginManager.getInstance().registerCallback(callbackManager,
new FacebookCallback() {
@Override
public void onSuccess(LoginResult loginResult) {
// App code
loginWithFacebook(loginResult);
}

@Override
public void onCancel() {
// App code
}

@Override
public void onError(FacebookException exception) {
// App code
Log.e("Login With facebook", "onError: ", exception);
}
});
binding.btnRegisterFacebook.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
LoginManager.getInstance().logInWithReadPermissions(requireActivity(), Arrays.asList("public_profile"));
}
});
return binding.getRoot();
}
@Override
public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
callbackManager.onActivityResult(requestCode, resultCode, data);
super.onActivityResult(requestCode, resultCode, data);
}

private void loginWithFacebook(LoginResult loginResult) {
// here we will get access token and save data to server
AccessToken accessToken = loginResult.getAccessToken();
GraphRequest request = GraphRequest.newMeRequest(
accessToken,
new GraphRequest.GraphJSONObjectCallback() {
@Override
public void onCompleted(
JSONObject object,
GraphResponse response) {
try {
String name = object.getString("name");
String id = object.getString("id");
// save to server
Log.i("Facebook auth",id);
Log.i("Facebook auth",name);
} catch (JSONException e) {
Log.e("Login With facebook", "onCompleted: ", e);
throw new RuntimeException(e);
}
// Application code
}
});
Bundle parameters = new Bundle();
parameters.putString("fields", "id,name,link");
request.setParameters(parameters);
request.executeAsync();
}
и я добавил этот код в свою активность хоста

Код: Выделить всё

@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
Fragment navhost = getSupportFragmentManager().findFragmentById(R.id.nav_host_fragment);
navhost.onActivityResult(requestCode,resultCode,data);
super.onActivityResult(requestCode, resultCode, data);
}
Я использую компонент навигации в своем приложении, и тот же код работает хорошо, когда я использую его в работе.

Подробнее здесь: https://stackoverflow.com/questions/776 ... -component
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»