我在这个问题上停留了很长时间,而且我不知道该怎么办。
我正在将Auth0身份验证集成到我的Xamarin应用程序中: Link to Xamarin Auth0 tutorial i am working with
我创建了一个界面,并在.Android项目中实现了该界面。然后,我使用依赖项服务来调用login()方法。
然后,我将意图过滤器添加到了实现登录方法以管理回调的类中。
问题是我现在陷入了我的Android实现中,并且不知道如何重新进入我的shard项目。我可以使用意图将我重定向到那里吗?
<script src="myscript.js"></script>
答案 0 :(得分:0)
首先,打开您的MainActivity.cs并向其中添加以下意图过滤器:
[Activity(Label = "AndroidSample", MainLauncher = true, Icon = "@drawable/icon",
LaunchMode = LaunchMode.SingleTask)]
[IntentFilter(
new[] { Intent.ActionView },
Categories = new[] { Intent.CategoryDefault, Intent.CategoryBrowsable },
DataScheme = "YOUR_ANDROID_PACKAGE_NAME",
DataHost = "YOUR_AUTH0_DOMAIN",
DataPathPrefix = "/android/YOUR_ANDROID_PACKAGE_NAME/callback")]
public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
在上面的代码示例中,将YOUR_ANDROID_PACKAGE_NAME替换为您的应用程序的实际包名称,例如com.mycompany.myapplication。另外,请确保DataScheme,DataHost和DataPathPrefix的所有文本均小写。另外,为“活动”设置LaunchMode = LaunchMode.SingleTask,否则每次调用回调URL时,系统都会创建该活动的新实例。
然后编写代码以处理意图。您可以通过重写OnNewIntent方法来实现。在该方法内部,您需要在ActivityMediator上调用Send方法以完成身份验证周期:
protected override async void OnNewIntent(Intent intent)
{
base.OnNewIntent(intent);
Auth0.OidcClient.ActivityMediator.Instance.Send(intent.DataString);
}
然后将Auth0Client
字段添加到您的MainActivity类中:
public Auth0Client client;
然后在MainActivity
OnCreate中初始化该客户端,如下所示:
client = new Auth0Client(new Auth0ClientOptions
{
Domain = //**yourDomain**
ClientId = //**clientID**
Scope = //**Auth0Scope** //Optional
});
在您的共享项目中,添加以下界面,如下所示:
public interface IAuthLogin
{
bool Auth0Login();
}
接口方法Auth0Login
的返回类型可以根据需要更改为任何值,也可以根据需要添加方法参数。
然后添加一个名为Auth0Login.cs的类:
[assembly: Dependency(typeof(AnalyticsManager))]
namespace Ester.MobileApp.Droid.DependencySvcAuth
public class Auth0Login: IAuthLogin
{
public async bool Auth0Login()
{
}
}
然后添加James Montemagno的Plugin CurrentActivity
然后使用您的Auth0Login方法:
var currentActivity= CrossCurrentActivity.Current.Activity as MainActivity;
var loginResult = await currentActivity.client.LoginAsync();
if (loginResult.IsError)
{
return false; // Login Failure
}
else
{
return true; // Login Sucess
}
然后从您的共享项目中调用此方法:
var authLoginManager= DependencyService.Get<IAuthLogin>();
authLoginManager.Auth0Login();
我希望这对您来说很好
在查询的情况下还原。