Статьи

Как увеличить аудиторию с помощью приложений Google

Конечный продукт
Что вы будете создавать

Одним из наиболее эффективных маркетинговых инструментов, безусловно, из уст в уста. Социальное доказательство является очень мощным стимулом, когда дело доходит до принятия решений. В то время как люди легко игнорируют традиционную рекламу, мало кто склонен игнорировать советы из надежного источника, такого как друг.

В 2011 году Google и Ipsos OTX провели опрос, который показал интересные результаты. Если рекомендации дополняются купонами на скидку, которые получатели могут использовать, вероятность того, что они загрузят приложение или снова начнут его использовать, будет гораздо выше. Это то, что разработчики и издатели приложений могут иметь в виду.

Правда в том, что очень немногие издатели и разработчики мобильных приложений используют реферальную систему, основанную на рекомендациях. Причина почти всегда техническая. Отслеживание кодов скидок, реализация глубоких ссылок в приложениях и настройка бэкенда — вот некоторые из препятствий, которые разработчики должны преодолеть, чтобы сделать эту работу. В результате большинство людей не беспокоятся и не сдаются.

К счастью, Google разработал систему, которая преодолевает эти препятствия, App Invites . Благодаря App Invites Google предлагает мощный интерфейс, с помощью которого разработчики могут расширять аудиторию своих мобильных приложений, позволяя существующим пользователям приглашать своих контактов, чтобы попробовать приложение.

Приложение Invites включено в сервисы Google Play, а также доступно на iOS. Он оптимизирует скорость установки вашего приложения за счет уменьшения трения и предоставления некоторого контекста, такого как общая информация о приложении и его оценка в магазине приложений, на каждом этапе потока приглашений пользователей.

В этом уроке я покажу вам, как реализовать этот мощный инструмент в вашем собственном приложении для Android.

Я буду использовать очень простой проект, чтобы показать вам, как делиться приглашениями для вашего приложения. Первое, что вам нужно сделать, это создать новый проект. В Android Studio выберите « Файл»> «Создать»> «Новый проект» . Назовите свое приложение и настройте веб-домен своей компании, чтобы Android Studio могла определить имя пакета вашего приложения.

Минимальная версия SDK, которую может поддерживать приложение, может быть не ниже Android Gingerbread (уровень API 9). Это означает, что вы можете ориентироваться практически на каждое устройство под управлением Android, 99,97% на момент написания. Однако следует помнить, что App Invites работает только на устройствах с Google Play Store, поскольку он основан на плагине сервисов Google Play.

Создайте пустой Activity и назовите его MainActivity.java .

Открыв новый проект в Android Studio, откройте вкладку Project слева и разверните Gradle Scripts . Он содержит два файла с одинаковым именем build.gradle . Первый файл — это build.gradle верхнего уровня . Второй файл — это уровень приложения build.gradle .

Скрипты Gradle в Android Studio

Откройте build.gradle верхнего уровня и добавьте следующий путь к classpath для сервисов Google Play.

1
classpath ‘com.google.gms:google-services:1.5.0-beta2’

Откройте на уровне приложения build.gradle и добавьте в него следующие зависимости компиляции.

1
2
3
compile ‘com.android.support:support-v4:23.1.1’
compile ‘com.android.support:design:23.1.1’
compile ‘com.google.android.gms:play-services:8.3.0’

Чтобы включить плагин для сервисов Google Play, добавьте следующую строку ниже, apply plugin: 'com.android.application' .

1
apply plugin: ‘com.google.gms.google-services’

Android Studio попросит вас синхронизировать файлы проекта. Однако перед этим откройте AndroidManifest.xml и добавьте версию служб Google Play в тег application .

1
2
3
<meta-data
   android:name=»com.google.android.gms.version»
   android:value=»@integer/google_play_services_version» />

Сохраните изменения и нажмите « Синхронизировать сейчас» . Мы еще не закончили. Android Studio выдаст ошибку, сообщающую, что для подключаемого модуля служб Google Play требуется файл конфигурации google-services.json . Давайте исправим это сейчас.

Ошибка плагина Google Services

Вам необходимо посетить веб-сайт разработчиков Google, чтобы включить службы Google для вашего приложения. Затем проект добавляется в вашу личную консоль разработчика, что означает, что вы должны пройти аутентификацию пользователя Google, прежде чем продолжить.

Введите имя, которое вы выбрали для своего приложения, и укажите имя пакета. Если вы не помните имя пакета приложения, откройте на уровне приложения build.gradle . Вы можете найти его в defaultConfig> applicationId .

Заполните оставшуюся часть формы и нажмите кнопку внизу с надписью Выбрать и настроить службы .

Платформа Google для разработчиков

Следующая часть немного сложнее. Google запросит у вас отпечаток сертификата. Чтобы получить отпечаток сертификата, вам нужно открыть командную строку и выполнить следующую команду.

1
2
keytool -exportcert -list -v \
-alias <your-key-name> -keystore <path-to-production-keystore>

Есть два возможных сценария:

Если вы тестируете свое приложение локально, имя ключа — androiddebugekey а его местоположение по умолчанию — %USERPROFILE%\.android\debug.keystore в Windows и ~/.android/debug.keystore в системах Unix, таких как OS X и Linux. , Вот как выглядит команда для локального тестирования.

1
2
keytool -exportcert -list -v \
-alias androiddebugkey -keystore ~/.android/debug.keystore

Утилита keytool предложит вам ввести пароль. Пароль по умолчанию для хранилища ключей отладки — Android . Это даст отпечаток SHA1 вашего сертификата отладки, который выглядит примерно так.

1
Certificate fingerprint: SHA1: DA:39:A3:EE:5E:6B:4B:0D:32:55:BF:EF:95:60:1H:90:AF:D8:07:09.

Однако, если вам нужен отпечаток сертификата выпуска , вам нужно указать имя сертификата, местоположение и пароль.

Приложение приглашает на платформу Google Developer

После ввода отпечатка сертификата вы можете включить приглашения в приложение, нажав кнопку « Включить приглашения в приложение» внизу. Теперь вы сможете загрузить файл конфигурации, нажав Download google-services.json .

Чтобы выполнить этот шаг, скопируйте загруженный файл в каталог app / или mobile / вашего проекта.

Файл конфигурации плагина Google Services

С настроенным проектом мы готовы к следующему шагу. Для Activity запуска определите простой макет, подобный показанному ниже. Он содержит кнопку и метку.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<?xml version=»1.0″ encoding=»utf-8″?>
<RelativeLayout xmlns:android=»https://schemas.android.com/apk/res/android»
    xmlns:tools=»http://schemas.android.com/tools»
    android:id=»@+id/container»
    android:layout_width=»match_parent»
    android:layout_height=»match_parent»
    android:paddingLeft=»@dimen/activity_horizontal_margin»
    android:paddingRight=»@dimen/activity_horizontal_margin»
    android:paddingTop=»@dimen/activity_vertical_margin»
    android:paddingBottom=»@dimen/activity_vertical_margin» tools:context=».MainActivity»>
 
    <TextView
        android:id=»@+id/title»
        android:layout_width=»wrap_content»
        android:layout_height=»wrap_content»
        android:layout_centerInParent=»true»
        android:gravity=»center»
        android:text=»Hi.»
        android:textAppearance=»@style/TextAppearance.AppCompat.Title»
        android:textSize=»45sp» />
 
    <Button
        android:id=»@+id/invite»
        android:layout_width=»wrap_content»
        android:layout_height=»wrap_content»
        android:layout_centerHorizontal=»true»
        android:layout_alignParentBottom=»true»
        android:layout_marginBottom=»100dp»
        android:colorButtonNormal=»#3F51B5″
        android:text=»Wanna bring in your friends?»/>
 
</RelativeLayout>

Результат должен выглядеть следующим образом.

Запустить макет действий

В методе MainActivity класса MainActivity добавьте onCreateListener к кнопке.

1
2
3
4
5
6
7
button = findViewById(R.id.invite);
button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        // do something, will you?
    }
});

Приглашение будет отправлено в качестве Intent . Вы можете указать сообщение, которое пользователи могут настроить перед отправкой приглашений своим друзьям. Вы также можете установить призыв к действию, фоновое изображение и глубокую ссылку, которую ваше приложение сможет обработать после получения приглашения. Вы даже можете определить минимальную версию SDK ( setAndroidMinimumVersionCode ) и идентификатор целевого приложения для других платформ, таких как iOS ( setOtherPlatformsTargetApplication ).

Создайте Intent в теле метода onClick .

1
2
3
4
5
Intent intent = new AppInviteInvitation.IntentBuilder(INVITATION_TITLE)
        .setMessage(INVITATION_MESSAGE)
        .setCallToActionText(INVITATION_CALL_TO_ACTION)
        .build();
startActivityForResult(intent, REQUEST_INVITE);

Добавьте следующие строки, чтобы все это работало.

1
2
3
4
private static final
       String INVITATION_TITLE = «Call your friends»,
           INVITATION_MESSAGE = «Hey! Would you like to get a 50% discount for this awesome app? :)»,
           INVITATION_CALL_TO_ACTION = «Share»;

Это все, что нужно сделать. При запуске Intent появляется настраиваемое действие, которое позволяет пользователю выбрать способ отправки приглашения (по электронной почте или в виде текстового сообщения), сообщения о приглашении и получателей.

Экран приглашения Google App приглашений

Намерение начинается с вызова startActivityForResult . Можно получить результат намерения. После того, как пользователь нажал кнопку «Отправить», он возвращается к действию, которое начало намерение. В этот момент вы можете делать все, что необходимо в onActivityResult , например, скрывать кнопку или отслеживать приглашения с помощью аналитики.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
 
    if (requestCode == REQUEST_INVITE) {
        if (resultCode == RESULT_OK) {
             
            // You successfully sent the invite,
            // we can dismiss the button.
            button.setVisibility(View.GONE);
 
            String[] ids = AppInviteInvitation.getInvitationIds(resultCode, data);
            StringBuilder sb = new StringBuilder();
            sb.append(«Sent «).append(Integer.toString(ids.length)).append(» invitations: «);
            for (String id : ids) sb.append(«[«).append(id).append(«]»);
            Log.d(getString(R.string.app_name), sb.toString());
         
        } else {
            // Sending failed or it was canceled using the back button
            showMessage(«Sorry, I wasn’t able to send the invites»);
        }
    }
}

Когда пользователь получает приглашение и щелкает по включенной ссылке, поток приглашения разветвляется в зависимости от того, установлено ли уже приложение на смартфоне получателя. Если приложение уже присутствует, оно автоматически получит Intent содержащее необязательные данные глубоких ссылок.

Однако, если у получателя не установлено приложение, ему предоставляется возможность сделать это. Когда приложение запускается впервые, оно получает Intent содержащее данные о глубоких ссылках. Таким образом, скидка, которую вы можете предоставить, всегда будет доступна получателю. Это преодолевает проблемы, о которых мы говорили ранее.

Давайте рассмотрим более глубокое связывание. Установите глубокую ссылку Intent мы создали в методе onCreate .

1
2
3
4
5
Intent intent = new AppInviteInvitation.IntentBuilder(INVITATION_TITLE)
               .setMessage(INVITATION_MESSAGE)
               .setDeepLink(Uri.parse(«tutsplus://code.coupon/50»))
               .setCallToActionText(INVITATION_CALL_TO_ACTION)
               .build();

Первое, что вам нужно сделать для обработки пользовательских глубоких ссылок, это рассказать вашему приложению, как они сделаны и какие Activity должны о них заботиться. Добавьте новый Activity в ваш проект и назовите его DetailsActivity .

Откройте AndroidManifest.xml и добавьте следующий фрагмент в <activity android:name=".DetailsActivity"> .

01
02
03
04
05
06
07
08
09
10
11
<intent-filter>
    <action android:name=»android.intent.action.VIEW» />
 
    <category android:name=»android.intent.category.DEFAULT» />
    <category android:name=»android.intent.category.BROWSABLE» />
 
    <data
        android:host=»code.coupon»
        android:scheme=»tutsplus» />
 
</intent-filter>

Мы говорим системе следующее. Если он вызывает действие VIEW для URL-адреса, схема которого является tutsplus, а хост — code.coupon , ваше приложение может обработать его с DetailsActivity класса DetailsActivity .

Чтобы получить и проанализировать пользовательский URL-адрес, сначала необходимо создать автоматически управляемый GoogleApiClient с доступом к GoogleApiClient приложения. Мы делаем это в методе MainActivity класса MainActivity .

01
02
03
04
05
06
07
08
09
10
GoogleApiClient googleApiClient = new GoogleApiClient.Builder(this)
       .addApi(AppInvite.API)
       .enableAutoManage(this, new GoogleApiClient.OnConnectionFailedListener() {
           @Override
           public void onConnectionFailed(ConnectionResult connectionResult) {
               Log.d(getString(R.string.app_name), «onConnectionFailed:» + connectionResult);
               showMessage(«Sorry, the connection has failed.»);
           }
       })
       .build();

Чтобы проверить приглашения и запустить глубокую ссылку Activity , вы можете использовать метод getInvitation , который был представлен в сервисах Google Play 8.3 . Добавьте следующий фрагмент кода в метод MainActivity класса MainActivity .

1
2
3
4
5
6
AppInvite.AppInviteApi.getInvitation(googleApiClient, this, true)
   .setResultCallback(
       new ResultCallback<AppInviteInvitationResult>() {
           @Override
           public void onResult(AppInviteInvitationResult result) {}
       });

Если для последнего параметра метода DetailsActivity значение true плагин автоматически вызывает действие, ответственное за обработку глубокой ссылки, в нашем примере класс DetailsActivity . По этой причине тело метода onResult пусто.

Откройте TextView activity_details.xml и добавьте два объекта TextView как показано ниже.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?xml version=»1.0″ encoding=»utf-8″?>
<RelativeLayout xmlns:android=»http://schemas.android.com/apk/res/android»
    xmlns:tools=»http://schemas.android.com/tools» android:layout_width=»match_parent»
    android:layout_height=»match_parent» android:paddingLeft=»@dimen/activity_horizontal_margin»
    android:paddingRight=»@dimen/activity_horizontal_margin»
    android:paddingTop=»@dimen/activity_vertical_margin»
    android:paddingBottom=»@dimen/activity_vertical_margin»
    tools:context=»com.tutsplus.code.appinvites.DetailsActivity»>
 
    <TextView
        android:layout_width=»wrap_content»
        android:layout_height=»wrap_content»
        android:layout_centerInParent=»true»
        android:gravity=»center»
        android:text=»Awesome!»
        android:textAppearance=»@style/TextAppearance.AppCompat.Title»
        android:textSize=»45sp» />
 
    <TextView
        android:id=»@+id/discount»
        android:layout_width=»wrap_content»
        android:layout_height=»wrap_content»
        android:layout_centerHorizontal=»true»
        android:layout_alignParentBottom=»true»
        android:layout_marginBottom=»100dp»
        android:gravity=»center»
        android:text=»You accepted the invitation, and this gives you the right to a %s percent discount :)»
        android:textAppearance=»@style/TextAppearance.AppCompat.Body1″
        android:textSize=»20sp» />
 
</RelativeLayout>

Затем откройте DetailsActivity и переопределите метод onStart . Чтобы проверить, содержит ли Intent данные глубоких ссылок, вы должны положиться на метод hasReferral . Разбор URL очень прост, как вы можете видеть ниже.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
@Override
protected void onStart() {
    super.onStart();
 
    Intent intent = getIntent();
    if (AppInviteReferral.hasReferral(intent)) {
        // Extract the information from the Intent
        String deepLink = AppInviteReferral.getDeepLink(intent);
        Log.d(getString(R.string.app_name),
                «Found Referral: » + AppInviteReferral.getInvitationId(intent) + «:» + deepLink);
 
        String[] array = deepLink.split(«/»);
 
        if (array.length > 0) {
            TextView tv = (TextView) findViewById(R.id.discount);
            tv.setText(String.format(tv.getText().toString(), array[array.length-1]));
        }
    }
}

Google App предлагает глубокие ссылки

Из этой статьи вы узнали, как реализовать приглашения Google App в своем приложении с помощью плагина служб Google Play. Этот инструмент позволяет увеличить аудиторию вашего приложения, позволяя пользователям отправлять приглашения своим контактам в Google. Теперь вы сможете разработать реферальную систему, используя приглашения приложений, позволяя пользователям рекомендовать ваше приложение своим друзьям с помощью персонализированных контекстных приглашений.