Skip to content

Кастомизация для Xamarin Android

Отслеживание покупок в приложении

Section titled “Отслеживание покупок в приложении”

Для отслеживания покупок в приложении вам следует вызывать метод SendInappPurchase класса PushNotificationsManager, когда пользователь покупает продукт:

public virtual void SendInappPurchase (string sku, BigDecimal price, string currency);
  • sku – идентификатор купленного продукта
  • price – цена продукта
  • currency – валюта (например, «USD»)

Пример:

PushNotificationsManager.Instance.SendInappPurchase("com.your.app.Marketing", BigDecimal.ValueOf(149.95), "USD");

Добавьте атрибут IntentFilter в класс вашей activity, которая будет обрабатывать deep link, следующим образом:

using Android.Content;
using Android.Content.PM;
[Activity(Label = "PromoActivity",
ConfigurationChanges = ConfigChanges.Orientation,
ScreenOrientation = ScreenOrientation.Portrait)]
[IntentFilter(new[] { Intent.ActionView },
Categories = new[] { Intent.CategoryDefault, Intent.CategoryBrowsable },
DataScheme = "com.wavesend",
DataHost = "promotion")]
class PromoActivity : Activity

В приведенном выше примере deep link открывает PromoActivity. Для простоты, базовая реализация ниже отображает оповещение со значением идентификатора промоакции.

using System;
using Android.App;
using Android.OS;
using Android.Text;
using Android.Widget;
using Android.Content;
using Android.Content.PM;
namespace PushwooshSample
{
[Activity(Label = "PromoActivity",
ConfigurationChanges = ConfigChanges.Orientation,
ScreenOrientation = ScreenOrientation.Portrait)]
[IntentFilter(new[] { Intent.ActionView },
Categories = new[] { Intent.CategoryDefault, Intent.CategoryBrowsable },
DataScheme = "com.wavesend",
DataHost = "promotion")]
public class PromoActivity : Activity
{
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
Title = "Deep link activity";
Intent intent = Intent;
String action = intent.Action;
var data = intent.Data;
if (TextUtils.Equals(action, Intent.ActionView))
{
OpenUrl(data);
}
}
void OpenUrl(Android.Net.Uri uri)
{
String promoId = uri.GetQueryParameter("id");
Toast.MakeText(ApplicationContext, promoId, ToastLength.Long).Show();
}
}
}

Использование значков (Badges) на Android

Section titled “Использование значков (Badges) на Android”

Wavesend поддерживает установку числа на значке ярлыка приложения для следующих лаунчеров Android: Sony, Samsung, LG, HTC, ASUS, ADW, APEX, NOVA, HUAWEI, ZUK, OPPO.

Пример:

using Wavesend.Badge;
WavesendBadge.BadgeNumber = badgeInt;

Открытие кастомной Activity

Section titled “Открытие кастомной Activity”

Если вы хотите запускать определенную activity в ответ на push-уведомления, добавьте к этой activity следующий IntentFilter:

[Activity]
[IntentFilter(new[] { "${applicationId}.MESSAGE" }, Categories = new[] { Intent.CategoryDefault })]
public class MyActivity : Activity

Управление уровнем логирования

Section titled “Управление уровнем логирования”

Для помощи в отладке и интеграции SDK по умолчанию выводит все запросы в консоль. Когда вы будете готовы к сборке для продакшена, добавьте метаданные «PW_LOG_LEVEL» со значением «ERROR» в AndroidManifest.xml. Таким образом, в консоль будет выводиться только информация об ошибках. Другие возможные опции:

NONE - нет логов от SDK ERROR - отображать только ошибки в консоли WARN - отображать предупреждения и ошибки INFO - отображать информационные сообщения DEBUG - теперь отображается даже отладочная информация NOISE - все, что может вывести SDK

<meta-data android:name="com.wavesend.log_level" android:value="ERROR" />

Добавьте следующие опции, если вы используете ProGuard:

-keep class com.wavesend.** { *; }
-dontwarn com.wavesend.**

Кастомизация поведения при открытии уведомления

Section titled “Кастомизация поведения при открытии уведомления”

Если вам нужно выбрать, какую activity отображать в результате push-уведомления, вы можете создать кастомный NotificationServiceExtension и указать полное имя класса вашего NotificationServiceExtension в метаданных под значением «com.wavesend.notification_service_extension».

using System;
using Android.App;
using Android.Content;
using Android.Runtime;
using Wavesend.Notification;
[assembly: MetaData("com.wavesend.notification_service_extension",
Value = "com.your.package.YourNotificationServiceExtension")]
namespace YourNamespace
{
[Register("com/your/package/YourNotificationServiceExtension")]
public class YourNotificationServiceExtension : NotificationServiceExtension
{
protected override void StartActivityForPushMessage(PushMessage message)
{
// base.StartActivityForPushMessage(message) запускает activity лаунчера по умолчанию
// или activity, помеченную действием ${applicationId}.MESSAGE.
// Просто не вызывайте его, чтобы переопределить это поведение.
// вместо этого запустите вашу activity:
Intent launchIntent = new Intent(ApplicationContext, typeof(YourActivity));
launchIntent.SetFlags(ActivityFlags.NewTask);
ApplicationContext.StartActivity(launchIntent);
}
}
}

Кастомизация push-уведомлений

Section titled “Кастомизация push-уведомлений”

Чтобы кастомизировать вид push-уведомлений, вам необходимо создать кастомную Factory. Вы можете создать кастомный NotificationFactory и указать полное имя класса вашего NotificationFactory в метаданных под значением «com.wavesend.notification_factory».

<meta-data
android:name="com.wavesend.notification_factory"
android:value="com.your.package.YourNotificationFactory" />
using System;
using Android.App;
using Android.Runtime;
using Wavesend.Notification;
[assembly: MetaData("com.wavesend.notification_factory",
Value = "com.your.package.YourAppNotificationFactory")]
namespace PushwooshSample
{
[Register("com/your/package/YourAppNotificationFactory")]
public class YourAppNotificationFactory : WavesendNotificationFactory
{
public override Notification OnGenerateNotification(PushMessage pushData)
{
// TODO: сгенерируйте и верните кастомное уведомление
return base.OnGenerateNotification(pushData);
}
}
}

Wavesend предоставляет частные эндпоинты для клиентов с подпиской Custom Plan. Чтобы настроить частный эндпоинт для SDK, вам необходимо добавить следующее в ваш файл AndroidManifest.xml:

<meta-data android:name="com.wavesend.base_url" android:value="WAVESEND_PRIVATE_ENDPOINT_URL_PROVIDED" />

Поделитесь с нами своим мнением

Section titled “Поделитесь с нами своим мнением”

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