我正在使用Parse后端的Xamarin.Forms应用程序。我正在尝试将Facebook Android SDK整合到那。我想要做的是在每台设备上本地获取访问令牌,并将该访问令牌推送到Parse.com。为此,我需要使用Xamarin官方Facebook sdk绑定。我使用依赖注入。所以我有IFacebookService
Xamarin Forms和Facebook Android SDK问题
public interface IFacebookService
{
Task<string> GetFacebookToken();
void LogOut();
}
而且每个平台上我实现FacebookService并注入该实现。在iOS上我没有问题。在Android上,问题是,即使显示了Facebook UI,我也没有在我的FacebookService实现中收到回调。我认为这与Android管理回调以及Xamarin.Forms如何创建活动有关。让我通读代码。下面是代码的请求登录从Facebook
var callbackManager = CallbackManagerFactory.Create();
//Here I instantiate my own implementation of IFacebookCallback
//nothing fancy here, I've just implemented the required methods with Console.WriteLine();
var loginCallback = new FacebookCallback(() => _loginInProgress = false);
//Register callbackManager and my instance of loginCallback
LoginManager.Instance.RegisterCallback (callbackManager, loginCallback);
//Here is the important part. I need an activity to show the login UI
//Xamarin forms provides me with this method.
var activity = Xamarin.Forms.Forms.Context as Activity;
//I request login
LoginManager.Instance.LogInWithReadPermissions(activity, new string[] { "public_profile", "email", "user_friends" });
所以部分,我相信这个问题是此行
var activity = Xamarin.Forms.Forms.Context as Activity;
在调试器中我看到,返回MainActivity
,这是我的入口点内(MainLauncher = true
),并在我打电话Xamarin窗体的初始化方法
//Setup Xamarin forms
global::Xamarin.Forms.Forms.Init(this, bundle);
LoadApplication(new FormsApp());
是在FormsApp注册的初始页面调用LoginPage。所以我相信它在主要活动中被加载为片段。所以,也许我需要做这样的事情
LoginManager.Instance.LogInWithReadPermissions(LOGIN_PAGE_FRAGMENT,......);
因为在Facebook SDK中有活动和片段的单独版本。我不知道如何得到LOGIN_PAGE_FRAGMENT
,甚至可能是其他地方的问题,我不明白。 你有什么想法可以导致这个问题?