处理Xamarin中的意图

时间:2018-12-03 06:51:47

标签: android authentication xamarin

我在这个问题上停留了很长时间,而且我不知道该怎么办。

我正在将Auth0身份验证集成到我的Xamarin应用程序中: Link to Xamarin Auth0 tutorial i am working with

我创建了一个界面,并在.Android项目中实现了该界面。然后,我使用依赖项服务来调用login()方法。

然后,我将意图过滤器添加到了实现登录方法以管理回调的类中。

问题是我现在陷入了我的Android实现中,并且不知道如何重新进入我的shard项目。我可以使用意图将我重定向到那里吗?

<script src="myscript.js"></script>

1 个答案:

答案 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();
    

我希望这对您来说很好

在查询的情况下还原。