我尝试使用xamarin.auth在我的应用中实施谷歌登录,如下所示
var auth = new OAuth2Authenticator("284202576320-7kgdhaa5sgvkoe03jmmcv0p8lfdma306.apps.googleusercontent.com","cAZW7uegD-h2-
tNMMf5q1UGQ","https://www.googleapis.com/auth/userinfo.email",new
Uri("https://accounts.google.com/o/oauth2/auth"),new
Uri("http://dev.myfav.restaurant/Account/LoginComplete"),new
Uri("https://accounts.google.com/o/oauth2/token"),null,true)
{
AllowCancel = true,
};
但已完成的事件未触发并且在登录后进入网页:( 我收到了以下错误
我需要让用户回到我的应用程序如何才能实现这一目标?任何人都可以帮我这个。
提前致谢
答案 0 :(得分:0)
在iOS中,一旦您使用 Xamarin.Auth 完成身份验证,您只需要关闭viewController,您就会被放回到应用中。
您这样做订阅了Completed
OAuth2Authenticator
事件
auth.Completed += (sender, e) =>
{
DismissViewController(true, null);
};
答案 1 :(得分:0)
如果" Native UI"使用(构造函数中的最后一个参数设置为true),这意味着外部/系统浏览器用于登录而不是WebView。因此,在Android而不是WebView [Chrome]上使用CustomTabs,而在iOS而不是UIWebView(或WKWebView)上使用SFSafariViewController。
原生UI用户离开您的应用,返回应用的唯一方法是应用链接(或深层链接),这需要完全不同的方法。
1你不能使用http [s]方案redirect_url
(在Android上可以,但是在iOS上没有)。使用自定义方案。
参见样本[s](Xamarin.Forms漫画书):
https://github.com/moljac/Xamarin.Auth.Samples.NugetReferences
回购中的文档:
答案 2 :(得分:0)
嘿,按照这两个例子,一个是使用网页浏览,一个是使用谷歌登录sdk进行谷歌认证。 https://timothelariviere.com/2017/09/01/authenticate-users-through-google-with-xamarin-auth/ 和 https://developer.xamarin.com/samples/xamarin-forms/WebServices/OAuthNativeFlow/ 所以根据Mounika.Kola报道的这个问题。我想你应该参考那个authenticator.Completed - = OnAuthCompleted在你的代码中。仅供参考,请参阅我在Xamarin Forms中用于Google授权的这些代码。
void OnLoginClicked(object sender, EventArgs e)
{
string clientId = null;
string redirectUri = null;
switch (Device.RuntimePlatform)
{
case Device.iOS:
clientId = Constants.iOSClientId;
redirectUri = Constants.iOSRedirectUrl;
break;
case Device.Android:
clientId = Constants.AndroidClientId;
redirectUri = Constants.AndroidRedirectUrl;
break;
}
var authenticator = new OAuth2Authenticator(
clientId,
null,
Constants.Scope,
new Uri(Constants.AuthorizeUrl),
new Uri(redirectUri),
new Uri(Constants.AccessTokenUrl),
null,
true);
authenticator.Completed += OnAuthCompleted;
authenticator.Error += OnAuthError;
AuthenticationState.Authenticator = authenticator;
var presenter = new Xamarin.Auth.Presenters.OAuthLoginPresenter();
presenter.Login(authenticator);
}
async void OnAuthCompleted(object sender, AuthenticatorCompletedEventArgs e)
{
var authenticator = sender as OAuth2Authenticator;
if (authenticator != null)
{
authenticator.Completed -= OnAuthCompleted;
authenticator.Error -= OnAuthError;
}
User user = null;
if (e.IsAuthenticated)
{
// If the user is authenticated, request their basic user data from Google
// UserInfoUrl = https://www.googleapis.com/oauth2/v2/userinfo
var request = new OAuth2Request("GET", new Uri(Constants.UserInfoUrl), null, e.Account);
var response = await request.GetResponseAsync();
if (response != null)
{
// Deserialize the data and store it in the account store
// The users email address will be used to identify data in SimpleDB
string userJson = await response.GetResponseTextAsync();
user = JsonConvert.DeserializeObject<User>(userJson);
}
if (account != null)
{
store.Delete(account, Constants.AppName);
}
await store.SaveAsync(account = e.Account, Constants.AppName);
await DisplayAlert("Email address", user.Email, "OK");
}
}
我希望它可以帮到你。