Skip to content

Commit ae8c37d

Browse files
Episode 12: Firebase Auth and Firebase Analytics (excludes google-services.json - download from firebase console)
1 parent 46bd495 commit ae8c37d

File tree

5 files changed

+80
-6
lines changed

5 files changed

+80
-6
lines changed
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
<?xml version="1.0" encoding="utf-8"?>
2-
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="1" android:versionName="1.0" package="com.companyname.timetrackertutorial">
2+
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="1" android:versionName="1.0" package="com.letscreateseries.timetrackertutorial">
33
<uses-sdk android:minSdkVersion="21" android:targetSdkVersion="28" />
44
<application android:label="TimeTrackerTutorial.Android"></application>
55
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
6+
<uses-permission android:name="android.permission.INTERNET" />
67
</manifest>
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
using System;
2+
using System.Threading.Tasks;
3+
using Firebase.Auth;
4+
using TimeTrackerTutorial.Droid.Services;
5+
using TimeTrackerTutorial.Services.Account;
6+
using Xamarin.Forms;
7+
8+
[assembly: Dependency(typeof(AccountService))]
9+
namespace TimeTrackerTutorial.Droid.Services
10+
{
11+
public class AccountService : IAccountService
12+
{
13+
public AccountService()
14+
{
15+
}
16+
17+
public Task<double> GetCurrentPayRateAsync()
18+
{
19+
return Task.FromResult(10d);
20+
}
21+
22+
public Task<bool> LoginAsync(string username, string password)
23+
{
24+
var tcs = new TaskCompletionSource<bool>();
25+
FirebaseAuth.Instance.SignInWithEmailAndPasswordAsync(username, password)
26+
.ContinueWith((task) => OnAuthCompleted(task, tcs));
27+
return tcs.Task;
28+
}
29+
30+
private void OnAuthCompleted(Task task, TaskCompletionSource<bool> tcs)
31+
{
32+
if (task.IsCanceled || task.IsFaulted)
33+
{
34+
// something went wrong
35+
tcs.SetResult(false);
36+
return;
37+
}
38+
tcs.SetResult(true);
39+
}
40+
}
41+
}

TimeTrackerTutorial.Android/TimeTrackerTutorial.Android.csproj

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,12 +55,19 @@
5555
<ItemGroup>
5656
<PackageReference Include="Xamarin.Forms" Version="4.4.0.991265" />
5757
<PackageReference Include="Xamarin.Essentials" Version="1.3.1" />
58+
<PackageReference Include="Xamarin.Firebase.Analytics">
59+
<Version>60.1142.1</Version>
60+
</PackageReference>
61+
<PackageReference Include="Xamarin.Firebase.Auth">
62+
<Version>60.1142.1</Version>
63+
</PackageReference>
5864
</ItemGroup>
5965
<ItemGroup>
6066
<Compile Include="MainActivity.cs" />
6167
<Compile Include="Resources\Resource.designer.cs" />
6268
<Compile Include="Properties\AssemblyInfo.cs" />
6369
<Compile Include="Renderers\HoursProgressViewRenderer.cs" />
70+
<Compile Include="Services\AccountService.cs" />
6471
</ItemGroup>
6572
<ItemGroup>
6673
<None Include="Resources\AboutResources.txt" />
@@ -88,12 +95,16 @@
8895
<ItemGroup>
8996
<Folder Include="Resources\drawable\" />
9097
<Folder Include="Renderers\" />
98+
<Folder Include="Services\" />
9199
</ItemGroup>
92100
<ItemGroup>
93101
<ProjectReference Include="..\TimeTrackerTutorial\TimeTrackerTutorial.csproj">
94102
<Project>{764C33A9-C9F3-4D94-B945-3F2168473335}</Project>
95103
<Name>TimeTrackerTutorial</Name>
96104
</ProjectReference>
97105
</ItemGroup>
106+
<ItemGroup>
107+
<GoogleServicesJson Include="google-services.json" />
108+
</ItemGroup>
98109
<Import Project="$(MSBuildExtensionsPath)\Xamarin\Android\Xamarin.Android.CSharp.targets" />
99110
</Project>

TimeTrackerTutorial/PageModels/Base/PageModelLocator.cs

Lines changed: 25 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ static PageModelLocator()
3131

3232
// Register Services (registered as Singletons by default)
3333
_container.Register<INavigationService, NavigationService>();
34-
_container.Register<IAccountService, MockAccountService>();
34+
_container.Register<IAccountService>(DependencyService.Get<IAccountService>());
3535
_container.Register<IStatementService, MockStatementService>();
3636
_container.Register<IWorkService, MockWorkService>();
3737
}
@@ -50,14 +50,35 @@ static void Register<TPageModel, TPage>() where TPageModel : PageModelBase where
5050

5151
public static T Resolve<T>() where T : class
5252
{
53-
return _container.Resolve<T>();
53+
try
54+
{
55+
return _container.Resolve<T>();
56+
}
57+
catch (TinyIoCResolutionException e)
58+
{
59+
var message = e.Message;
60+
System.Diagnostics.Debug.WriteLine(e.Message);
61+
62+
while (e.InnerException is TinyIoCResolutionException ex)
63+
{
64+
message = ex.Message;
65+
System.Diagnostics.Debug.WriteLine("\t" + ex.Message);
66+
e = ex;
67+
}
68+
#if DEBUG
69+
App.Current.MainPage.DisplayAlert("Resolution Error", message, "Ok");
70+
#endif
71+
}
72+
return default(T);
5473
}
5574

56-
public static Page CreatePageFor(Type pageModelType)
75+
76+
public static Page CreatePageFor<TPageModelType>() where TPageModelType : PageModelBase
5777
{
78+
Type pageModelType = typeof(TPageModelType);
5879
var pageType = _lookupTable[pageModelType];
5980
var page = (Page)Activator.CreateInstance(pageType);
60-
var pageModel = _container.Resolve(pageModelType);
81+
var pageModel = Resolve<TPageModelType>();
6182
page.BindingContext = pageModel;
6283
return page;
6384
}

TimeTrackerTutorial/Services/Navigation/NavigationService.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ public Task GoBackAsync()
1818
public async Task NavigateToAsync<TPageModel>(object navigationData = null, bool setRoot = false)
1919
where TPageModel : PageModelBase
2020
{
21-
Page page = PageModelLocator.CreatePageFor(typeof(TPageModel));
21+
Page page = PageModelLocator.CreatePageFor<TPageModel>();
2222

2323
if (setRoot)
2424
{

0 commit comments

Comments
 (0)