Я попытался получить токен доступа с помощью unsplash api, и он работал нормально. Я использовал два плагина. Первый, url_launcher , позволяет открывать URL в браузере. Вы должны указать URL-адрес регистрации, и после успешной регистрации пользователь будет перенаправлен в ваше приложение. как? используя второй плагин uni_links . как только пользователь вернется обратно, вы начнете извлекать токен доступа.
Запустите URL, который позволяет пользователю зарегистрироваться
_launchURL() async {
var registerUrl= Constants.registerUrl;
if (await canLaunch(registerUrl)) {
await launch(registerUrl);
} else {
throw 'Could not launch $loginUrl';
}
}
когда пользователь завершит процесс. Ваше приложение должно прослушивать этот шаг
@override
initState() {
super.initState();
initUniLinks();
}
Future<Null> initUniLinks() async {
getUriLinksStream().listen((Uri uri) {
if (uri != null) {
setState(() {
String code = uri.queryParameters["code"];
print("code:" + code);
if (code != null) {
_getAccessToken(Constants.clientId, Constants.clientSecret,
Constants.redirectURI, code, "authorization_code");
}
});
}
}, onError: (err) {
print("error:" + err.toString());
});
}
_getAccessToken(String client_id, String client_secret, String redirect_uri,
String code, String grant_type) async {
var url = "https://unsplash.com/oauth/token";
var query_params = {
"client_id": client_id,
"client_secret": client_secret,
"redirect_uri": redirect_uri,
"code": code,
"grant_type": grant_type
};
var response = await http.post(url, body: query_params);
Map<String, dynamic> map = json.decode(response.body);
var accessToken = AccessToken.fromJson(map);
_saveAccessTokenToPrefs(accessToken);
}