Pular para o conteúdo

Personalizando a aparência de rich media

Visão geral

Anchor link to

Personalize a aparência das páginas de rich media para que se ajustem perfeitamente ao estilo do seu aplicativo. Altere a cor de fundo das suas mensagens in-app, adicione alguma animação ou ajuste a visualização de carregamento ao layout do aplicativo. Melhore a experiência do usuário com in-apps que parecem um componente nativo do aplicativo.

Implementação

Anchor link to

Primeiro, obtenha uma instância da classe RichMediaStyle:

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

Cor de fundo

Anchor link to

Faça com que as mensagens in-app pareçam uma parte inerente do seu aplicativo, alterando a cor de fundo das páginas de rich media exibidas aos usuários do aplicativo.

Mensagem in-app de rich media com cor de fundo personalizada combinando com o design do aplicativo
style.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.2f];
style.setBackgroundColor(ContextCompat.getColor(getApplication(), R.color.black));

É isso!

Animação

Anchor link to

Aprimore o efeito de suas mensagens in-app animando a aparência da rich media.

Defina o delegate de animação para uma das classes padrão:

  • PWRichMediaStyleSlideLeftAnimation,
  • PWRichMediaStyleSlideRightAnimation,
  • PWRichMediaStyleSlideTopAnimation,
  • PWRichMedia-StyleSlideBottomAnimation,
  • PWRichMediaStyleCrossFadeAnimation.
style.animationDelegate = [PWRichMediaStyleCrossFadeAnimation new];

Defina o delegate de animação para uma das classes padrão:

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

Para definir uma animação personalizada, implemente o método PWRichMediaStyleAnimationDelegate para iOS ou RichMediaAnimation para Android da seguinte forma:

  1. Defina o delegate de animação:
style.animationDelegate = self;
  1. Implemente os métodos PWRichMediaStyleAnimationDelegate (não se esqueça de chamar um bloco de conclusão):
- (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();
}];
}

Implemente a interface RichMediaAnimation e defina-a para a animação personalizada de fechamento e abertura de Rich Media:

richMediaStyle.setRichMediaAnimation(new RichMediaAnimation() {
//Allows to set rules and behavior for custom Rich Media open animation
@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);
}
//Allows to set rules and behavior for custom Rich Media close animation
@Override
public void closeAnimation(View contentView, View parentView, Animation.AnimationListener endAnimationListener) {
// !IMPORTANT!
// endAnimationListener has to be added to your custom animation to let Pushwoosh SDK handle animation end event
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);
}
});

Visualização de carregamento personalizada

Anchor link to

Chame a atenção do usuário desde os primeiros segundos com uma visualização de carregamento personalizada de suas Mensagens In-App.

  1. Use loadingViewBlock da seguinte forma:
style.loadingViewBlock = ^PWLoadingView *{
return [[[NSBundle mainBundle] loadNibNamed:@"LoadingView" owner:self options:nil] lastObject];
};
  1. “LoadingView” aqui deve herdar de PWLoadingView (definido em PWRichMediaStyle.h):
Interface do Xcode mostrando a classe LoadingView herdando de PWLoadingView na hierarquia de classes
  1. Defina os outlets:
Interface do Xcode mostrando as conexões de outlet para as propriedades personalizadas de LoadingView

RichMediaStyle.LoadingViewCreatorInterface implementa um método que retorna uma View a ser usada como tela de carregamento para Rich Media:

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

Atraso na habilitação do botão de fechar

Anchor link to

Certifique-se de que a Mensagem In-App seja mostrada aos usuários desabilitando o botão de fechar até que a Rich Media seja carregada.

style.closeButtonPresentingDelay = 3;
// defina um valor em milissegundos
richMediaStyle.setTimeOutBackButtonEnable(3000);