Подключаем Yandex.Metrica в Xamarin.Android

в 3:09, , рубрики: Песочница, метки: , , ,

Привет!

Недавно мне понадобилось подключить систему для сбора данных о действиях пользователей и мой выбор пал на Yandex.Metrica для приложений. И я с удивлением обнаружил, что нет не одной инструкции, как подключить метрику в приложение, которое написано на Xamarin.

Всем, кому интересно как это сделать — прошу пожаловать под кат.

1. Создаём приложение

Подключаем Yandex.Metrica в Xamarin.Android - 1

2. Загружаем библиотеку для работы с метрикой

Загружаем отсюда yandex-mobmetrica-lib-android-1.60-wlibs.jar.

3. Создаём binding library

Подключаем Yandex.Metrica в Xamarin.Android - 2

4. Добавляем в проект скачанную библиотеку

Добавляем в папку Jars скачанную библиотеку:

Подключаем Yandex.Metrica в Xamarin.Android - 3

Выставляем Build Action: EmbeddedJar.

Подключаем Yandex.Metrica в Xamarin.Android - 4

5. Добавляем в основной проект ссылку на только что созданный проект

Подключаем Yandex.Metrica в Xamarin.Android - 5

6. Создаём в папке Providers файл MetricaContentProvider.cs с таким содержанием:

namespace HabrYandexMetrica.Providers
{
    public class MetricaContentProvider : Com.Yandex.Metrica.MetricaContentProvider
    {
    }
}

7. Добавляем в AndroidManifest.xml такие строчки:

  <!-- Yandex Metrica required permission. Open network sockets -->
  <uses-permission android:name="android.permission.INTERNET"/>
  <!-- Yandex Metrica required permission. Access information about networks -->
  <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
  <!-- Yandex Metrica optional permission. Approximate location derived from network location sources such as cell towers and Wi-Fi -->
  <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
  <!-- Yandex Metrica optional permission. Precise location from location sources such as GPS, cell towers, and Wi-Fi -->
  <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
  <!-- Yandex Metrica optional permission. Wifi state: mac, ssid, ... -->
  <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
  
	<application>
		<!-- start of Yandex Metrica -->
		<service android:name="com.yandex.metrica.MetricaService" android:enabled="true" android:exported="true" android:process=":Metrica">
			<intent-filter>
				<category android:name="android.intent.category.DEFAULT" />
				<action android:name="com.yandex.metrica.IMetricaService" />
				<data android:scheme="metrica" />
			</intent-filter>
			<meta-data android:name="metrica:api:level" android:value="16" />
		</service>
		<receiver android:name="com.yandex.metrica.MetricaEventHandler" android:enabled="true" android:exported="true">
			<intent-filter>
				<action android:name="com.yandex.metrica.intent.action.SYNC" />
			</intent-filter>
			<intent-filter>
				<action android:name="android.intent.action.PACKAGE_ADDED" />
				<action android:name="android.intent.action.PACKAGE_DATA_CLEARED" />
				<data android:scheme="package" />
			</intent-filter>
			<!-- Необходимо для трэкинга кампаний -->
			<intent-filter>
				<action android:name="com.android.vending.INSTALL_REFERRER" />
			</intent-filter>
		</receiver>
		<provider android:name="habryandexmetrica.providers.MetricaContentProvider" android:authorities="HabrYandexMetrica.HabrYandexMetrica.MetricaContentProvider" android:enabled="true" android:exported="true"/>
    <!-- end of Yandex Metrica -->
	</application>

8. Инициализируем мертику в MainActivity

using System;
using Android.App;
using Android.Content;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using Android.OS;
using Com.Yandex.Metrica;

namespace HabrYandexMetrica
{
    [Activity(Label = "HabrYandexMetrica", MainLauncher = true, Icon = "@drawable/icon")]
    public class MainActivity : Activity
    {
        protected override void OnCreate(Bundle bundle)
        {
            base.OnCreate(bundle);
            YandexMetrica.Initialize(Application.Context,"111");

            SetContentView(Resource.Layout.Main);
        }

        protected override void OnResume()
        {
            YandexMetrica.OnResumeActivity(this);
            base.OnResume();
        }

        protected override void OnPause()
        {
            YandexMetrica.OnPauseActivity(this);
            base.OnPause();
        }
    }
}

Всё, метрика готова к работе.

Тут можно подсмотреть методы, которые доступны.

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js