Введение
Приложения можно продвигать самыми разными способами. Одним из таких способов является реферальный маркетинг. Этот вид маркетинга заключается в том, что информация о приложении будет распространяться не через рекламные сети, а от существующих пользователей к потенциальным.
Таким образом, использование реферального маркетинга может быть крайне полезно потому, что человек с большей вероятностью будет прислушиваться к мнению своих друзей, родных или близких, чем к объявлениям в рекламе. Например, пользователь, который скачал приложение и остался им доволен, сможет не только посоветовать приложение другим людям, но и дать так называемую реферальную ссылку, по которой будущие пользователи смогут напрямую перейти в магазин и установить приложение себе на устройство. Это придаёт продвижению некоторую “вирусность”, что в данном случае пойдёт только на пользу.
В сети есть множество способов по реализации реферальных ссылок в приложениях, одно из них мы рассмотрели в предыдущей статье. В этой же хочется рассказать о таком инструменте, как 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-строку. На панели управления она отобразится в следующем виде.