最新的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”
更新 删除了未使用的代码。
答案 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中所述。