WebAuthenticationBrowser.AuthenticateAsync()杀死了UWP应用程序

时间:2016-01-07 20:06:44

标签: c# windows-runtime uwp windows-10-mobile windows-10-universal

我有一个通用的Windows 10应用程序,我使用

var token = await WebAuthenticationBrowser.AuthenticateAsync(...)

根据facebook验证用户身份。当它只是前景应用程序时,它在一个常见的场景中运行良好。但是,当我添加BackgroundMediaPlayer时,启动音乐播放和前景与背景之间的通信,调用

var token = await WebAuthenticationBrowser.AuthenticateAsync(...)

实际上杀死了我的前台应用。当用户在代理中完成身份验证时,他将被带回应用程序 - 但它被杀死并重新实例化。这当然意味着等待AuthenticateAsync()不会产生任何结果,因为它是应用程序的新实例。

我会在调用WP8.1中引入的WebAuthenticationBrowser.AuthenticateAndContinue()时理解这种行为,但在UWP中已弃用此API。

所以我的问题是 - 这是预期的行为(应用程序被杀死并重新启动)?如果是这样,我如何在重新启动应用程序期间从WebAuthenticationBroker获取令牌?

这是一个要重现的示例项目(在txt文件中包含确切的步骤):https://t.co/XtmESd9o5r 这是一个运行示例的视频(首先启动没有运行BackgroundMediaPlayer的代理,然后运行它):http://youtu.be/VcZXBOTiD1Y

我在Twitter上开始讨论这个问题:https://twitter.com/lancewmccarthy/status/685152844849262593但到目前为止,我得到的唯一帮助就是检查激活类型"使用此链接:https://msdn.microsoft.com/en-us/library/windows/apps/windows.applicationmodel.activation.activationkind.aspx

该链接描述了activationKind有" WebAuthenticationBrokerContinuation",但是 1)仅适用于Windows Phone,而不适用于Windows 10 2)当你运行样品时,你将永远不会收到它。只有"推出",带有previousExecutionState"终止"

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题。

注意BackgroundTask的已完成和已取消事件中的异常。

就我而言,我正在打电话

 BackgroundMediaPlayer.Current.SetStreamSource(null)

即使我当前的MediaPlayerState已关闭。之后,

 await WebAuthenticationBrowser.AuthenticateAsync(...)

应该按预期工作。一个Try-Catch声明可能还不够。