Долго искал как сделать авторизацию в Facebook для WP8, нашел несколько примеров, некоторые из них даже работали, но либо с глюками, либо слишком много коду и непонятной человечестве логике. Решил написать свой вариант авторизации, много писать не буду что и как работает, сами разберетесь, или пишите в комментариях свои вопросы, рад буду ответить.
Вот, собственно, и весь код для прохождения авторизации с помощью компонента WebBrowser, если все хорошо и авторизация пройдена вы получаете accessToken и переходите на новую страницу.
public string AccessToken { get; set; }
private static String appId = "ID apps/API key";
private static String scope = "publish_stream";
private static String secret = "App Secret";
public static string AuthUri
{
get
{
return "https://facebook.com/dialog/oauth?client_id=" + appId +
"&redirect_uri=https://www.facebook.com/connect/login_success.html&scope=" + scope +
"&display=touch&client_secret=" + secret;
}
}
protected override void OnNavigatedTo(NavigationEventArgs e)
{
AuthBrowser.Navigate(new Uri(AuthUri));
}
private void AuthBrowser_OnNavigated(object sender, NavigationEventArgs e)
{
String uri = e.Uri.ToString();
if (uri.StartsWith("https://www.facebook.com/connect/login_success.html"))
{
if (uri.EndsWith("#_=_"))
uri = uri.Substring(0, uri.Length - 4);
}
string codeValue = uri.Replace("https://www.facebook.com/connect/login_success.html?", "");
var url = "https://graph.facebook.com/oauth/access_token?client_id=" + appId +
"&redirect_uri=https://www.facebook.com/connect/login_success.html&client_secret=" + secret + "&" + codeValue;
AccessTokenRead(url);
}
public void AccessTokenRead(string uri)
{
var clientToken = new WebClient();
clientToken.OpenReadCompleted += clientToken_OpenReadCompleted;
clientToken.OpenReadAsync(new Uri(uri));
}
private void clientToken_OpenReadCompleted(object sender, OpenReadCompletedEventArgse)
{
if (e.Error == null)
{
try
{
Stream reply = e.Result;
StreamReader reader = new StreamReader(reply);
string[] tokens = reader.ReadToEnd().Split(new[] { "=", "&" }, StringSplitOptions.None);
for (int index = 0; index < tokens.Length; index++)
{
AccessToken = tokens[1];
}
}
finally
{
if (AccessToken != null)
{
string destination = string.Format("/TokenPage.xaml?access_token={0}", AccessToken);
NavigationService.Navigate(new Uri(destination, UriKind.Relative));
}
}
}
}
Ну и в XAML размещен только компонент WebBrowser с обработанным событием Navigated.
Ну и в XAML размещен только компонент WebBrowser с обработанным событием Navigated.
Как получить данные со страницы TokenPage надеюсь знаете :)
P.S. в поля appId, scope, secret вам нужно вставить собственные данные которые вы получаете при регистрации нового приложения для facebook.
Проект на GitHub
Удачи в ПРОграммировании.
Долго искал как сделать авторизацию в Facebook для WP8, нашел несколько примеров, некоторые из них даже работали, но либо с глюками, либо слишком много коду и непонятной человечестве логике. Решил написать свой вариант авторизации, много писать не буду что и как работает, сами разберетесь, или пишите в комментариях свои вопросы, рад буду ответить.
Вот, собственно, и весь код для прохождения авторизации с помощью компонента WebBrowser, если все хорошо и авторизация пройдена вы получаете accessToken и переходите на новую страницу.
public string AccessToken { get; set; }
private static String appId = "ID apps/API key";
private static String scope = "publish_stream";
private static String secret = "App Secret";
public static string AuthUri
{
get
{
return "https://facebook.com/dialog/oauth?client_id=" + appId +
"&redirect_uri=https://www.facebook.com/connect/login_success.html&scope=" + scope +
"&display=touch&client_secret=" + secret;
}
}
protected override void OnNavigatedTo(NavigationEventArgs e)
{
AuthBrowser.Navigate(new Uri(AuthUri));
}
private void AuthBrowser_OnNavigated(object sender, NavigationEventArgs e)
{
String uri = e.Uri.ToString();
if (uri.StartsWith("https://www.facebook.com/connect/login_success.html"))
{
if (uri.EndsWith("#_=_"))
uri = uri.Substring(0, uri.Length - 4);
}
string codeValue = uri.Replace("https://www.facebook.com/connect/login_success.html?", "");
var url = "https://graph.facebook.com/oauth/access_token?client_id=" + appId +
"&redirect_uri=https://www.facebook.com/connect/login_success.html&client_secret=" + secret + "&" + codeValue;
AccessTokenRead(url);
}
public void AccessTokenRead(string uri)
{
var clientToken = new WebClient();
clientToken.OpenReadCompleted += clientToken_OpenReadCompleted;
clientToken.OpenReadAsync(new Uri(uri));
}
private void clientToken_OpenReadCompleted(object sender, OpenReadCompletedEventArgse)
{
if (e.Error == null)
{
try
{
Stream reply = e.Result;
StreamReader reader = new StreamReader(reply);
string[] tokens = reader.ReadToEnd().Split(new[] { "=", "&" }, StringSplitOptions.None);
for (int index = 0; index < tokens.Length; index++)
{
AccessToken = tokens[1];
}
}
finally
{
if (AccessToken != null)
{
string destination = string.Format("/TokenPage.xaml?access_token={0}", AccessToken);
NavigationService.Navigate(new Uri(destination, UriKind.Relative));
}
}
}
}
Ну и в XAML размещен только компонент WebBrowser с обработанным событием Navigated.
Ну и в XAML размещен только компонент WebBrowser с обработанным событием Navigated.
Как получить данные со страницы TokenPage надеюсь знаете :)
P.S. в поля appId, scope, secret вам нужно вставить собственные данные которые вы получаете при регистрации нового приложения для facebook.
Проект на GitHub
Удачи в ПРОграммировании.
0 коммент.:
Отправить комментарий