我目前正在嘗試在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