我是xamarin android的新手。我正在尝试使用Google作为身份提供程序在xamarin android中实现OAuth。我已经使用谷歌注册了我的应用程序,并获得了用户点击登录按钮时使用的客户端ID和客户端密码。
void OnLoginClicked(object sender, EventArgs e)
{
var authenticator = new OAuth2Authenticator(
Constants.ClientId,
Constants.ClientSecret,
Constants.Scope,
new Uri(Constants.AuthorizeUrl),
new Uri(Constants.RedirectUrl),
new Uri(Constants.AccessTokenUrl));
authenticator.Completed += OnAuthCompleted;
authenticator.Error += OnAuthError;
var presenter = new Xamarin.Auth.Presenters.OAuthLoginPresenter();
presenter.Login(authenticator);
}
它重定向到谷歌,但将403错误称为'disallowed_useragent'。 根据{{3}},谷歌“不再允许在称为网络浏览量的嵌入式浏览器中向Google提出OAuth请求”
经过一些论坛和stackoverflow问题后,我才知道 需要使用 chromecustomtabs 。
所以我在这里有两个问题
chromecustomtabs有替代解决方案吗?
如果上述答案为否,那么如果我理解正确,那么我需要在我的项目中添加以下代码。我的问题是在OnLoginClicked函数中需要进行哪些修改?在这种情况下是否需要OAuth2Authenticator?
我的代码:
var mgr = new CustomTabsActivityManager (this);
mgr.CustomTabsServiceConnected += delegate {
mgr.LaunchUrl ("http://xamarin.com");
};
mgr.BindService ();
任何建议/链接将不胜感激。感谢。
答案 0 :(得分:0)
请阅读topic。 Xamarin Auth 1.5.0支持CustomTabsIntent。
答案 1 :(得分:0)
这是对您的部分问题的回答:
OAuth2Authenticator
上有一个名为isUsingNativeUI
的参数。您必须将其设置为true。这将导致Xamarin.Auth在Android中使用CustomTabs服务而不是webview。
您的代码变为:
var authenticator = new OAuth2Authenticator(
Constants.ClientId,
Constants.ClientSecret,
Constants.Scope,
new Uri(Constants.AuthorizeUrl),
new Uri(Constants.RedirectUrl),
new Uri(Constants.AccessTokenUrl),
null,
true); // <-- This is it isUsingNativeUI
我希望这是默认设置。