Hej, witki mi już opadają, a z Auth0 nie ma żadnej pomocy. Próbuję ogarnąć logowanie do aplikacji mobilnej za pomocą Facebook i Auth0.
Aplikacja pisana w Xamarin. Może ktoś tutaj pomoże?
Zaznaczam, że udało mi się zrobić logowanie w aplikacji WPF, ale w Xamarin.Forms jest jakiś duży problem.
To jest moje MainActivity w Android:
[Activity(Label = "MyAppName", Icon = "@mipmap/icon", Theme = "@style/MainTheme", MainLauncher = false, NoHistory = true,
ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation, LaunchMode = LaunchMode.SingleTask)]
[IntentFilter(
new[] {Intent.ActionView},
Categories = new[] { Intent.CategoryDefault, Intent.CategoryBrowsable },
DataScheme = "com.mycompany.myapp",
DataHost = "proper-host",
DataPathPrefix = "/android/com.mycompany.myapp/callback")]
public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
{
protected override void OnNewIntent(Intent intent)
{
base.OnNewIntent(intent);
ActivityMediator.Instance.Send(intent.DataString);
}
//rest of code removed for brevity
}
Teraz, żeby wywołać logowanie FB z aplikacji, stworzyłem prosty interfejs i po prostu używam go:
private async void fbLoginButton_Clicked(object sender, EventArgs e)
{
var loginService = DependencyService.Get<ILoginProvider>();
try
{
var loginResult = await loginService.FacebookLogin();
//tutaj nigdy nie dochodzi
if (loginResult.IsError)
{
Debug.WriteLine("Login error");
}
else
{
Debug.WriteLine("Login success");
}
}
catch(Exception ex) //tutaj też nigdy nie dochodzi
{
Debug.WriteLine("Error: " + ex.Message);
}
}
A serwis w Androidzie wygląda tak:
[assembly: Dependency(typeof(Xamarin.Droid.Services.AndroidLoginProvider))]
namespace Xamarin.Droid.Services
{
public class AndroidLoginProvider : ILoginProvider
{
public async Task<AuthenticationResult> FacebookLogin()
{
Auth0ClientOptions options = new Auth0ClientOptions
{
Domain = "proper-domain",
ClientId = "my-client-id"
};
Auth0Client client = new Auth0Client(options);
var result = await client.LoginAsync();
//it never gets here
if (result.IsError)
throw new InvalidOperationException();
return new AuthenticationResult();
}
}
}
Teraz, gdy wywołuję LoginAsync, otwiera się przeglądarka i mogę potwierdzić, że chcę zalogować się używając Facebooka. Po tym nic się nie dzieje. Kod nigdy nie wraca z LoginAsync ani nie wywołuje się ten w OnNewIntent z MainActivity.
Próbowałem już wszystkiego i walczyłem z tym przez dwa dni.
Moja wersja Xamarin: Xamarin.Forms version 5.0.0.2291
Zainstalowałem też Xamarin.Forms.AppLinks 5.0.0.2291 (bo na outpucie widziałem komunikat, że nie można załadować Xamarin.Forms.AppLinks)
Auth0.OidcClient.Android: 3.2.4
Auth0.OidcClient.Core: 3.2.4
IdentityModel.OidcClient: 5.0.0
To jest mój output
[NetworkSecurityConfig] No Network Security Config specified, using platform default
[Choreographer] Skipped 1196 frames! The application may be doing too much work on its main thread.
Thread started: #10
Loaded assembly: /data/data/com.mycompany.myapp/files/.override/System.Memory.dll [External]
Loaded assembly: /data/data/com.mycompany.myapp/files/.override/System.Buffers.dll [External]
Loaded assembly: /data/data/com.mycompany.myapp/files/.override/System.Numerics.Vectors.dll [External]
Loaded assembly: /data/data/com.mycompany.myapp/files/.override/System.Runtime.CompilerServices.Unsafe.dll [External]
Loaded assembly: /data/data/com.mycompany.myapp/files/.override/System.Threading.Tasks.Extensions.dll [External]
[zygote64] Checksum mismatch for dex base.apk
[EGL_emulation] eglMakeCurrent: 0x76df47e3d4a0: ver 3 1 (tinfo 0x76df47f6aac0)
[EGL_emulation] eglMakeCurrent: 0x76df47e3d4a0: ver 3 1 (tinfo 0x76df47f6aac0)
Proszę... HELPunku...