Введение
Приложения можно продвигать самыми разными способами. Одним из таких способов является реферальный маркетинг. Этот вид маркетинга заключается в том, что информация о приложении будет распространяться не через рекламные сети, а от существующих пользователей к потенциальным.
Таким образом, использование реферального маркетинга может быть крайне полезно потому, что человек с большей вероятностью будет прислушиваться к мнению своих друзей, родных или близких, чем к объявлениям в рекламе. Например, пользователь, который скачал приложение и остался им доволен, сможет не только посоветовать приложение другим людям, но и дать так называемую реферальную ссылку, по которой будущие пользователи смогут напрямую перейти в магазин и установить приложение себе на устройство. Это придаёт продвижению некоторую “вирусность”, что в данном случае пойдёт только на пользу.
В сети есть множество способов по реализации реферальных ссылок в приложениях, одно из них мы рассмотрели в предыдущей статье. В этой же хочется рассказать о таком инструменте, как Branch.io, который позволяет создавать быстрые ссылки, отслеживать переходы по реферальным, а также собирать аналитику по событиям в приложении.
Начало работы в Branch
Перед тем, как приступить к добавлению нужных инструментов в приложение, нужно зарегистрировать аккаунт и приложение в Branch. Для данной статьи мы будем добавлять реферальные ссылки в одно из наших приложений, русско-бурятский словарь Бурдик.
Как только вы зарегистрируете свой аккаунт, вам предложат придумать доменное имя для своих быстрых ссылок.
Имя можно выбрать любое, главное, чтобы оно было информативным и понятным. Например, напишем burdic.app.link.
После этого нужно указать, есть ли у вашей компании сайт, а также выбрать, на каких платформах работает ваше приложение (iOS\Android) и дать ссылки на приложение в магазине.
Если у вас нет приложения на iOS, вы можете просто нажать No и пропустить этот шаг. Для Android же вам понадобится ввести название пакета, как оно указано в магазине, после чего приложение будет найдено.
Затем будет создана ваша первая быстрая ссылка, по которой вы сможете перейти или на ваш сайт, или в магазин, где находится приложение, в зависимости от того, что вы указали, а также от платформы. В будущем вы сможете отслеживать количество кликов по этой ссылке, или создавать больше быстрых ссылок для других целей.
Далее будет предложено добавить какую-либо информацию о приложении, а также указать схему URI, с помощью которой Branch будет открывать приложение. Её можно задать в формате вашеприложение://
Кроме того, на этой странице вы увидите инструкции по тому, как добавить Branch в свой проект и запустить его. Этот шаг можно пропустить сделать позднее, а сейчас перейти в панель управления.
На этом настройка на сайте завершена, и можно перейти к добавлению Branch в наше приложение. Если вы пропустили шаг с инструкциями и хотите их прочитать, вы можете на панели управления в меню нажать Set Up SDK.
Настройка Branch в приложении
Для начала вам нужно добавить библиотеку в зависимости проекта. Для этого откройте build.gradle модуля приложения и в блоке dependencies добавьте следующую строку.
dependencies {
compile 'io.branch.sdk.android:library:2.+'
}
Важно учесть, что для работы библиотеки требуется минимальная версия SDK проекта 15. Если у вас указана версия ниже, вы должны либо повысить версию, либо добавить в проект библиотеку с версией не 2.+, а 1.14.5, однако функционал этой версии меньше, чем в актуальной.
Затем нужно в манифест приложения добавить необходимые теги. Откройте файл AndroidManifest.xml и добавьте в тег активности, на которой вы хотите запустить Branch, следующий код.
<intent-filter>
<data
android:host="open"
android:scheme="burdic"/>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>
</intent-filter>
Вот этот код нужно добавить в конец тега <application>.
<!-- Branch init -->
<meta-data
android:name="io.branch.sdk.BranchKey"
android:value="key_live_aayHr0iTQ8yDY3nT1SIfwbloDtjBsm4n"/>
<meta-data
android:name="io.branch.sdk.BranchKey.test"
android:value="key_test_ibrNsXcPO1uv3ZdH3TQgHbkeAzpyvmXz"/>
<!-- Branch testing (TestMode "true" to simulate fresh installs on dev environment) -->
<meta-data
android:name="io.branch.sdk.TestMode"
android:value="false"/>
<!-- Branch install referrer tracking -->
<receiver
android:name="io.branch.referral.InstallListener"
android:exported="true">
<intent-filter>
<action android:name="com.android.vending.INSTALL_REFERRER"/>
</intent-filter>
</receiver>
Теперь нам нужно добавить в класс, наследующий от Application. Если у вас его нет, его можно легко создать, для этого в манифесте у тега <application> добавьте атрибут android:name=”Имя класса”. Поставьте курсор на имени класса и нажмите Alt + Enter, выберите Create class и Android Studio сама всё сделает.
В классе Application в метод onCreate() добавьте следующую строку.
Branch.getAutoInstance(this);
Затем в классе активности, для которой мы подключали в манифесте Branch, нужно добавить в метод onStart() следующий код, отвечающий за инициализацию библиотеки.
branch = Branch.getInstance();
branch.initSession(new Branch.BranchReferralInitListener() {
@Override public void onInitFinished(JSONObject referringParams, BranchError error) {
if (error == null) {
// выполняем нужные операции
} else {
// обрабатываем ошибку
}
}
}, this.getIntent().getData(), this);
Кроме того, в классе активности нужно будет переопределить метод onNewIntent().
@Override public void onNewIntent(Intent intent) {
this.setIntent(intent);
}
На этом настройка окончена, теперь при запуске или установке приложения в панели управления Branch на вкладке Liveview можно увидеть данные об устройстве, на котором запущено приложение, а также время и некоторую другую информацию.
Подключение реферальных ссылок
Сейчас в приложении есть кнопка “Поделиться”, с помощью которой можно отправить простое сообщение кому-либо. Изменить принцип её работы, добавив в неё создание и отправку реферальной ссылки.
При нажатии на “Поделиться”, пользователь увидит диалоговое окно с просьбой ввести своё имя.
Это имя впоследствии будет указано у человека, который установит себе приложение по созданной реферальной ссылке. Код диалогового окна выглядит следующим образом.
AlertDialog.Builder builder = new AlertDialog.Builder(this);
LayoutInflater layoutInflater = LayoutInflater.from(this);
View view = layoutInflater.inflate(R.layout.dialog_referral, null);
builder.setView(view);
final EditText editText = view.findViewById(R.id.et_name);
builder.setTitle(R.string.dialog_share);
builder.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() {
@Override public void onClick(DialogInterface dialogInterface, int i) {
dialogInterface.dismiss();
}
});
builder.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
@Override public void onClick(DialogInterface dialogInterface, int i) {
if (!editText.getText().toString().isEmpty()) {
genLink(editText.getText().toString());
} else {
Toast.makeText(MainActivity.this, R.string.error_referral_name, Toast.LENGTH_LONG).show();
}
}
});
builder.show();
}
Если поле заполнено и нажата кнопка ОК, запустится метод genLink(), создающий реферальную ссылку. Код метода представлен ниже.
private void genLink(@NonNull String name) {
BranchUniversalObject branchUniversalObject =
new BranchUniversalObject().setCanonicalIdentifier("item/12345")
.setTitle(getString(R.string.app_name))
.setContentDescription(getString(R.string.app_description))
.setContentImageUrl(
"https://lh4.ggpht.com/Zkxyl6niWgFzgiFHSEE1RS-3zGAbkC2FpEDk47d-yxq8Jtt9qu62Z8DZGhOXN2BvYg=w300-rw")
.setContentIndexingMode(BranchUniversalObject.CONTENT_INDEX_MODE.PUBLIC)
.setContentMetadata(new ContentMetadata().addCustomMetadata("referredBy", name));
LinkProperties linkProperties = new LinkProperties().setChannel("facebook")
.setFeature("sharing")
.addControlParameter("$desktop_url",
"https://play.google.com/store/apps/details?id=com.rusdelphi.burdic_lite")
.addControlParameter("$android_url",
"https://play.google.com/store/apps/details?id=com.rusdelphi.burdic_lite");
ShareSheetStyle shareSheetStyle =
new ShareSheetStyle(MainActivity.this, getString(R.string.share_title),
getString(R.string.share_message)).setCopyUrlStyle(
getResources().getDrawable(android.R.drawable.ic_menu_send), getString(R.string.copy),
getString(R.string.added_to_clipboard))
.setMoreOptionStyle(getResources().getDrawable(android.R.drawable.ic_menu_search),
getString(R.string.show_more))
.addPreferredSharingOption(SharingHelper.SHARE_WITH.FACEBOOK)
.addPreferredSharingOption(SharingHelper.SHARE_WITH.EMAIL)
.setAsFullWidthStyle(true)
.setSharingTitle(getString(R.string.share_to));
branchUniversalObject.showShareSheet(this, linkProperties, shareSheetStyle,
new Branch.BranchLinkShareListener() {
@Override public void onShareLinkDialogLaunched() {
}
@Override public void onShareLinkDialogDismissed() {
}
@Override public void onLinkShareResponse(String sharedLink, String sharedChannel,
BranchError error) {
}
@Override public void onChannelSelected(String channelName) {
}
}, new Branch.IChannelProperties() {
@Override public String getSharingTitleForChannel(String channel) {
return channel.contains("Messaging") ? "title for SMS"
: channel.contains("Slack") ? "title for slack"
: channel.contains("Gmail") ? "title for gmail" : null;
}
@Override public String getSharingMessageForChannel(String channel) {
return channel.contains("Messaging") ? "message for SMS"
: channel.contains("Slack") ? "message for slack"
: channel.contains("Gmail") ? "message for gmail" : null;
}
});
}
Здесь задаются такие данные, как название приложения, его краткое описание, ссылка на скачивание, а также имя из диалогового окна. В результате выполнения метода пользователю будут предложены приложения на его устройстве, с помощью которых он может поделиться ссылкой с другими людьми.
Например, можно отправить SMS-сообщение с реферальной ссылкой.
Перейдя по ней, пользователь попадёт в Google Play и, установив и запустив приложение, увидит имя человека, который поделился ссылкой. Все эти операции (создание ссылки, клики по ней) отслеживаются также на вкладке Liveview панели управления.
Отправка событий в Branch
Допустим, стоит задача проанализировать, какие слова чаще всего ищут люди в словаре. Это можно легко реализовать с помощью отправки событий в панель управления. Для этого в метод, где происходит поиск слов, добавим следующий код.
handler.removeCallbacks(runnable);
runnable = new Runnable() {
@Override public void run() {
mAdapter.filter(query);
JSONObject params = new JSONObject();
try {
params.put("word", query);
} catch (JSONException e) {
e.printStackTrace();
}
branch.userCompletedAction("search", params);
}
};
handler.postDelayed(runnable, 500);
Метод userCompletedAction() посылает событие “search” с параметрами params, которые представляют из себя обычную JSON-строку. На панели управления она отобразится в следующем виде.












