c# - 在我的 Windows Phone 8.1 应用程序中通过 Facebook 登录时如何检索用户访问 token ?

标签 c# cordova windows-phone windows-phone-8.1 facebook-login

我正在尝试在我的 cordova 应用程序中实现 Facebook 登录。它适用于 iPhone 和 Android,但我无法让它在 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) 方法,但传递给它的参数不包含任何这些。我如何获得这些值?

最佳答案

在 Windows Phone 8.1 Silverlight 中,您可以使用 UriMapperBase 处理此问题。这是对 UriMapperBase 的一个很好的介绍,它展示了它是什么以及如何使用它:http://bsubramanyamraju.blogspot.fi/2014/06/windowsphone-8-custom-uri.html

另外,这里是关于如何使用自定义 UriMapperBase 在 Windows Phone Silverlight 应用程序中实现 Facebook 登录的分步教程:http://doli.us/facebook-login-with-windows-phone-8/

更新了更多细节

您的 UriMapperBase 在应用第一次导航发生之前执行。有多种方法可以处理此问题,但一种选择是将静态属性添加到您的 App.xaml.cs:

        public static string AccessToken { get; set; }

然后,在您的自定义 UriMapper 中,解析接收到的数据并将其设置为 AccessToken 属性:

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();
      }

希望这对您有所帮助。

关于c# - 在我的 Windows Phone 8.1 应用程序中通过 Facebook 登录时如何检索用户访问 token ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28640869/

相关文章:

c# - 当我映射 ProjectId 属性时,代码首先尝试添加 Project_Id 列

C#编程如何通过正则表达式对空格和 ","进行分词?

ios - 来自 .zip 的 Cordova 项目无法构建 ios,尝试从其他计算机写入目录

c# - 为 ScrollViewer 预留空间

c# - 如何在Excel中计算总和

android - 电话间隙 : how to check if gps is enabled

cordova - 为 wp8 cordova 应用程序实现后退按钮功能

c++ - 将 C++ 库导入 C# (Windows Phone)

html - Windows Phone 8 的 IE10 中的奇怪文本大小

xaml - WP7芒果:重制PhoneApplicationFrame创建的“未指定错误”异常