Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Denetim, Map her platformda yerel harita denetimini kullanır. Bu, kullanıcılar için hızlı ve tanıdık bir harita deneyimi sağlar, ancak her platform API gereksinimlerine uymak için bazı yapılandırma adımları gerektiği anlamına gelir.
Harita başlatma
Denetim Map , tarafından Xamarin.Formssağlanır. Çözümdeki her projeye eklenmesi gereken NuGet paketini eşler .
yüklendikten Xamarin.Formssonra. NuGet paketini eşler , her platform projesinde başlatılmalıdır.
iOS'ta bu, AppDelegate.cs yönteminden Xamarin.FormsMaps.Init sonra Xamarin.Forms.Forms.Init yöntemini çağırarak gerçekleşmelidir:
Xamarin.FormsMaps.Init();
Android'de bu, MainActivity.cs yönteminden Xamarin.FormsMaps.Init sonra Xamarin.Forms.Forms.Init yöntemini çağırarak gerçekleşmelidir:
Xamarin.FormsMaps.Init(this, savedInstanceState);
Evrensel Windows Platformu (UWP) üzerinde bu, oluşturucudan MainPage yöntemini çağırarak Xamarin.FormsMaps.Init MainPage.xaml.cs gerçekleşmelidir:
Xamarin.FormsMaps.Init("INSERT_AUTHENTICATION_TOKEN_HERE");
UWP'de gereken kimlik doğrulama belirteci hakkında bilgi için bkz. Evrensel Windows Platformu.
NuGet paketi eklendikten ve her uygulamanın içinde çağrılan başlatma yönteminden sonra API'ler Xamarin.Forms.Maps paylaşılan kod projesinde kullanılabilir.
Platform yapılandırması
Harita görüntülenmeden önce Android ve Evrensel Windows Platformu (UWP) üzerinde ek yapılandırma gereklidir. Ayrıca iOS, Android ve UWP'de kullanıcının konumuna erişmek için uygulamaya konum izinlerinin verilmesi gerekir.
iOS
iOS'ta bir haritayı görüntülemek ve bunlarla etkileşimde olmak için ek yapılandırma gerekmez. Ancak, konum hizmetlerine erişmek için Info.plist dosyasında aşağıdaki anahtarları ayarlamanız gerekir:
- iOS 11 ve üzeri
NSLocationWhenInUseUsageDescription– uygulama kullanımdayken konum hizmetlerini kullanmak içinNSLocationAlwaysAndWhenInUseUsageDescription– konum hizmetlerini her zaman kullanmak için
- iOS 10 ve öncesi
NSLocationWhenInUseUsageDescription– uygulama kullanımdayken konum hizmetlerini kullanmak içinNSLocationAlwaysUsageDescription– konum hizmetlerini her zaman kullanmak için
iOS 11 ve önceki sürümleri desteklemek için üç anahtarı da ekleyebilirsiniz: NSLocationWhenInUseUsageDescription, NSLocationAlwaysAndWhenInUseUsageDescriptionve NSLocationAlwaysUsageDescription.
Info.plist dosyasında bu anahtarların XML gösterimi aşağıda gösterilmiştir. Uygulamanızın string konum bilgilerini nasıl kullandığını yansıtacak şekilde değerleri güncelleştirmeniz gerekir:
<key>NSLocationAlwaysUsageDescription</key>
<string>Can we use your location at all times?</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>Can we use your location when your application is being used?</string>
<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>Can we use your location at all times?</string>
Info.plist girdileri, Info.plist dosyası düzenlenirken Kaynak görünümüne de eklenebilir:

Uygulama kullanıcının konumuna erişmeye çalıştığında ve erişim istediğinde bir istem görüntülenir:
Android
Android'de harita görüntüleme ve haritayla etkileşim kurma yapılandırma işlemi şu şekildedir:
- Bir Google Haritalar API anahtarı alın ve bildirime ekleyin.
- Bildirimde Google Play hizmetleri sürüm numarasını belirtin.
- Bildirimde Apache HTTP Eski kitaplığı gereksinimini belirtin.
- [isteğe bağlı] Bildirimde WRITE_EXTERNAL_STORAGE iznini belirtin.
- [isteğe bağlı] Bildirimde konum izinlerini belirtin.
- [isteğe bağlı] Sınıfında çalışma zamanı konumu izinleri
MainActivityisteyin.
Doğru yapılandırılmış bildirim dosyası örneği için bkz . örnek uygulamadan AndroidManifest.xml .
Google Haritalar API anahtarı alma
Android'de Google Haritalar API'sini kullanmak için bir API anahtarı oluşturmanız gerekir. Bunu yapmak için Google Haritalar API anahtarı alma başlığındaki yönergeleri izleyin.
Bir API anahtarı aldıktan sonra Özellikler/AndroidManifest.xml dosyasının öğesi içine <application> eklenmelidir:
<application ...>
<meta-data android:name="com.google.android.geo.API_KEY" android:value="PASTE-YOUR-API-KEY-HERE" />
</application>
Bu, API anahtarını bildirime ekler. Geçerli bir API anahtarı Map olmadan denetim boş bir kılavuz görüntüler.
Not
com.google.android.geo.API_KEY API anahtarı için önerilen meta veri adıdır. Geriye dönük uyumluluk com.google.android.maps.v2.API_KEY için meta veri adı kullanılabilir, ancak yalnızca Android Haritalar API'sinde v2 kimlik doğrulamasına izin verir.
APK'nızın Google Haritalar'a erişmesi için, APK'nızı imzalamak için kullandığınız her anahtar deposu (hata ayıklama ve sürüm) için SHA-1 parmak izlerini ve paket adlarını eklemeniz gerekir. Örneğin, hata ayıklama için bir bilgisayar ve yayın APK'sini oluşturmak için başka bir bilgisayar kullanırsanız, ilk bilgisayarın hata ayıklama anahtar deposundan SHA-1 sertifika parmak izini ve ikinci bilgisayarın yayın anahtar deposundan SHA-1 sertifika parmak izini eklemeniz gerekir. Uygulamanın Paket Adı değişirse anahtar kimlik bilgilerini düzenlemeyi de unutmayın. Bkz . Google Haritalar API anahtarı alma.
Google Play hizmetleri sürüm numarasını belirtin
AndroidManifest.xml öğesinin <application> içine aşağıdaki bildirimi ekleyin:
<meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" />
Bu, uygulamanın derlendiği Google Play hizmetlerinin sürümünü bildirime ekler.
Apache HTTP eski kitaplığının gereksinimini belirtin
Uygulamanız Xamarin.Forms API 28 veya üzerini hedeflediyse, AndroidManifest.xml öğesinin <application> içine aşağıdaki bildirimi eklemeniz gerekir:
<uses-library android:name="org.apache.http.legacy" android:required="false" />
Bu, uygulamaya Android 9'dan kaldırılan Apache Http istemci kitaplığını bootclasspath kullanmasını söyler.
WRITE_EXTERNAL_STORAGE iznini belirtin
Uygulamanız API 22 veya daha düşük bir sürümünü hedeflediyse, bildirimine öğesinin WRITE_EXTERNAL_STORAGE alt öğesi <manifest> olarak izni eklemek gerekebilir:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
Uygulamanız API 23 veya üzerini hedeflerse bu gerekli değildir.
Konum izinlerini belirtme
Uygulamanızın kullanıcının konumuna erişmesi gerekiyorsa bildirime (veya her ikisine) öğesinin ACCESS_COARSE_LOCATION alt öğesi <manifest> olarak veya ACCESS_FINE_LOCATION izinlerini ekleyerek izin istemeniz gerekir:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="1" android:versionName="1.0" package="com.companyname.myapp">
...
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
</manifest>
İzin, ACCESS_COARSE_LOCATION API'nin cihazın konumunu belirlemek için WiFi veya mobil verileri ya da her ikisini birden kullanmasına izin verir. İzinler, API'nin ACCESS_FINE_LOCATION mümkün olduğunca hassas bir konum belirlemek için Genel Konumlandırma Sistemi (GPS), WiFi veya mobil verileri kullanmasına olanak tanır.
Alternatif olarak, aşağıdaki izinleri eklemek için bildirim düzenleyicisi kullanılarak bu izinler etkinleştirilebilir:
AccessCoarseLocationAccessFineLocation
Bunlar aşağıdaki ekran görüntüsünde gösterilmiştir:

Çalışma zamanı konumu izinleri isteme
Uygulamanız API 23 veya üzerini hedeflediyse ve kullanıcının konumuna erişmesi gerekiyorsa, çalışma zamanında gerekli izne sahip olup olmadığını denetlemeli ve sahip değilse istemelidir. Bu, aşağıdaki gibi gerçekleştirilebilir:
sınıfına
MainActivityaşağıdaki alanları ekleyin:const int RequestLocationId = 0; readonly string[] LocationPermissions = { Manifest.Permission.AccessCoarseLocation, Manifest.Permission.AccessFineLocation };sınıfına
MainActivityaşağıdakiOnStartgeçersiz kılmayı ekleyin:protected override void OnStart() { base.OnStart(); if ((int)Build.VERSION.SdkInt >= 23) { if (CheckSelfPermission(Manifest.Permission.AccessFineLocation) != Permission.Granted) { RequestPermissions(LocationPermissions, RequestLocationId); } else { // Permissions already granted - display a message. } } }Uygulamanın API 23 veya üzerini hedeflemesi koşuluyla, bu kod izin için
AccessFineLocationbir çalışma zamanı izin denetimi gerçekleştirir. İzin verilmediyse, yöntemi çağrılarakRequestPermissionsbir izin isteği yapılır.sınıfına
MainActivityaşağıdakiOnRequestPermissionsResultgeçersiz kılmayı ekleyin:public override void OnRequestPermissionsResult(int requestCode, string[] permissions, [GeneratedEnum] Permission[] grantResults) { if (requestCode == RequestLocationId) { if ((grantResults.Length == 1) && (grantResults[0] == (int)Permission.Granted)) // Permissions granted - display a message. else // Permissions denied - display a message. } else { base.OnRequestPermissionsResult(requestCode, permissions, grantResults); } }Bu geçersiz kılma, izin isteğinin sonucunu işler.
Bu kodun genel etkisi, uygulama kullanıcının konumunu istediğinde, izin isteyen aşağıdaki iletişim kutusunun görüntülenmesidir:
Evrensel Windows Platformu
UWP'de, uygulamanızın bir harita görüntüleyebilmesi ve harita hizmetlerini tüketmesi için önce kimliğinin doğrulanması gerekir. Uygulamanızın kimliğini doğrulamak için bir haritalar kimlik doğrulama anahtarı belirtmeniz gerekir. Daha fazla bilgi için bkz . Haritalar kimlik doğrulama anahtarı isteme. Kimlik doğrulama belirteci daha sonra Bing Haritalar ile uygulamanın kimliğini doğrulamak için yöntem çağrısında FormsMaps.Init("AUTHORIZATION_TOKEN") belirtilmelidir.
Not
UWP'de coğrafi kodlama gibi harita hizmetlerini kullanmak için özelliğini de kimlik doğrulama anahtarı değerine ayarlamanız MapService.ServiceToken gerekir. Bu, aşağıdaki kod satırıyla gerçekleştirilebilir: Windows.Services.Maps.MapService.ServiceToken = "INSERT_AUTH_TOKEN_HERE";.
Ayrıca, uygulamanızın kullanıcının konumuna erişmesi gerekiyorsa, paket bildiriminde konum özelliğini etkinleştirmeniz gerekir. Bu, aşağıdaki gibi gerçekleştirilebilir:
Çözüm Gezgini package.appxmanifest'e çift tıklayın ve Özellikler sekmesini seçin.
Özellikler listesinde Konum kutusunu işaretleyin. Bu,
locationcihaz özelliğini paket bildirim dosyasına ekler.<Capabilities> <!-- DeviceCapability elements must follow Capability elements (if present) --> <DeviceCapability Name="location"/> </Capabilities>
Yayın derlemeleri
UWP yayın derlemeleri, uygulamayı doğrudan yerel koda derlemek için .NET yerel derlemesini kullanır. Ancak, bunun bir sonucu, UWP üzerindeki denetimin işleyicisinin Map yürütülebilir dosyadan bağlanabileceğidir. Bu, App.xaml.cs'da yöntemin Forms.Init UWP'ye özgü aşırı yüklemesi kullanılarak düzeltilebilir:
var assembliesToInclude = new [] { typeof(Xamarin.Forms.Maps.UWP.MapRenderer).GetTypeInfo().Assembly };
Xamarin.Forms.Forms.Init(e, assembliesToInclude);
Bu kod, sınıfının bulunduğu derlemeyi Xamarin.Forms.Maps.UWP.MapRenderer yöntemine Forms.Init geçirir. Bu, derlemenin .NET yerel derleme işlemi tarafından yürütülebilir dosyadan bağlanmamasını sağlar.
Önemli
Bunun yapılmaması, yayın derlemesi çalıştırılırken denetimin Map görünmemesine neden olur.

