我目前正在尝试在xamarin.forms
应用中使用REST
服务。OAuth1认证者Xamarin.Auth未终止未完成
执行认证我用这个代码:
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来获得身份验证的用户的凭据, ultimatley触发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();
}
您可以发布您的Aut_Completed回调authenticator.Completed。我用v1测试了我的代码,它工作正常。验证者完成之后首先被调用,然后主持人完成。 –
@ don.coda查看我的编辑。 – FlashTek