Skip to content

Commit aa7c4a0

Browse files
Episode 16: Connecting to Firestore on Android
1 parent ed6a7a9 commit aa7c4a0

File tree

6 files changed

+82
-4
lines changed

6 files changed

+82
-4
lines changed
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
using System;
2+
using System.Threading.Tasks;
3+
using Android.Gms.Tasks;
4+
using Firebase.Firestore;
5+
using TimeTrackerTutorial.Models;
6+
7+
namespace TimeTrackerTutorial.Droid.ServiceListeners
8+
{
9+
public class OnCompleteListener : Java.Lang.Object, IOnCompleteListener
10+
{
11+
private TaskCompletionSource<AuthenticatedUser> _tcs;
12+
13+
public OnCompleteListener(TaskCompletionSource<AuthenticatedUser> tcs)
14+
{
15+
_tcs = tcs;
16+
}
17+
18+
public void OnComplete(Android.Gms.Tasks.Task task)
19+
{
20+
if (task.IsSuccessful)
21+
{
22+
// process document
23+
var result = task.Result;
24+
if (result is DocumentSnapshot doc)
25+
{
26+
var user = new AuthenticatedUser();
27+
user.Id = doc.Id;
28+
user.FirstName = doc.GetString("FirstName");
29+
user.LastName = doc.GetString("LastName");
30+
_tcs.TrySetResult(user);
31+
return;
32+
}
33+
}
34+
// something went wrong
35+
_tcs.TrySetResult(default(AuthenticatedUser));
36+
}
37+
}
38+
}

TimeTrackerTutorial.Android/Services/AccountService.cs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,11 @@
22
using System.Threading.Tasks;
33
using Firebase;
44
using Firebase.Auth;
5+
using Firebase.Firestore;
56
using Java.Util.Concurrent;
7+
using TimeTrackerTutorial.Droid.ServiceListeners;
68
using TimeTrackerTutorial.Droid.Services;
9+
using TimeTrackerTutorial.Models;
710
using TimeTrackerTutorial.Services.Account;
811
using Xamarin.Essentials;
912
using Xamarin.Forms;
@@ -88,5 +91,18 @@ public Task<bool> VerifyOtpCodeAsync(string code)
8891
}
8992
return Task.FromResult(false);
9093
}
94+
95+
public Task<AuthenticatedUser> GetUserAsync()
96+
{
97+
var tcs = new TaskCompletionSource<AuthenticatedUser>();
98+
99+
FirebaseFirestore.Instance
100+
.Collection("users")
101+
.Document(FirebaseAuth.Instance.CurrentUser.Uid)
102+
.Get()
103+
.AddOnCompleteListener(new OnCompleteListener(tcs));
104+
105+
return tcs.Task;
106+
}
91107
}
92108
}

TimeTrackerTutorial.Android/TimeTrackerTutorial.Android.csproj

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -55,14 +55,17 @@
5555
<ItemGroup>
5656
<PackageReference Include="Xamarin.Forms" Version="4.4.0.991265" />
5757
<PackageReference Include="Xamarin.Essentials" Version="1.5.3.2" />
58+
<PackageReference Include="Xamarin.Build.Download">
59+
<Version>0.10.0</Version>
60+
</PackageReference>
5861
<PackageReference Include="Xamarin.Firebase.Analytics">
59-
<Version>60.1142.1</Version>
62+
<Version>71.1630.4</Version>
6063
</PackageReference>
6164
<PackageReference Include="Xamarin.Firebase.Auth">
62-
<Version>60.1142.1</Version>
65+
<Version>71.1605.4</Version>
6366
</PackageReference>
64-
<PackageReference Include="Xamarin.Build.Download">
65-
<Version>0.10.0</Version>
67+
<PackageReference Include="Xamarin.Firebase.Firestore">
68+
<Version>71.1705.4</Version>
6669
</PackageReference>
6770
</ItemGroup>
6871
<ItemGroup>
@@ -71,6 +74,7 @@
7174
<Compile Include="Properties\AssemblyInfo.cs" />
7275
<Compile Include="Renderers\HoursProgressViewRenderer.cs" />
7376
<Compile Include="Services\AccountService.cs" />
77+
<Compile Include="ServiceListeners\OnCompleteListener.cs" />
7478
</ItemGroup>
7579
<ItemGroup>
7680
<None Include="Resources\AboutResources.txt" />
@@ -99,6 +103,7 @@
99103
<Folder Include="Resources\drawable\" />
100104
<Folder Include="Renderers\" />
101105
<Folder Include="Services\" />
106+
<Folder Include="ServiceListeners\" />
102107
</ItemGroup>
103108
<ItemGroup>
104109
<ProjectReference Include="..\TimeTrackerTutorial\TimeTrackerTutorial.csproj">
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
using System;
2+
namespace TimeTrackerTutorial.Models
3+
{
4+
public class AuthenticatedUser
5+
{
6+
public string Id { get; set; }
7+
public string FirstName { get; set; }
8+
public string LastName { get; set; }
9+
}
10+
}

TimeTrackerTutorial/Services/Account/IAccountService.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using System.Collections.Generic;
33
using System.Text;
44
using System.Threading.Tasks;
5+
using TimeTrackerTutorial.Models;
56

67
namespace TimeTrackerTutorial.Services.Account
78
{
@@ -11,5 +12,7 @@ public interface IAccountService
1112
Task<double> GetCurrentPayRateAsync();
1213
Task<bool> SendOtpCodeAsync(string phoneNumber);
1314
Task<bool> VerifyOtpCodeAsync(string code);
15+
16+
Task<AuthenticatedUser> GetUserAsync();
1417
}
1518
}

TimeTrackerTutorial/Services/Account/MockAccountService.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using System.Collections.Generic;
33
using System.Text;
44
using System.Threading.Tasks;
5+
using TimeTrackerTutorial.Models;
56

67
namespace TimeTrackerTutorial.Services.Account
78
{
@@ -12,6 +13,11 @@ public Task<double> GetCurrentPayRateAsync()
1213
return Task.FromResult(10.0);
1314
}
1415

16+
public Task<AuthenticatedUser> GetUserAsync()
17+
{
18+
throw new NotImplementedException();
19+
}
20+
1521
public Task<bool> LoginAsync(string username, string password)
1622
{
1723
if (string.IsNullOrWhiteSpace(username) || string.IsNullOrWhiteSpace(password))

0 commit comments

Comments
 (0)