Anonymous
Интеграция входа в Android Instagram
Сообщение
Anonymous » 23 дек 2025, 21:04
Я пытаюсь выполнить вход в социальную сеть через Instagram без Graph API и прочитать все необходимое, связанное с ним, из документации Instagram и StackOverflow.
Следующие вещи, которые я сделал в своем проекте до сих пор:
Войти в учетную запись разработчика Instagram через мое имя пользователя и пароль.
Управление клиентом > Зарегистрируйте нового клиента и добавьте сгенерированный клиент Идентификатор, секретный ключ и URL-адрес перенаправления в моем постоянном файле.
А для веб-представления мой полный URL-адрес: https://api.instagram.com/oauth/authori ... ic_content
Когда я ввожу имя пользователя и пароль в WebView, а не перемещаюсь по URL-адресу перенаправления, это постоянно показывает мне ошибку в WebView как: {"error_type": "OAuthException", "code": 400, "error_message": "Вы должны указать действительные параметры client_id, response_type и redirect_uri"
Я хочу получить 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.
Кто-нибудь может помочь?
Подробнее здесь:
https://stackoverflow.com/questions/523 ... ntegration
1766513090
Anonymous
Я пытаюсь выполнить вход в социальную сеть через Instagram без Graph API и прочитать все необходимое, связанное с ним, из документации Instagram и StackOverflow. Следующие вещи, которые я сделал в своем проекте до сих пор: [list] [*]Войти в учетную запись разработчика Instagram через мое имя пользователя и пароль. [*]Управление клиентом > Зарегистрируйте нового клиента и добавьте сгенерированный клиент Идентификатор, секретный ключ и URL-адрес перенаправления в моем постоянном файле. [*]А для веб-представления мой полный URL-адрес: https://api.instagram.com/oauth/authorize/?client_id=af7efcca661e43459b1e502af7ddb689&redirect_url=https://instagram.com/&response_type=token&scope=basic+public_content [*]Когда я ввожу имя пользователя и пароль в WebView, а не перемещаюсь по URL-адресу перенаправления, это постоянно показывает мне ошибку в WebView как: {"error_type": "OAuthException", "code": 400, "error_message": "Вы должны указать действительные параметры client_id, response_type и redirect_uri" [*]Я хочу получить access_token, но он показывает мою ошибку. [/list] Ниже мой необходимый код: [b]MainActivity.java[/b] [code]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; } } [/code] [b]AuthenticationDialog.java[/b] [code]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()); } } }); } } [/code] и, согласно журналам, код появляется последним, иначе «вне обоих». Также WebView показывает ошибку, о которой я упоминал в пункте №. 4. Кто-нибудь может помочь? Подробнее здесь: [url]https://stackoverflow.com/questions/52327753/android-instagram-login-integration[/url]