#c# #uwp #instagram #instagram-api #instasharp
#c# #uwp #Instagram #instagram-api #instasharp
Вопрос:
В универсальном приложении Windows (UWP) я пытаюсь войти в систему пользователя в его / ее Instagram аккаунт, но безуспешно. Я продолжаю получать следующую ошибку после того, как пользователь вводит свои учетные данные и нажимает кнопку входа:
Вот используемый код:
var scopes = new List<OAuth.Scope>();
scopes.Add(InstaSharp.OAuth.Scope.Basic);
var link = InstaSharp.OAuth
.AuthLink
(
_config.OAuthUri "authorize",
_config.ClientId,
_config.RedirectUri,
scopes,
InstaSharp.OAuth.ResponseType.Token
);
var webAuthResult = await WebAuthenticationBroker
.AuthenticateAsync
(
WebAuthenticationOptions.None,
new Uri(link)
);
switch (webAuthResult.ResponseStatus)
{
case WebAuthenticationStatus.Success:
return true;
case WebAuthenticationStatus.UserCancel:
return false;
case WebAuthenticationStatus.ErrorHttp:
return false;
default:
return false;
}
Я делаю что-то не так??
ОБНОВЛЕНИЕ 1:
Вот краткий пример UWP, который демонстрирует проблему:
ОБНОВЛЕНИЕ 2:
Я обнаружил проблему, которая вызвала ошибку «не удается подключиться к сервису». Вот код, который вызвал проблему:
_config = new InstagramConfig(clientIdTextBox.Text,
clientSecretTextBox.Text,
WebAuthenticationBroker.GetCurrentApplicationCallbackUri().ToString(),
WebAuthenticationBroker.GetCurrentApplicationCallbackUri().ToString());
Мой 3-й параметр, URL перенаправления, является не веб-адресом, а ссылкой на приложение. Если бы я изменил это на простой URL, такой как www.instagram.com затем это работает, ОДНАКО браузер остается открытым для этого URL-адреса перенаправления.
Как мне заставить браузер перенаправить обратно на мое приложение UWP, используя URL перенаправления???
Ответ №1:
Я нашел свою проблему!
В конце концов, мой URL-адрес перенаправления не точно совпадал с URL-адресом, который я указал в своей учетной записи разработчика Instragram, что и вызвало проблему.
Обновить:
Хотя я исправил свою проблему, и я правильно получаю свой код доступа, кажется, что с Instragram есть большая проблема, потому что я всегда получаю 400 неверных запросов. И из того, что я видел в Интернете от других разработчиков, это очень распространенная проблема. Я нахожусь в среде изолированной среды, интересно, имеет ли это какое-либо отношение к этому.
Ответ №2:
Какова конечная строка переменной link, которую вы используете. Это должно быть похоже на приведенный ниже URL
https://instagram.com/oauth/authorize/?client_id ={your_client_id}amp;redirect_uri={your_redirect_url}amp;response_type=код
Если у вас есть значение параметра как часть вашего URL-адреса перенаправления, вы должны добавить другое = true как в приложении Instagram, так и в своем URL-адресе перенаправления, который вы отправляете из кода.
Затем вы должны перейти к шагу 2 процесса oauth после получения ответа с веб-сайта Instagram на вышеупомянутый вызов.
Комментарии:
1. Это моя ссылка: <a rel="nofollow noreferrer noopener" href="https://api.instagram.com/oauth/authorize?client_id=amp;redirect_uri=ms-app://s-1-15-2-1005028906-2239310109-3402011355-130426970-480924263-3476788055-3018980986/amp;response_type=tokenamp;scope=basic» rel=»nofollow noreferrer»> api.instagram.com/oauth /…
2. Я добавил пример приложения в свой пост.
Ответ №3:
Похоже, вы разрабатываете приложение WPF для Windows. В этом случае я бы посоветовал вам создать веб-сервис или службу WCF и поместить логику вызова instagram API и получения токена доступа из instagram API в веб-сервис и разместить сервис на сервере. Затем вы можете указать веб-адрес службы в приложении Instagram в качестве действительного URL. Если у вас есть IP-адрес сервера, тогда все в порядке. Если вы размещаете в локальном IIS, попробуйте туннелировать ваш локальный хостинг в Интернет.
У меня нет кода для приложения WPF для Windows. Ниже приведен код, который я использую для своего ВЕБ-API c #, который выполняет Instagram OAuth2. Вы можете перевести это в свой случай.
Способ 1: — Первый шаг Oauth
private void MakeRequestForToken()
{
string instagramIntialRedirectUrl = "https://instagram.com/oauth/authorize/?client_id={yourclientid}amp;redirect_uri={Should be a valid URL that can be accessed by instagram}amp;response_type=code"
Response.Redirect(instagramUrl);
}
Метод 2: — Второй шаг Oauth (URL-адрес перенаправления должен быть указан таким образом, чтобы ответ, направленный на URL-адрес перенаправления instagram, достиг этого метода)
private void HandleAuthorizeTokenResponse()
{
var request = (HttpWebRequest)WebRequest.Create("https://api.instagram.com/oauth/access_token");
var postData = "client_id=" AppKey "amp;client_secret=" AppSecret "amp;grant_type=authorization_codeamp;code=" Code "amp;redirect_uri=" RedirectUrl;
var data = Encoding.ASCII.GetBytes(postData);
request.Method = "POST";
request.ContentType = "application/json; charset=utf-8";
request.ContentLength = data.Length;
using (var stream = request.GetRequestStream())
{
stream.Write(data, 0, data.Length);
}
var response = (HttpWebResponse)request.GetResponse();
var reader = new StreamReader(response.GetResponseStream());
string objText = reader.ReadToEnd();
}
Надеюсь, это поможет!
Комментарии:
1. Спасибо за ответ, я попробую ваш код, но я пишу приложение UWP, а не WPF, создание веб-сервиса выходит за рамки, но я попробую по-вашему.