Shiny.Health
1.0.0-beta-0021
Prefix Reserved
dotnet add package Shiny.Health --version 1.0.0-beta-0021
NuGet\Install-Package Shiny.Health -Version 1.0.0-beta-0021
<PackageReference Include="Shiny.Health" Version="1.0.0-beta-0021" />
paket add Shiny.Health --version 1.0.0-beta-0021
#r "nuget: Shiny.Health, 1.0.0-beta-0021"
// Install Shiny.Health as a Cake Addin #addin nuget:?package=Shiny.Health&version=1.0.0-beta-0021&prerelease // Install Shiny.Health as a Cake Tool #tool nuget:?package=Shiny.Health&version=1.0.0-beta-0021&prerelease
Shiny Health
Apple Health and Google Fit for your .NET7+ .NET Mobile apps
Features
- Read summary values between timestamps and specified interval
- Query distance, step count, calory intake, & heart rate
- TODO: Write values
How To Use
IHealthService health; // inject, resolve, etc
// request permissions
var result = await health.RequestPermission(
new Permission(DistanceHealthMetric.Default, PermissionType.Read),
new Permission(CaloriesHealthMetric.Default, PermissionType.Read),
new Permission(StepCountHealthMetric.Default, PermissionType.Read),
new Permission(HeartRateHealthMetric.Default, PermissionType.Read)
);
if (!result)
{
// say something useful
}
var end = DateTimeOffset.Now;
var start = DateTimeOffset.Now.AddDays(-1);
// now run your queries
var distance = (await health.Query(DistanceHealthMetric.Default, start, end, Interval.Days)).Sum(x => x.Value);
var calories = (await health.Query(CaloriesHealthMetric.Default, start, end, Interval.Days)).Sum(x => x.Value);
var steps = (await health.Query(StepCountHealthMetric.Default, start, end, Interval.Days)).Sum(x => x.Value);
var heartRate = (await health.Query(HeartRateHealthMetric.Default, start, end, Interval.Days)).Average(x => x.Value);
Setup
The fastest way to get going in a new application is to use our community dotnet template. Just run
dotnet new install Shiny.Templates
MAUI
Now, in your MauiProgram.cs, add:
public static MauiApp CreateMauiApp()
{
var builder = MauiApp
.CreateBuilder()
.UseShiny()
.UseMauiApp<App>()
.ConfigureFonts(fonts =>
{
fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular");
fonts.AddFont("OpenSans-Semibold.ttf", "OpenSansSemibold");
});
builder.Services.AddHealthIntegration();
return builder.Build();
}
iOS
To use iOS (and therefore the sample), you need to have a provisioning profile with all of the necessary Apple Health setup for your application.
Take a look at the Xamarin docs for more info
Add the following:
Info.plist
<key>UIRequiredDeviceCapabilities</key>
<array>
<string>healthkithealthkit</string>
</array>
<key>NSHealthUpdateUsageDescription</key>
<string>We need to say something useful here</string>
<key>NSHealthShareUsageDescription</key>
<string>We need to say something useful here</string>
Entitlements.plist
<key>com.apple.developer.healthkit</key>
<true />
<key>com.apple.developer.healthkit.background-delivery</key>
<true />
Google Fit
To Test Locally:
- You have added your x to your Project's configuration setting on Google or Firebase Account.
- Downloaded and added google-services.json to your android project after adding the debug SHA1 key in your account.
- Package name (on Firebase account) and Application Id (on android) must be same .. Android's package name might be different, no problems with that.
** https://github.com/android/fit-samples/blob/main/StepCounterKotlin/app/src/main/java/com/google/android/gms/fit/samples/stepcounterkotlin/MainActivity.kt ** https://github.com/android/fit-samples/blob/main/BasicHistoryApiKotlin/app/src/main/AndroidManifest.xml
Setup
- Sign Up at https://console.cloud.google.com/apis/dashboard
- Under "Enabled APIs and services", search for "Fitness API"
- After selecting "Fitness API" - enable the service
- Now go to Firebase and add your project created in step 1
- When creating your app, you need to ensure that your android app package name matches between firebase, cloud console, & androidmanifest.xml
- You will need to add your debug SHA-1 debug key using
keytool -list -v -alias androiddebugkey -keystore ~/.android/debug.keystore Password is 'android'
- Download the google-services.json
- Copy/paste file into your MAUI app at Platforms/Android and alter your csproj to the following
<ItemGroup Condition="'$(TargetFramework)' == 'net8.0-android'">
<GoogleServicesJson Include="Platforms\Android\google-services.json" />
</ItemGroup>
AndroidManifest.xml
The following entry is needed for step data
<uses-permission android:name="android.permission.ACTIVITY_RECOGNITION"/>
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 is compatible. net8.0-android was computed. net8.0-android34.0 is compatible. net8.0-browser was computed. net8.0-ios was computed. net8.0-ios17.0 is compatible. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
.NET Core | netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
.NET Standard | netstandard2.1 is compatible. |
MonoAndroid | monoandroid was computed. monoandroid13.0 is compatible. |
MonoMac | monomac was computed. |
MonoTouch | monotouch was computed. |
Tizen | tizen60 was computed. |
Xamarin.iOS | xamarinios was computed. xamarinios10 is compatible. |
Xamarin.Mac | xamarinmac was computed. |
Xamarin.TVOS | xamarintvos was computed. |
Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.1
- Shiny.Core (>= 3.2.0)
-
MonoAndroid 13.0
- Shiny.Core (>= 3.2.0)
- Xamarin.AndroidX.Collection.Jvm (>= 1.3.0.2)
- Xamarin.AndroidX.Collection.Ktx (>= 1.3.0.2)
- Xamarin.GooglePlayServices.Auth (>= 120.7.0.1)
- Xamarin.GooglePlayServices.Fitness (>= 121.1.0.6)
-
net8.0
- Shiny.Core (>= 3.2.0)
-
net8.0-android34.0
- Shiny.Core (>= 3.2.0)
- Xamarin.AndroidX.Collection.Jvm (>= 1.3.0.2)
- Xamarin.AndroidX.Collection.Ktx (>= 1.3.0.2)
- Xamarin.GooglePlayServices.Auth (>= 120.7.0.1)
- Xamarin.GooglePlayServices.Fitness (>= 121.1.0.6)
-
net8.0-ios17.0
- Shiny.Core (>= 3.2.0)
-
Xamarin.iOS 1.0
- Shiny.Core (>= 3.2.0)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last updated |
---|---|---|
1.0.0-beta-0021 | 241 | 12/14/2023 |
1.0.0-beta-0020 | 95 | 12/5/2023 |
1.0.0-beta-0018 | 450 | 11/27/2023 |
1.0.0-beta-0013 | 134 | 10/4/2023 |
1.0.0-beta-0012 | 67 | 10/4/2023 |
1.0.0-beta-0006 | 99 | 9/5/2023 |
1.0.0-beta-0001 | 92 | 8/28/2023 |