我正在使用Xamarin构建一个应用程序,使用PCL项目,所以我在那里拥有我的核心功能,在不同项目中具有特定于平台的实现。我正在使用MVVM结构,但是使用Xamarin我有复杂的东西。我正在使用允许OAuth2登录的Xamarin.Auth,但它仅适用于.ios和.droid项目。
所以我有一个“登录?”提示核心项目中的视图。然后我转到特定于平台的项目,该项目调用自定义渲染器(模型显示为here)。
以下是渲染器中的代码,需要根据用户选择的身份验证器进行“自定义”。
var auth = new OAuth2Authenticator (
clientId: "xxx", // your OAuth2 client id (For FB Also called App-ID)
scope: "", // the scopes for the particular API you're accessing, delimited by "+" symbols
authorizeUrl: new Uri ("https://m.facebook.com/dialog/oauth/"), // the auth URL for the service (i.e FB, Twitter)
redirectUrl: new Uri ("http://www.facebook.com/connect/login_success.html")); // the redirect URL for the service
这样做的正确方法是什么?我是否使用公共变量来传达此信息,通过详细信息?等什么是最简单的解决方案?
答案 0 :(得分:1)
通常,您将在PCL中创建一个接口,然后在实现它的特定于平台的项目中创建类。
在你的情况下,它可能是这样的
public interface IAuthenticateService
{
Task<AuthenticateResult> AuthenticateAsync(string clientId, CancellationToken cancellationToken)
}
AuthenticateResult应该是PCL中也可用的类。 一旦你得到它,你只需将接口注入到视图模型中。 请注意,您必须在特定于平台的项目中注册接口实现。
MVVMCross是一个相对较好的框架,可以帮助您实现您想要实现的目标。
答案 1 :(得分:0)
你必须创建一个依赖类,这是正确的方法。
不要使用渲染器,尽可能在核心中进行所有可视化工作,并将OAuth的具体内容放到该类中。
为此,您需要创建一个公开您需要使用的方法的接口,然后在特定项目中创建一个实现该接口并使用Dependency属性修饰的类。
当您需要使用它时,您向DependencyService询问您的接口实例,它将从特定项目中检索正确的类。
以下是有关DependencyService的文档:https://developer.xamarin.com/guides/xamarin-forms/dependency-service/