RedCorners.Forms.GoogleMaps 5.36.10

There is a newer version of this package available.
See the version list below for details.

Requires NuGet 2.8.3 or higher.

dotnet add package RedCorners.Forms.GoogleMaps --version 5.36.10                
NuGet\Install-Package RedCorners.Forms.GoogleMaps -Version 5.36.10                
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="RedCorners.Forms.GoogleMaps" Version="5.36.10" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add RedCorners.Forms.GoogleMaps --version 5.36.10                
#r "nuget: RedCorners.Forms.GoogleMaps, 5.36.10"                
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install RedCorners.Forms.GoogleMaps as a Cake Addin
#addin nuget:?package=RedCorners.Forms.GoogleMaps&version=5.36.10

// Install RedCorners.Forms.GoogleMaps as a Cake Tool
#tool nuget:?package=RedCorners.Forms.GoogleMaps&version=5.36.10                

Enhanced Google Maps for Xamarin Forms. Xamarin.Forms.GoogleMaps fork.

Nuget: https://www.nuget.org/packages/RedCorners.Forms.GoogleMaps Documentation: http://redcorners.com/googlemaps/

Getting Started

RedCorners.Forms.GoogleMaps provides facilities to render and manage Google Maps based views on your iOS and Android Xamarin.Forms projects. In order to use RedCorners.Forms.GoogleMaps, you need to have the latest versions of the following packages installed:

In case you wish to access the device's location, you must ask for the required permissions prior to enabling My Location on the Google Maps view. Otherwise, the app will throw an exception due to the lack of required location permissions, or will not show My Location. These steps are platform-dependent and described below.

iOS Setup

In your AppDelegate class, or before rendering the map, you have to call the Init method and inject your Google Maps API key:

public override bool FinishedLaunching(UIApplication app, NSDictionary options)
{
    global::Xamarin.Forms.Forms.Init();
    RedCorners.Forms.GoogleMapsSystem.Init("AIzaSyD8-xxxxxxxxxxxxxxxxxxxxxxxx");
    // ...
    LoadApplication(new App());
    return base.FinishedLaunching(app, options);
}

Based on your use case, you need to configure the info.plist file as follows:

<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>This app needs access to location to continue.</string>
<key>NSLocationAlwaysUsageDescription</key>
<string>This app needs access to location to continue.</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>This app needs access to location to continue.</string>

Android Setup

You have to initialize RedCorners.Forms.GoogleMaps before using it. Typically you can do this in your MainActivity.cs:

protected override void OnCreate(Bundle savedInstanceState)
{
    TabLayoutResource = Resource.Layout.Tabbar;
    ToolbarResource = Resource.Layout.Toolbar;

    base.OnCreate(savedInstanceState);
    Xamarin.Forms.Forms.Init(this, savedInstanceState);
    
    // Initialize RedCorners.Forms.GoogleMaps
    RedCorners.Forms.GoogleMapsSystem.Init(this, savedInstanceState);

    LoadApplication(new App());

    // Optional: Ask for Location Permissions
    if (
        (ContextCompat.CheckSelfPermission(this, Manifest.Permission.AccessFineLocation) != Permission.Granted) ||
        (ContextCompat.CheckSelfPermission(this, Manifest.Permission.AccessCoarseLocation) != Permission.Granted))
    {
        ActivityCompat.RequestPermissions(this, new [] {
            Manifest.Permission.AccessFineLocation,
            Manifest.Permission.AccessCoarseLocation}, 1);
    };
}

Depending on your use case, you may want to request Fine or Coarse locations. To do this, first add the following lines in your AndroidManifest.xml file:

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

You should also add your API key to the manifest:

<meta-data android:name="com.google.android.geo.API_KEY" android:value="AIzaSyD8-xxxxxxxxxxxxxxxxxxxxxxxx" />

In case you get the java.lang.NoClassDefFoundError: Failed resolution of: Lorg/apache/http/ProtocolVersion; error, the following line can help:

<uses-library android:name="org.apache.http.legacy" android:required="false" />

The entire manifest can look like this:

<?xml version="1.0" encoding="utf-8"?>
<manifest 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:versionCode="1" 
    android:versionName="1.0" 
    package="com.redcorners.googlemaps">
    <uses-sdk android:minSdkVersion="21" android:targetSdkVersion="28" />
	<application android:label="RedCorners.Forms.GoogleMaps.Demo.Android">
        <uses-library android:name="org.apache.http.legacy" android:required="false" />
        <meta-data android:name="com.google.android.geo.API_KEY" android:value="AIzaSyD8-xxxxxxxxxxxxxxxxxxxxxxxx" />
    </application>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
</manifest>

Showing a basic map

The first step is including the RedCorners.Forms.GoogleMaps namespace in your XAML file:

xmlns:map="clr-namespace:RedCorners.Forms.GoogleMaps;assembly=RedCorners.Forms.GoogleMaps"

Afterwards, you can use map:Map or other variants of it such as map:LocationPickerView or map:MapDrawView to show a Google Map:

<map:Map
    MyLocationEnabled="True"
	IsMyLocationButtonVisible="True"
    Latitude="{Binding Latitude, Mode=TwoWay}" 
    Longitude="{Binding Longitude, Mode=TwoWay}">
</map:Map>
Product 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 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed. 
.NET Core netcoreapp2.0 was computed.  netcoreapp2.1 was computed.  netcoreapp2.2 was computed.  netcoreapp3.0 was computed.  netcoreapp3.1 was computed. 
.NET Standard netstandard2.0 is compatible.  netstandard2.1 was computed. 
.NET Framework net461 was computed.  net462 was computed.  net463 was computed.  net47 was computed.  net471 was computed.  net472 was computed.  net48 was computed.  net481 was computed. 
MonoAndroid monoandroid was computed.  monoandroid80 is compatible. 
MonoMac monomac was computed. 
MonoTouch monotouch was computed. 
Tizen tizen40 was computed.  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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

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
90.0.0 329 7/14/2024
8.59.40 1,756 7/21/2021
8.59.39 1,431 2/10/2021
8.59.38 925 1/23/2021
8.59.37 875 1/23/2021
8.59.36-alpha 774 1/9/2021
8.50.37 927 12/14/2020
8.50.36 882 12/9/2020
8.50.35 889 12/9/2020
8.50.34 864 11/28/2020
8.50.33 873 11/28/2020
8.50.32 1,009 10/26/2020
8.50.30 991 10/25/2020
8.50.29 998 10/25/2020
8.50.28 971 10/25/2020
8.50.27 883 10/25/2020
8.50.26 887 10/25/2020
8.50.25 928 10/25/2020
8.50.24 957 10/25/2020
8.50.23 1,038 10/24/2020
8.46.22 968 8/30/2020
8.46.21 1,080 7/23/2020
8.46.20 987 3/17/2020
6.41.19 1,206 1/12/2020
6.41.18 993 1/12/2020
6.41.17 1,068 1/11/2020
6.41.16 972 12/30/2019
6.41.15 940 12/30/2019
6.41.14 1,011 12/30/2019
6.41.13 974 12/18/2019
6.41.12 988 12/18/2019
5.39.11 951 12/2/2019
5.36.10 979 11/27/2019
5.36.9 1,024 11/24/2019
5.33.7 973 11/15/2019
5.33.6 997 11/1/2019
5.30.5 1,046 9/11/2019
5.26.4 1,065 8/11/2019
5.26.3 1,031 8/11/2019
5.24.2 1,002 8/5/2019
5.24.1 1,011 8/5/2019
5.17.1 1,035 7/14/2019
5.12.0 1,035 7/7/2019
4.11.0 1,034 6/20/2019
4.10.0 1,015 6/18/2019
4.9.0 1,044 6/15/2019
4.1.0 1,082 5/13/2019
4.0.5 1,026 5/12/2019
4.0.1-alpha 864 5/9/2019