2

Я пытаюсь внедрить вход в Facebook в моем приложении cordova. Он работает в iPhone и Android, но я не могу заставить его работать на Windows Phone 8.1.Как я могу получить токен доступа пользователя при входе в систему через Facebook в моем приложении Windows Phone 8.1?

Что я делаю сейчас для Windows Phone 8.1 для вызова Cordova плагин, который я сделал, который делает следующее:

string loginUrl = "fbconnect://authorize" + 
    "?client_id=CLIENTID" + 
    "&scope=public_profile,email" + 
    "&redirect_uri=msft-APPID://authorize"; 
var uri = new Uri(loginUrl); 
var success = await Windows.System.Launcher.LaunchUriAsync(uri); 

Это вызывает приложение facebook очень короткий промежуток времени, то мой приложение возобновляет работу.

В документации на facebook говорится, что они возобновляют мое приложение так же, как я называю приложение facebook, но с другим loginUrl, содержащим разные параметры.

Либо:

msft-{APPID}://authorize/? 
    access_token={user-access-token}& 

Или:

msft-{AppID}://authorize/? 
    error=access_denied& 
    error_code=200& 
    error_description=Permissions%20Error& 
    error_reason=user_denied 

Я пытаюсь получить, что {user-access-token} или error_reason, когда мое приложение резюме.

Я знаю, что метод Application_Activated (app.xaml.cs) вызывается, но переданные ему аргументы не содержат никаких данных. Как получить эти значения?

+0

Я думаю, что это то, что вам, вероятно, нужно http://stackoverflow.com/questions/25168525/facebook-login-for-windows-phone-8-1/26955236#26955236 – MohanRajNK

+0

Я думаю, что эта ссылка является дублирующим вопросом I не нашел. К сожалению, принятый ответ не работает для меня ... – Shawn

ответ

0

В Windows Phone 8.1 Silverlight вы можете справиться с этим, используя UriMapperBase. Вот хорошее введение в UriMapperBase, и оно показывает, что это такое и как его можно использовать: http://bsubramanyamraju.blogspot.fi/2014/06/windowsphone-8-custom-uri.html

Также пошаговое руководство по внедрению входа в Facebook в приложении Windows Phone Silverlight с использованием пользовательской UriMapperBase: http://doli.us/facebook-login-with-windows-phone-8/

Обновлено с более подробной

Ваш UriMapperBase выполняется до первой навигации для приложения происходит. Там в несколько способов, как вы можете справиться с этим, но один вариант, это просто добавить статическое свойство в ваших App.xaml.cs:

 public static string AccessToken { get; set; } 

Затем в пользовательском UriMapper, анализировать полученные данные и установить его свойству маркер доступа :

public class AccessTokenParser : UriMapperBase 
{ 
    public override void MapUri(Uri uri) 
    { 
     var url = uri.ToString();   
     if (url.Contains("access_token")) 
     { 
      App.AccessToken = ParseAccessTokenFromUrl(url); // Your code here 
     } 
     return new Uri("/MainPage.xaml", UriKind.Relative); 
    } 
} 

Теперь в вашем MainPage.xaml.cs, вы можете переопределить OnNavigatedTo-метод:

public partial class MainPage : PhoneApplicationPage 
    { 

     protected override void OnNavigatedTo(NavigationEventArgs e) 
     { 
      if (string.IsNullOrEmpty(App.AccessToken)) 
      return; 

      DoThingsWithAccessToken(); 
     } 

Надеется, что это помогает.

+0

Первая ссылка, которую вы упомянули, говорит мне переопределить метод OnNavigatedTo. Многие решения там предлагают это. Однако они не говорят, в какой файл добавить его. Я предполагаю, что они означают App.xaml.cs, но когда я добавляю этот метод, я получаю сообщение об ошибке: «Не найдено подходящего метода для переопределения». Есть ли что-то, что мне нужно сделать до этого? – Shawn

+0

Я обновил свой ответ с более подробной информацией, надеюсь, что это поможет. –

+0

Ах!Я даже не знал, что есть файл cs, скрытый в MainPage.xaml. Успех! В этом была проблема, я переопределял «OnNavigatedTo» в неправильном классе. – Shawn

Смежные вопросы