【发布时间】:2018-03-25 17:22:47
【问题描述】:
我目前正在尝试在xamarin.forms 应用程序中使用REST 服务。
要执行身份验证,我使用以下代码:
string consumerKey = "consumer_key";
string consumerSecret = "consumer_secret";
var requestTokenUrl = new Uri("https://service/oauth/request_token");
var authorizeUrl = new Uri("https://dservice/oauth/authorize");
var accessTokenUrl = new Uri("https://service/oauth/access_token");
var callbackUrl = new Uri("customprot://oauth1redirect");
authenticator = new Xamarin.Auth.OAuth1Authenticator(consumerKey, consumerSecret, requestTokenUrl, authorizeUrl, accessTokenUrl, callbackUrl, null, true);
authenticator.ShowErrors = true;
authenticator.Completed += Aut_Completed;
var presenter = new Xamarin.Auth.Presenters.OAuthLoginPresenter();
presenter.Completed += Presenter_Completed;
authenticator.Error += Authenticator_Error;
presenter.Login(authenticator);
现在,通过身份验证后,用户将被重定向到customprot://oauth1redirect。为了捕捉这种重定向,我添加了一个新的IntentFilter(适用于 Android),如下所示:
[Activity(Label = "OAuthLoginUrlSchemeInterceptorActivity", NoHistory = true, LaunchMode = LaunchMode.SingleTop)]
[IntentFilter(
new[] { Intent.ActionView },
Categories = new[] { Intent.CategoryDefault, Intent.CategoryBrowsable },
DataSchemes = new[] { "customprot"},
DataPathPrefix = "/oauth1redirect")]
public class OAuthLoginUrlSchemeInterceptorActivity : Activity
{
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
// Convert Android.Net.Url to Uri
var uri = new Uri(Intent.Data.ToString());
// Load redirectUrl page
Core.Controller.authenticator.OnPageLoading(uri);
Core.Controller.authenticator.OnPageLoaded(uri);
Finish();
}
}
据我了解xamarin.auth 的文档,这将触发OAuth1Authenticator 解析生成的url 以获取经过身份验证的用户的凭据,并最终触发Completed 或Error 事件。但令人惊讶的是,什么也没发生:没有调用任何事件或引发错误。由于这使调试变得更加困难,我真的不知道如何解决这个问题。因此,我也在寻找有关问题原因和可能解决方案的建议。
编辑:为了更清楚一点:调用意图的OnCreate 方法,但执行OnPageLoading 方法不会引发Completed 或Error 身份验证器事件。
Edit2:这是我的回调代码(我在每个回调中创建了一个断点,调试器不会中断它们或引发异常,所以我很确定,回调根本没有被调用) .
private static void Presenter_Completed(object sender, Xamarin.Auth.AuthenticatorCompletedEventArgs e)
{
throw new NotImplementedException();
}
private static void Aut_Completed(object sender, Xamarin.Auth.AuthenticatorCompletedEventArgs e)
{
throw new NotImplementedException();
}
【问题讨论】:
-
能否请您为authenticator.Completed 发布您的Aut_Completed 回调。我用 v1 测试了我的代码,它运行良好。首先调用authenticator.Completed,然后再调用presenter完成。
-
@don.coda 查看我的编辑。
标签: android authentication xamarin oauth xamarin.auth