Вступление
Одним из наиболее эффективных маркетинговых инструментов, безусловно, из уст в уста. Социальное доказательство является очень мощным стимулом, когда дело доходит до принятия решений. В то время как люди легко игнорируют традиционную рекламу, мало кто склонен игнорировать советы из надежного источника, такого как друг.
В 2011 году Google и Ipsos OTX провели опрос, который показал интересные результаты. Если рекомендации дополняются купонами на скидку, которые получатели могут использовать, вероятность того, что они загрузят приложение или снова начнут его использовать, будет гораздо выше. Это то, что разработчики и издатели приложений могут иметь в виду.
Правда в том, что очень немногие издатели и разработчики мобильных приложений используют реферальную систему, основанную на рекомендациях. Причина почти всегда техническая. Отслеживание кодов скидок, реализация глубоких ссылок в приложениях и настройка бэкенда — вот некоторые из препятствий, которые разработчики должны преодолеть, чтобы сделать эту работу. В результате большинство людей не беспокоятся и не сдаются.
К счастью, Google разработал систему, которая преодолевает эти препятствия, App Invites . Благодаря App Invites Google предлагает мощный интерфейс, с помощью которого разработчики могут расширять аудиторию своих мобильных приложений, позволяя существующим пользователям приглашать своих контактов, чтобы попробовать приложение.
Приложение Invites включено в сервисы Google Play, а также доступно на iOS. Он оптимизирует скорость установки вашего приложения за счет уменьшения трения и предоставления некоторого контекста, такого как общая информация о приложении и его оценка в магазине приложений, на каждом этапе потока приглашений пользователей.
В этом уроке я покажу вам, как реализовать этот мощный инструмент в вашем собственном приложении для Android.
1. Настройка проекта
Шаг 1: Создать проект
Я буду использовать очень простой проект, чтобы показать вам, как делиться приглашениями для вашего приложения. Первое, что вам нужно сделать, это создать новый проект. В Android Studio выберите « Файл»> «Создать»> «Новый проект» . Назовите свое приложение и настройте веб-домен своей компании, чтобы Android Studio могла определить имя пакета вашего приложения.
Минимальная версия SDK, которую может поддерживать приложение, может быть не ниже Android Gingerbread (уровень API 9). Это означает, что вы можете ориентироваться практически на каждое устройство под управлением Android, 99,97% на момент написания. Однако следует помнить, что App Invites работает только на устройствах с Google Play Store, поскольку он основан на плагине сервисов Google Play.
Создайте пустой Activity
и назовите его MainActivity.java .
Шаг 2. Добавление сервисов Google Play и библиотек поддержки
Открыв новый проект в Android Studio, откройте вкладку Project слева и разверните Gradle Scripts . Он содержит два файла с одинаковым именем build.gradle . Первый файл — это build.gradle верхнего уровня . Второй файл — это уровень приложения build.gradle .
Откройте 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 . Давайте исправим это сейчас.
2. Добавить файл конфигурации
Шаг 1. Посетите Google Developer Platform
Вам необходимо посетить веб-сайт разработчиков Google, чтобы включить службы Google для вашего приложения. Затем проект добавляется в вашу личную консоль разработчика, что означает, что вы должны пройти аутентификацию пользователя Google, прежде чем продолжить.
Введите имя, которое вы выбрали для своего приложения, и укажите имя пакета. Если вы не помните имя пакета приложения, откройте на уровне приложения build.gradle . Вы можете найти его в defaultConfig> applicationId .
Заполните оставшуюся часть формы и нажмите кнопку внизу с надписью Выбрать и настроить службы .
Шаг 2. Создание отпечатка пальца сертификата
Следующая часть немного сложнее. Google запросит у вас отпечаток сертификата. Чтобы получить отпечаток сертификата, вам нужно открыть командную строку и выполнить следующую команду.
1
2
|
keytool -exportcert -list -v \
-alias <your-key-name> -keystore <path-to-production-keystore>
|
Есть два возможных сценария:
- Вы тестируете свое приложение локально.
- Вы развертываете APK на консоли разработчика Google Play .
Если вы тестируете свое приложение локально, имя ключа — 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.
|
Однако, если вам нужен отпечаток сертификата выпуска , вам нужно указать имя сертификата, местоположение и пароль.
Шаг 3: Добавить файл конфигурации
После ввода отпечатка сертификата вы можете включить приглашения в приложение, нажав кнопку « Включить приглашения в приложение» внизу. Теперь вы сможете загрузить файл конфигурации, нажав Download google-services.json .
Чтобы выполнить этот шаг, скопируйте загруженный файл в каталог app / или mobile / вашего проекта.
3. Отправка приглашений
Шаг 1: определить макет
С настроенным проектом мы готовы к следующему шагу. Для 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
появляется настраиваемое действие, которое позволяет пользователю выбрать способ отправки приглашения (по электронной почте или в виде текстового сообщения), сообщения о приглашении и получателей.
Намерение начинается с вызова 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»);
}
}
}
|
4. Глубокая связь
Шаг 1. Отправка данных о глубоких ссылках
Когда пользователь получает приглашение и щелкает по включенной ссылке, поток приглашения разветвляется в зависимости от того, установлено ли уже приложение на смартфоне получателя. Если приложение уже присутствует, оно автоматически получит 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();
|
Шаг 2. Фильтрация намерений для пользовательских URL
Первое, что вам нужно сделать для обработки пользовательских глубоких ссылок, это рассказать вашему приложению, как они сделаны и какие 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();
|
Шаг 3: Получение и анализ Deep Link
Чтобы проверить приглашения и запустить глубокую ссылку 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 Play. Этот инструмент позволяет увеличить аудиторию вашего приложения, позволяя пользователям отправлять приглашения своим контактам в Google. Теперь вы сможете разработать реферальную систему, используя приглашения приложений, позволяя пользователям рекомендовать ваше приложение своим друзьям с помощью персонализированных контекстных приглашений.