Интеграция входа в Android Instagram

Я пытаюсь выполнить вход в социальную сеть через Instagram без Graph API и читаю все необходимое, связанное с этим, из документации Instagram и StackOverflow.

Вот что я делал в своем проекте до сих пор:

  1. Войдите в учетную запись разработчика Instagram через мой пароль.

  2. Управление клиентом> Зарегистрируйте нового клиента и добавьте сгенерированный идентификатор клиента, секретный ключ и URL-адрес перенаправления в мой постоянный файл.

  3. А для веб-просмотра мой полный URL-адрес: https://api.instagram.com/oauth/authorize/?client_id=af7efcca661e43459b1e502af7ddb689&redirect_url=https://instagram.com/&response_type=token&scope=basic+public_content

  4. Когда я ввожу имя пользователя и пароль в WebView вместо того, чтобы перемещаться по нему по URL-адресу перенаправления, он постоянно показывает мне ошибку в WebView как: {"error_type": "OAuthException", "code": 400, "error_message": "You must include a valid client_id, response_type, and redirect_uri parameters"}

  5. Я хочу получить access_token, но он показывает мою ошибку.

Ниже приведен мой необходимый код:

MainActivity.java

public class MainActivity extends AppCompatActivity implements AuthenticationListener {

    private AuthenticationDialog authDialog;
    private Context context;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ButterKnife.bind(this);
        context = this;
    }

    @Override
    public void onCodeReceived(String token) {
        if (token == null)
            return;
    }

    @OnClick(R.id.buttonLogin)
    public void loginClick() {
        authDialog = new AuthenticationDialog(this, this);
        authDialog.setCancelable(true);
        authDialog.getWindow().setLayout(((getWidth(context) / 100) * 90), LinearLayout.LayoutParams.MATCH_PARENT);
        authDialog.getWindow().setGravity(Gravity.CENTER);
        authDialog.show();
    }

    public static int getWidth(Context context) {
        DisplayMetrics displayMetrics = new DisplayMetrics();
        WindowManager windowmanager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
        windowmanager.getDefaultDisplay().getMetrics(displayMetrics);
        return displayMetrics.widthPixels;
    }
}

AuthenticationDialog.java

public class AuthenticationDialog extends Dialog {
    private String TAG = AuthenticationDialog.class.getSimpleName();
    private AuthenticationListener listener;
    private Context context;
    private WebView webView;

    private final String url = Constants.BASE_URL + "oauth/authorize/?client_id = " +
            Constants.INSTAGRAM_CLIENT_ID
            + "&redirect_url = "
            + Constants.REDIRECT_URL
            + "&response_type=token"
            + "&scope=basic+public_content";

    public AuthenticationDialog(@NonNull Context context, AuthenticationListener listener) {
        super(context);

        this.context = context;
        this.listener = listener;
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        this.setContentView(R.layout.auth_dialog);
        initializeWebView();
    }

    private void initializeWebView() {
        webView = (WebView) findViewById(R.id.webView);
        webView.getSettings().setUseWideViewPort(true);
        webView.getSettings().setLoadWithOverviewMode(true);

        webView.getSettings().setJavaScriptEnabled(true);
        webView.loadUrl(url);
        Log.d(TAG, "url: " + url);
        //webView.loadUrl("http://api.instagram.com/");
        //webView.loadUrl("https://api.instagram.com/oauth/authorize/?client_id=af7efcca661e43459b1e502af7ddb689&redirect_uri=https://instagram.com/&response_type=token&scope=basic+public_content");
        webView.setWebViewClient(new WebViewClient() {

            String access_token;
            boolean authComplete;

            @Override
            public void onPageStarted(WebView view, String url, Bitmap favicon) {
                super.onPageStarted(view, url, favicon);
                Log.d(TAG, "onPageStarted called");
            }

            @Override
            public void onPageFinished(WebView view, String url) {
                super.onPageFinished(view, url);
                Log.d(TAG, "onPageFinished called");
                if (url.contains("#access_token = ") && !authComplete) {
                    Log.d(TAG, " inside access_token");
                    Uri uri = Uri.parse(url);
                    access_token = uri.getEncodedFragment();
                    //get the whole token after " = " sign
                    access_token = access_token.substring(access_token.lastIndexOf(" = ") + 1);
                    Log.d(TAG, "token: " + access_token);
                    authComplete = true;
                    listener.onCodeReceived(access_token);
                    dismiss();
                } else if (url.contains("?error")) {
                    Log.d(TAG, "getting error fetching access token");
                    dismiss();
                } else {
                    Log.d(TAG, "outside both" + url.toString());
                }
            }
        });
    }
}

и, согласно журналам, код входит последним, иначе «за пределами обоих». Также WebView показывает ошибку, о которой я упоминал в пункте №. 4.

Кто-нибудь может помочь?

Вы не указали client_id в своем URL.

Vijay Singh Chouhan 14.09.2018 12:16

Я заменил его, чтобы вы понимали, что я упоминаю здесь clientId ID КЛИЕНТА, проверьте мои правки сейчас.

Stuti Kasliwal 14.09.2018 12:18

вы получили разрешения для инстаграмм?

Vijay Singh Chouhan 14.09.2018 12:26

Откуда мне это взять?

Stuti Kasliwal 14.09.2018 12:27

Из консоли разработчика Instagram.

Vijay Singh Chouhan 14.09.2018 12:31

Я не вижу вариант разрешения в учетной записи разработчика. Не могли бы вы помочь мне получить его?

Stuti Kasliwal 14.09.2018 12:32

Этот instagram.com/developer/review может быть вам полезен.

Vijay Singh Chouhan 14.09.2018 12:39

Эта ссылка описывает разрешение, необходимое после тестирования, когда приложение переходит в режим развертывания, тогда ему требуется разрешение, но когда разработчик работает в режиме песочницы, я думаю, ему не требуется никаких разрешений.

Stuti Kasliwal 14.09.2018 12:48

@StutiKasliwal Вы это решили?

Tushar Gogna 03.01.2019 12:55

@TusharGogna, нет, до сегодняшнего дня не получил никакого решения. Кроме того, после этого я больше никогда не работал над этим.

Stuti Kasliwal 03.01.2019 13:06

@StutiKasliwal Хорошо, я работаю над этим. Я поделюсь решением здесь, когда получу его.

Tushar Gogna 16.01.2019 09:15

@TusharGogna Да, большое спасибо

Stuti Kasliwal 16.01.2019 09:16
1
12
6 554
1

Ответы 1

Что ж, вы можете просто протестировать его в веб-браузере с URL-адресом, чтобы проверить, действителен ли URL-адрес. И я предполагаю, что это не проблема Java-кода, а проблема вашей настройки в Управление клиентами

Убедитесь, что client_id правильный, а redirect_url такой же в настройках на сайте разработчика Instagram.

Другие вопросы по теме