Вручную создайте поток входа для Facebook на Android

Я работаю над проектом, в котором мне нужно осуществить вход с использованием авторизации Facebook на Android. Я реализовал Facebook API, но он предоставляет токен доступа, когда мне нужен код (который используется для получения токена). Я нашел советы о том, что я не могу использовать / модифицировать API FB, чтобы просто получить код, вместо этого я должен запрограммировать свой собственный поток входа в систему. Я знаю, что есть основная документация на странице разработчика fb, но она ничего не говорит о реализации этой функции на Android.

Любая помощь приветствуется.

Ответы на вопрос(2)

Решение Вопроса

с помощью модернизации. -> Интегрировать OAuth в вашем приложении.

Фрагмент кода:

// you should either define client id and secret as constants or in string resources
private final String clientId = "xxxxxxxxxxxxxxxxx";
private final String responseType = "code";

/**
 * same as in manifest in intent filter
 */
private final String redirectUri = "http://www.example.com/gizmos";

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_login);

    try {
        PackageInfo info = getPackageManager().getPackageInfo(
                "xxxxxxxxxxxxxxx",  // replace with your unique package name
                PackageManager.GET_SIGNATURES);
        for (Signature signature : info.signatures) {
            MessageDigest md = MessageDigest.getInstance("SHA");
            md.update(signature.toByteArray());
            Log.i("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT));
        }
    } catch (PackageManager.NameNotFoundException e) {

    } catch (NoSuchAlgorithmException e) {

    }

    Button loginButton = (Button) findViewById(R.id.loginbutton);
    loginButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(
                    Intent.ACTION_VIEW,
                    Uri.parse(ServiceGenerator.API_BASE_URL + "/dialog/oauth" +
                            "?client_id=" + clientId +
                            "&redirect_uri=" + redirectUri +
                            "&response_type=" + responseType));
            startActivity(intent);
        }
    });
}

@Override
protected void onResume() {
    super.onResume();

    // the intent filter defined in AndroidManifest will handle the return from ACTION_VIEW intent
    Uri uri = getIntent().getData();
    if (uri != null && uri.toString().startsWith(redirectUri)) {
        // use the parameter your API exposes for the code (mostly it's "code")
        String code = uri.getQueryParameter("code");
        if (code != null) {
            Log.i("code", code);
            // get access token
            // we'll do that in a minute
        } else if (uri.getQueryParameter("error") != null) {
            // show an error message here
        }
    }
}

}

 Phan Dinh Thai23 авг. 2017 г., 09:56
большое спасибо, мужик!
 Gal Koren14 нояб. 2018 г., 10:24
Привет, можешь рассказать о redirect_uri? что вы подразумеваете под: так же, как в манифесте в фильтре намерений (это должен быть URL?) Спасибо.

Создание потока входа в систему вручную:https://developers.facebook.com/docs/facebook-login/manually-build-a-login-flow

Android SDK:https://developers.facebook.com/docs/android/

Исходный код Android SDK:https://github.com/facebook/facebook-android-sdk

 Code24 июн. 2016 г., 09:25
@ Reiz3N А почему бы не использовать официальный SDK?
 Kamajabu24 июн. 2016 г., 09:58
@ Код, так что мне нужно поместить его в заголовок? Хорошо, я могу это сделать, но вопрос в том, что с response_url? Это указывает на сайт, который должен быть открыт в другом фрагменте?
 Kamajabu24 июн. 2016 г., 09:55
@CBroe, потому что наш сервер использует код вместо токена при авторизации входа пользователя на сайт. Это чертовски неприятно, но я ничего не могу с этим поделать.
 CBroe24 июн. 2016 г., 09:54
И зачем вам нужен код вместо токена?
 Code24 июн. 2016 г., 09:25
@ Reiz3N Вам не нужно использовать какую-либо библиотеку (вы можете, если хотите). Это просто ПОЛУЧИТЬ запросы. Увидетьstackoverflow.com/questions/3505930/...
 Kamajabu24 июн. 2016 г., 09:05
Я написал, что уже реализовал этот API, но ручной вход в систему не использует его (если я правильно понимаю). Итак, вы только что дали мне кучу ссылок, которые я уже видел. Мой вопрос заключается в том, что я должен использовать для реализации этого потока входа в систему. Модифицировать с OAuth? Изменить Facebook API? Некоторые хорошо?
 Kamajabu24 июн. 2016 г., 09:48
Не "facebook.com/dialog/oauth? client_id = {app-id} & redirect_uri = {redirect-uri} "POST-метон с www-form-urlencoded? Как я уже писал, при использовании официального SDK вы получаете TOKEN, а не CODE. И как сказано здесь:stackoverflow.com/questions/34454489/... использование официального метода SDK не позволяет этого.
 Code24 июн. 2016 г., 10:02
@ Reiz3N Перенаправьте браузер обратно в приложение после входа пользователя. Увидетьstackoverflow.com/questions/5065982/... Мы также выходим за рамки этого вопроса. Если у вас есть более конкретные, напишите новый вопрос.
 Code24 июн. 2016 г., 09:55
@ Reiz3N Нет, это не так. Вы (программно) открываете этот URL в браузере.

Ваш ответ на вопрос