Перейти к содержанию

Настройка внешнего вида rich media

Обзор

Anchor link to

Настройте внешний вид страниц rich media, чтобы они идеально соответствовали стилю вашего приложения. Измените цвет фона ваших in-app сообщений, добавьте анимацию или настройте экран загрузки под макет приложения. Улучшите пользовательский опыт с помощью in-app сообщений, которые выглядят как нативный компонент приложения.

Реализация

Anchor link to

Сначала получите экземпляр класса RichMediaStyle:

PWRichMediaStyle *style = [PWRichMediaManager sharedManager].richMediaStyle;
RichMediaStyle style = RichMediaManager.getRichMediaStyle();

Цвет фона

Anchor link to

Сделайте так, чтобы in-app сообщения выглядели как неотъемлемая часть вашего приложения, изменив цвет фона страниц rich media, отображаемых пользователям.

In-app сообщение rich media с настроенным цветом фона, соответствующим дизайну приложения
style.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.2f];
style.setBackgroundColor(ContextCompat.getColor(getApplication(), R.color.black));

Вот и всё!

Анимация

Anchor link to

Усильте эффект от ваших in-app сообщений, анимировав появление rich media.

Установите делегат анимации на один из стандартных классов:

  • PWRichMediaStyleSlideLeftAnimation,
  • PWRichMediaStyleSlideRightAnimation,
  • PWRichMediaStyleSlideTopAnimation,
  • PWRichMediaStyleSlideBottomAnimation,
  • PWRichMediaStyleCrossFadeAnimation.
style.animationDelegate = [PWRichMediaStyleCrossFadeAnimation new];

Установите делегат анимации на один из стандартных классов:

  • RichMediaAnimationSlideTop,
  • RichMediaAnimationSlideBottom,
  • RichMediaAnimationSlideRight,
  • RichMediaAnimationSlideLeft,
  • RichMediaAnimationCrossFade.
richMediaStyle.setRichMediaAnimationType(new RichMediaAnimationSlideTop());

Чтобы установить пользовательскую анимацию, реализуйте метод PWRichMediaStyleAnimationDelegate для iOS или RichMediaAnimation для Android следующим образом:

  1. Установите делегат анимации:
style.animationDelegate = self;
  1. Реализуйте методы PWRichMediaStyleAnimationDelegate (не забудьте вызвать блок завершения):
- (void)runPresentingAnimationWithContentView:(UIView *)contentView parentView:(UIView *)parentView completion:(dispatch_block_t)completion {
contentView.transform = CGAffineTransformMakeTranslation(0, parentView.bounds.size.height);
[UIView animateWithDuration:0.6
delay:0
usingSpringWithDamping:0.4
initialSpringVelocity:0
options:0
animations:^{
contentView.transform = CGAffineTransformIdentity;
} completion:^(BOOL finished) {
completion();
}];
}
- (void)runDismissingAnimationWithContentView:(UIView *)contentView parentView:(UIView *)parentView completion:(dispatch_block_t)completion {
[UIView animateWithDuration:0.3
animations:^{
contentView.alpha = 0.0f;
contentView.transform = CGAffineTransformMakeScale(2, 2);
} completion:^(BOOL finished) {
completion();
}];
}

Реализуйте интерфейс RichMediaAnimation и установите его для пользовательской анимации открытия и закрытия Rich Media:

richMediaStyle.setRichMediaAnimation(new RichMediaAnimation() {
//Позволяет задать правила и поведение для пользовательской анимации открытия Rich Media
@Override
public void openAnimation(View contentView, View parentView) {
AnimationSet fadeInAnimation = new AnimationSet(true);
fadeInAnimation.addAnimation(new TranslateAnimation(0.15f * parentView.getWidth(), 0, parentView.getHeight() / 2.5f, 0));
fadeInAnimation.addAnimation(new AlphaAnimation(0, 1));
fadeInAnimation.addAnimation(new ScaleAnimation(0.7f, 1.0f, 0.7f, 1.0f));
fadeInAnimation.setDuration(2000);
fadeInAnimation.setInterpolator(new DecelerateInterpolator(1f));
contentView.startAnimation(fadeInAnimation);
}
//Позволяет задать правила и поведение для пользовательской анимации закрытия Rich Media
@Override
public void closeAnimation(View contentView, View parentView, Animation.AnimationListener endAnimationListener) {
// !ВАЖНО!
// endAnimationListener должен быть добавлен к вашей пользовательской анимации, чтобы Pushwoosh SDK мог обработать событие окончания анимации
AlphaAnimation alphaAnimation = new AlphaAnimation(1, 0);
alphaAnimation.setDuration(2000);
alphaAnimation.setAnimationListener(endAnimationListener);
alphaAnimation.setFillEnabled(true);
alphaAnimation.setFillAfter(true);
contentView.animate().translationY(parentView.getHeight() / 5).setDuration(250).start();
parentView.startAnimation(alphaAnimation);
}
});

Пользовательский экран загрузки

Anchor link to

Привлеките внимание пользователя с первых секунд с помощью настроенного экрана загрузки ваших In-App сообщений.

  1. Используйте loadingViewBlock следующим образом:
style.loadingViewBlock = ^PWLoadingView *{
return [[[NSBundle mainBundle] loadNibNamed:@"LoadingView" owner:self options:nil] lastObject];
};
  1. Здесь LoadingView должен наследоваться от PWLoadingView (определенного в PWRichMediaStyle.h):
Интерфейс Xcode, показывающий класс LoadingView, наследующий от PWLoadingView в иерархии классов
  1. Установите outlets:
Интерфейс Xcode, показывающий outlet-соединения для пользовательских свойств LoadingView

RichMediaStyle.LoadingViewCreatorInterface реализует метод, который возвращает View для использования в качестве экрана загрузки для Rich Media:

richMediaStyle.setLoadingViewCreator(() -> {
View screenView = createYourScreenView();
return screenView;
});

Задержка включения кнопки закрытия

Anchor link to

Убедитесь, что In-App сообщение будет показано пользователям, отключив кнопку закрытия до тех пор, пока Rich Media не загрузится.

style.closeButtonPresentingDelay = 3;
// установите значение в миллисекундах
richMediaStyle.setTimeOutBackButtonEnable(3000);