我目前正在尝试REST
在应用程序中使用服务xamarin.forms
。
要执行身份验证,我使用以下代码:
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
orError
事件。但令人惊讶的是,什么也没发生:没有调用任何事件或引发错误。由于这使调试变得更加困难,我真的不知道如何解决这个问题。因此,我也在寻找有关问题原因和可能解决方案的建议。
编辑:只是为了让这一点更清楚: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();
}