При разработке приложений для iOS и Android с помощью Xamarin разработчики могут обращаться к любым нативным API, используя C#. Эти привязки не только помогают использовать соответствующие API в C#, но и предоставляют мощные функции этого языка, такие как async/await, события, делегаты и т. д.
Это огромное преимущество для разработчиков, потому что им никогда не придется работать вне C#, независимо от того, пишут ли они общую бизнес-логику, пользовательский интерфейс или получают доступ к нативным функциям. Одна из ключевых особенностей, которую часто хотят видеть программисты при разработке кросс-платформенных приложений на Xamarin, — это способность получать доступ к распространенным нативным функциям из общего кода без необходимости писать свои собственные слои абстракций или находить плагин в свободном доступе, созданный сообществом.
Xamarin.Essentials воплощает в реальность мечту о едином API для доступа к таким функциям, как геолокация, показания датчиков, безопасное хранилище и т. д., для любого приложения, созданного на Xamarin!
Интерфейсы API в Xamarin.Essentials
В ознакомительной версии, доступной уже сегодня, API-интерфейсы Xamarin.Essentials предоставляют доступ более чем к 25 нативным функциям из единой кросс-платформенной библиотеки API, к которой можно получить доступ из общего кода независимо от того, как создается пользовательский интерфейс. Это значит, что вы можете использовать API Xamarin.Essentials с помощью единственного приложения Xamarin.Android или приложения Xamarin.Forms, адаптированного для работы с iOS, Android и UWP. Несмотря на большое количество функций, эта библиотека полностью оптимизирована для максимально быстрой работы и минимального влияния на размер приложения, поскольку она защищена от компоновщика. Это говорит о том, что в ваше приложение будут включены только API и функции, которые вы используете, а все остальное будет удалено во время компиляции.
Ознакомительную версию библиотеки, в которой используется базовый набор кросс-платформенных API, можно установить в ваше приложение через NuGet:
- Акселерометр: получение данных об ускорении движения устройства в трехмерном пространстве.
- Информация о приложении: возможность получить информацию о приложении.
- Батарея: определение уровня заряда батареи, источника питания и его состояния.
- Буфер обмена: легкое и быстрое редактирование или чтение текста в буфере обмена.
- Компас: отслеживание изменений положения по компасу.
- Подключение: отслеживание состояния подключения и его изменений.
- Передача данных: отправка текста и Uri веб-сайта другим приложениям.
- Информация об экране устройства: получение показателей экрана устройства и его ориентации.
- Информация об устройстве: легкое получение информации об устройстве.
- Электронная почта: легкая отправка сообщений по электронной почте.
- Помощники по файловой системе: легкое сохранение файлов в данные приложения.
- Фонарик: простой способ включения/выключения фонарика.
- Геокодирование: легкое прямое и обратное геокодирование.
- Геолокация: получение информации о местоположении устройства по GPS.
- Гироскоп: получение информации о вращении устройства по трем основным осям.
- Магнитометр: определение ориентации устройства относительно магнитного поля Земли.
- Открытие браузера: быстрое и легкое открытие браузера с переходом на определенный веб-сайт.
- Телефонный набор: открытие панели для набора телефонного номера.
- Настройки: быстрое и легкое изменение постоянных настроек.
- Блокировка экрана: предотвращение блокировки экрана устройства.
- Безопасное хранилище: безопасное хранение данных.
- SMS: легкая отправка СМС-сообщений.
- Преобразование текста в речь: озвучивание текста на устройстве.
- Отслеживание версий: отслеживание версии приложения и номера сборки.
- Вибрация: включение вибрации устройства.
Начальный набор API был определен на основе отзывов от разработчиков Xamarin о том, какие функции они хотели бы видеть в кросс-платформенной библиотеке API. Со временем мы будем расширять этот список.
Начало работы
Начать использовать API Xamarin.Essentials легко в любом существующем приложении, выполнив всего несколько простых шагов:
1. Откройте существующий проект или создайте новый, используя шаблон Blank App в Visual Studio C# (для Android, iPhone и iPad или кросс-платформенный).
2. Добавьте пакет Xamarin.Essentials NuGet к проекту:
- Visual Studio. В панели Solution Explorer щелкните правой кнопкой мыши на название решения и выберите Manage NuGet Packages. Найдите Xamarin.Essentials и установите пакет во ВСЕ проекты, включая iOS, Android, UWP и .NET Standard Libraries.
- Visual Studio для Mac. В панели Solution Explorer щелкните правой кнопкой мыши на название проекта и выберите Добавить > Добавить пакеты NuGet… Найдите Xamarin.Essentials и установите пакет во ВСЕ проекты, включая iOS, Android и .NET Standard Libraries.
3. Добавьте ссылку на Xamarin.Essentials в любом из классов C#, чтобы ссылаться на API.
using Xamarin.Essentials;
4. Xamarin.Essentials требует небольшой дополнительной настройки под проекты Android, чтобы получить доступ к специальным функциям:
Xamarin.Essentials необходимо инициализировать с помощью метода OnCreate в рамках MainLauncher или любого другого Activity в проекте Android:
Xamarin.Essentials.Platform.Init(this, bundle);
Чтобы обрабатывать разрешения среды выполнения на Android, Xamarin.Essentials должна получить любой OnRequestPermissionsResult. Добавьте следующий код ко всем классам Activity:
public override void OnRequestPermissionsResult(int requestCode, string[] permissions, [GeneratedEnum] Android.Content.PM.Permission[] grantResults)
{
Xamarin.Essentials.Platform.OnRequestPermissionsResult(requestCode, permissions, grantResults);
base.OnRequestPermissionsResult(requestCode, permissions, grantResults);
}
Готово! Теперь вы можете начать использовать API Xamarin.Essentials в своем приложении. К каждому API прилагается полная документация, включая фрагменты кода, которые вы можете скопировать в свое приложение.
Обязательно прочитайте наше Руководство по началу работы для получения дополнительной информации.
Сборка компаса
Во время одного из моих выступлений на Microsoft Build 2018 я показал, как объединить возможности API Xamarin.Forms и Xamarin.Essentials, чтобы собрать кросс-платформенный компас менее чем за 10 минут. Это так же просто, как и добавить несколько изображений и небольшой пользовательский интерфейс для компаса в приложении:
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Image HorizontalOptions="FillAndExpand"
VerticalOptions="FillAndExpand"
Source="compass.png"/>
<Image HorizontalOptions="Center"
VerticalOptions="Center"
Source="arrow.png"
x:Name="ImageArrow"/>
<Label Grid.Row="1"
x:Name="LabelInfo"
VerticalOptions="Center"
HorizontalOptions="Center" />
</Grid>
Я смог использовать API компаса из Xamarin.Essentials в коде выше, чтобы регистрировать события, когда компас изменяет положение, обновлять текст метки и поворачивать изображение. Все это делается несколькими строками кода:
using Xamarin.Forms;
using Xamarin.Essentials;
namespace MyCompass
{
public partial class MainPage : ContentPage
{
public MainPage()
{
InitializeComponent();
// Register for reading changes
Compass.ReadingChanged += Compass_ReadingChanged;
}
void Compass_ReadingChanged(CompassChangedEventArgs e)
{
LabelInfo.Text = $"Heading: {e.Reading.HeadingMagneticNorth}";
ImageArrow.Rotation = e.Reading.HeadingMagneticNorth;
}
protected override void OnAppearing()
{
base.OnAppearing();
Compass.Start(SensorSpeed.Ui);
}
protected override void OnDisappearing()
{
base.OnDisappearing();
Compass.Stop();
}
}
}
Вот таким простым образом создается приложение-компас! Вы можете найти полный исходный код и изображения на GitHub.
Планы на будущее
Xamarin.Essentials тщательно тестировался, но мы, тем не менее, просим вас оставлять отзывы и во время действия нашей ознакомительной версии. Опробуйте библиотеку в своих приложениях и сообщите о любых проблемах, с которыми столкнетесь в работе с репозиторием Xamarin.Essentials GitHub.
Мы рассматриваем эту библиотеку как главный элемент платформы Xamarin и знаем, что это важный стандартный блок для всех разработчиков и приложений. Поэтому мы будем интегрировать пакет Xamarin.Essentials NuGet в каждый шаблон iOS, Android и Xamarin.Forms в Visual Studio и Visual Studio для Mac, чтобы разработчики имели доступ к этим API с самых первых этапов своих проектов.
Увидеть своими глазами
Вы можете увидеть полный обзор Xamarin, Xamarin.Forms и Xamarin.Essentials в рамках выступления «Создание мобильных приложений с помощью Visual Studio и Xamarin» на Microsoft Build 2018.
Дополнительная информация
Вы можете просмотреть нашу документацию, содержащую полное руководство по началу работы и использованию каждой функции Xamarin.Essentials. Мы также предоставили полный список ссылок на API, который можно просмотреть в Интернете, чтобы узнать обо всех деталях интерфейсов API Xamarin.Essentials.
Комментарии (5)
Marwin
28.06.2018 16:43Я в восторге от Xamarin… У нас есть веб-проект: реакт + c# api на бэкэнде. Встал вопрос о написании мобильного приложения. Нарисовали экраны, запросили оценку стоимости ios разработки у десятка фирм — все давали около миллиона. СНГ фирмы давали 600-700. Я, бэкэндщик… решил сам поглядеть какой там прогресс в Xamarin, создал проект… ctrc+с / ctrl+v из своего апи 2/3 кода для модели данных… еще немного копипасты XAML экранов из админской WPF программы и ЗА НЕДЕЛЮ я сделал 100% функциональное полноценное приложение с выкладыванием в аппстор. Даже мак покупать не пришлось… Виртуалка с macos для компила в фоне норм работает… особо хлеба не просит. А ведь еще и андроид можно собрать в пару кликов плюс чуть поколдовать с картинками-ресурсами
SellerOfSmiles
29.06.2018 09:27Да конечно единые инструменты в IT это плохо! Чем же тогда будут «опускать» кандидатов на собеседованиях? :)
Sazonov
Жаль, что для C++ пока безальтернативный вариант — это QtCreator (для действительно кросс-платформенной разработки).
Из всех IDE мне больше всего нравится Visual Studio, но её так просто не портируешь, слишком много завязано на ком и винапи.
domix32
Глядишь Visual Studio Code подтянется однажды
Sazonov
Увы, это не то. Сильно допиленный Atom. К тому же не понятно, как он будет вести себя на больших проектах. В том числе сомневаюсь, что под него появятся достойные профилировщики. CLion сильно позже стартанул и по мне так уже куда удобнее. Жаль только, что платный.