使用LoginBehaviorApplicationOnly Facebook.Client LoginButton不触发OnFacebookAuthenticationFinished

时间:2015-09-02 14:22:26

标签: c# facebook windows-phone-8.1 facebook-c#-sdk

我创建了Windows Phone应用程序(WinRT for 8.1+,而不是Silverlight)。我已经添加了Facebook 6.0.10.0和Facebook.Client 0.9.1.0以及Nuget管理器(而不是Github构建),并且已经将“FacebookConfig.xml”添加到项目中,内容如http://facebooksdk.net/docs/windows/config/中所述,fb [ Facebook-app-id]将Package.appxmanifest作为声明中的协议并覆盖App.xaml.cs中的OnActivated。

    protected override void OnActivated(IActivatedEventArgs args)
    {
        base.OnActivated(args);
        Session.OnFacebookAuthenticationFinished += OnFacebookAuthenticationFinished;
        var protocolArgs = args as ProtocolActivatedEventArgs;
        LifecycleHelper.FacebookAuthenticationReceived(protocolArgs);

使用事件处理程序

private void OnFacebookAuthenticationFinished(AccessTokenData session)
    {
        Debug.WriteLine("OnFacebookAuthenticationFinished");
    }

在我创建LoginButton的主页面上:

<controls:LoginButton x:Name="FacebookLoginButton"
                                      Height="70"
                                      Margin="5"
                                      HorizontalAlignment="Stretch"
                                      FetchUserInfo="True"
                                      LoginBehavior="LoginBehaviorApplicationOnly"
                                      Opacity="0"
                                      Permissions="email, public_profile"
                                      SessionStateChanged="LoginButton_OnSessionStateChanged"
                                      Visibility="Visible" />

使用SessionStateChanged的事件hendler

   private void LoginButton_OnSessionStateChanged(object sender, SessionStateChangedEventArgs e)
   {
           Debug.WriteLine(e.SessionState);    
   }

文档中的按钮示例似乎已过时,因为ApplicationId不再是LoginButton的字段,我已经在stackoverflow上找到了对它的确认,但逻辑应该仍然可以正常工作。我的工作很棒,与LoginBehavior =“LoginBehaviorWebViewOnly”完全一样。但是当LoginBehavior设置为LoginBehaviorApplicationOnly时,会发生事件SessionStateChanged在打开facebook状态为“Opening”之前触发一次,Facebook应用程序打开允许您输入凭据,显示加载屏幕,关闭并返回到我的应用程序登录按钮屏幕。奇怪的是,没有任何类型的“权限确认对话”,并且在返回我的应用程序之后没有事件被触发。从App.xaml.cs开始,LoginButton的SessionStateChanged和OnFacebookAuthenticationFinished都没有。

调试输出给出错误:

Error: BindingExpression path error: 'ApplicationId' property not found on 'Facebook.Client.Controls.LoginButton'. BindingExpression: Path='ApplicationId' DataItem='Facebook.Client.Controls.LoginButton'; target element is 'Windows.UI.Xaml.Controls.Button' (Name='PART_LoginButton');   target property is 'IsEnabled' (type 'Boolean')

请原谅我的奇怪语法和所有错误,因为英语不是我的母语。

1 个答案:

答案 0 :(得分:0)

“ApplicationId”不再是我所知道的有效参数。查看http://facebooksdk.net/docs/phone/config/了解更多详情。您必须添加facebookconfig.xml并配置清单。