Hallo,
ich taste mich gerade etwas an Xamarin.Forms heran. Speziell geht es mir darum eine Android App zu entwickeln die ich aber später ohne erheblichen Mehraufwand auch für IOS oder den Desktop nutzen kann.
Aktuell geht es mir aber erstmal nur um Android.
Ich versuche gerade Google Sign In einzubauen. Dazu habe ich mir die paar NuGet Pakete geladen und schaue mir anhand der Beispiele an wie das funktioniert. Das klappt auch alles. Ich habe allerdings eine Verständnisfrage wie ich etwas bestimmtes hinbekommen kann.
Es gibt ja das Hauptprojekt, welches von dem Android Projekt und dem IOS Projekt referenziert wird. Das Hauptprojekt bekommt ja nicht die Google Sign In libraries referenziert. Jetzt habe ich in meiner MainPage einfach einen Button der einen SignInCommand im SignInViewModel triggert.
D.h. das ist mein aktuelles Setup:
Das View:
Das ViewModel dazu:
Das Codebehind des Views:
Wenn ich das ganze Debugge und den Button auf meinem Gerät klicke, wird im ViewModel auch das SignIn_Click - "Event" gefeuert.
Jetzt möchte ich von dort die SignIn Activity von Google öffnen lassen. Da das ViewModel ja in dem Hauptprojekt liegt und das Android Projekt nicht referenziert sondern anders herum kann ich ja nicht die Google API's nutzen. Ich muss jetzt also irgendwie der Android Activity mitteilen, dass sie die SignIn Activity launchen soll.
Jetzt habe ich folgendes gefunden und dachte, dass ich das genau für sowas nutzen kann: docs.microsoft.com/de-de/xamar…amentals/messaging-center
Im ViewModel in der OnClick mache ich also folgendes:
Und meine Android Activity OnCreate Methode sieht bisher so aus:
Leider kommt das "Event" was ich subscribe nie an. Der Button Click wird ausgeführt. also das MessagingCenter.Send wird aufgerufen. Aber die Action die ich beim Subscribe angegeben habe wird nie ausgeführt... Warum nicht?
Wenn ich das was in der Action vom Subscribe direkt ausführe in der OnCreate wird der SignIn Dialog direkt geöffnet. Das klappt also alles. Nur das "Event" wird nicht gefeuert!
Weiß einer uum Rat?
ich taste mich gerade etwas an Xamarin.Forms heran. Speziell geht es mir darum eine Android App zu entwickeln die ich aber später ohne erheblichen Mehraufwand auch für IOS oder den Desktop nutzen kann.
Aktuell geht es mir aber erstmal nur um Android.
Ich versuche gerade Google Sign In einzubauen. Dazu habe ich mir die paar NuGet Pakete geladen und schaue mir anhand der Beispiele an wie das funktioniert. Das klappt auch alles. Ich habe allerdings eine Verständnisfrage wie ich etwas bestimmtes hinbekommen kann.
Es gibt ja das Hauptprojekt, welches von dem Android Projekt und dem IOS Projekt referenziert wird. Das Hauptprojekt bekommt ja nicht die Google Sign In libraries referenziert. Jetzt habe ich in meiner MainPage einfach einen Button der einen SignInCommand im SignInViewModel triggert.
D.h. das ist mein aktuelles Setup:
Das View:
XML-Quellcode
-
- <?xml version="1.0" encoding="utf-8" ?>
- <ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
- xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
- xmlns:d="http://xamarin.com/schemas/2014/forms/design"
- xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
- mc:Ignorable="d"
- x:Class="MordhauTweakz.Views.AuthPage.SignInPage"
- Title="Sign In">
- <Grid Margin="10">
- <Button Command="{Binding SignInCommand}" Text="Google SignIn" />
- </Grid>
- </ContentPage>
Das ViewModel dazu:
Das Codebehind des Views:
Wenn ich das ganze Debugge und den Button auf meinem Gerät klicke, wird im ViewModel auch das SignIn_Click - "Event" gefeuert.
Jetzt möchte ich von dort die SignIn Activity von Google öffnen lassen. Da das ViewModel ja in dem Hauptprojekt liegt und das Android Projekt nicht referenziert sondern anders herum kann ich ja nicht die Google API's nutzen. Ich muss jetzt also irgendwie der Android Activity mitteilen, dass sie die SignIn Activity launchen soll.
Jetzt habe ich folgendes gefunden und dachte, dass ich das genau für sowas nutzen kann: docs.microsoft.com/de-de/xamar…amentals/messaging-center
Im ViewModel in der OnClick mache ich also folgendes:
Und meine Android Activity OnCreate Methode sieht bisher so aus:
C#-Quellcode
-
- protected override void OnCreate(Bundle savedInstanceState)
- {
- TabLayoutResource = Resource.Layout.Tabbar;
- ToolbarResource = Resource.Layout.Toolbar;
- base.OnCreate(savedInstanceState);
- GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DefaultSignIn)
- .RequestEmail()
- .Build();
- mGoogleApiClient = new GoogleApiClient.Builder(this)
- .EnableAutoManage(this /* FragmentActivity */, this /* OnConnectionFailedListener */)
- .AddApi(Auth.GOOGLE_SIGN_IN_API, gso)
- .Build();
- MessagingCenter.Subscribe<string>(this, "SignIn", (param) =>
- {
- Device.BeginInvokeOnMainThread(() =>
- {
- var signInIntent = Auth.GoogleSignInApi.GetSignInIntent(mGoogleApiClient);
- StartActivityForResult(signInIntent, 9001);
- });
- });
- Xamarin.Essentials.Platform.Init(this, savedInstanceState);
- global::Xamarin.Forms.Forms.Init(this, savedInstanceState);
- LoadApplication(new App());
- }
Leider kommt das "Event" was ich subscribe nie an. Der Button Click wird ausgeführt. also das MessagingCenter.Send wird aufgerufen. Aber die Action die ich beim Subscribe angegeben habe wird nie ausgeführt... Warum nicht?
Wenn ich das was in der Action vom Subscribe direkt ausführe in der OnCreate wird der SignIn Dialog direkt geöffnet. Das klappt also alles. Nur das "Event" wird nicht gefeuert!
Weiß einer uum Rat?