Xamarin:最新的FB API问题

时间:2016-08-26 15:32:33

标签: facebook facebook-graph-api xamarin xamarin.ios xamarin-studio

最新的FB登录API有三个参数

public unsafe virtual void LogInWithReadPermissions (string[] permissions, UIViewController fromViewController, [BlockProxy (typeof(Trampolines.NIDLoginManagerRequestTokenHandler))] LoginManagerRequestTokenHandler handler)

我正在使用MVVMCross。对于fb登录,我尝试创建了我所在视图的实例,并将其作为LogInWithReadPermissions()的参数传递

视图模型:

private async void DoFacebookSignIn()
        {
            try 
            {               
                await facebookService. Login();
                DoAutoLogin();
            }
}

SERVICE:

private readonly string[] permitions = new string[] { "email", "public_profile" };    
public async System.Threading.Tasks.Task LogIn()
            {
    LoginManager.LogInWithReadPermissionsAsync (permitions);

                LoginManagerLoginResult result = await LogInWithReadPermissionsAsync();

                if (result.IsCancelled)
                {
                    ServiceFactory.UserMessageService.ShowToast("Facebook login is canceled");
                }
            }

        private Task<LoginManagerLoginResult> LogInWithReadPermissionsAsync()
            {
                var tcs = new TaskCompletionSource<LoginManagerLoginResult> ();
                LoginManager.LogInWithReadPermissions (permitions,null, (LoginManagerLoginResult result, NSError error) =>
                {
                    if(error.IsNotNull ())
                    {
                        tcs.SetException (new IosErrorException(error));
                    } else 
                    {
                        tcs.SetResult (result);
                    }
                });

                return tcs.Task;
            }

但是它失败了,当我调用这个函数时,我是否需要从Viewmodel传递视图信息?如何从视图模型传递视图实例?有人可以帮忙吗?

更新

服务失败了:

func LogInWithReadPermissionsAsync() 第3行:(LoginManager.LogInWithReadPermissions...)

没有任何错误。它只是崩溃了。 Facebook API版本:“Xamarin.Facebook.iOS”version =“4.13.1”

更新 删除了未使用的代码。

1 个答案:

答案 0 :(得分:1)

我得到了解决方案。

代码很好我只需要将用于网络请求的Facebook服务器白名单&#39;通过添加

function Enum() {
  this.self = arguments[0];
}
Enum.prototype = {
  keys : function() {
    return Object.keys(this.self);
  },
  values : function() {
    var me = this;
    return this.keys(this.self).map(function(key) {
      return me.self[key];
    });
  },
  getValueByName : function(key) {
    return this.self[this.keys(this.self).filter(function(k) {
      return key === k;
    }).pop() || ''];
  },
  getNameByValue : function(value) {
    var me = this;
    return this.keys(this.self).filter(function(k) {
      return me.self[k] === value;
    }).pop() || null;
  }
};

var MyMessageIds = new Enum({
    UndefinedId : 0,
    FilenameId : 1,
    BuildFileId : 2,
    MovementArgsId : 3,
    MoveId : 4,
    ExecuteCommandId : 5
});

document.body.innerHTML = '<pre>' + JSON.stringify({
  'Enum Keys' : MyMessageIds.keys(),
  'Enum Vals' : MyMessageIds.values(),
  'Example' : {
    'MoveId' : MyMessageIds.getValueByName('MoveId'),
    'Val(3)' : MyMessageIds.getNameByValue(3)
  }
}, null, 4) + '</pre>';

如Xamarin Facebook iOS SDK here中所述。