AppboyKit (também conhecido como o SDK Objective-C) não é mais suportado e foi substituído pelo Swift SDK. Não receberá mais novos recursos, correções de bugs, atualizações de segurança ou suporte técnico—no entanto, o envio de mensagens e a análise de dados continuarão a funcionar normalmente. Para saber mais, veja Apresentando o Novo SDK Braze Swift.
Uso de vários feeds de cartão de conteúdo
Os cartões de conteúdo podem ser filtrados no app para exibir apenas cartões específicos, ativando a capacitação para ter vários feeds de cartão de conteúdo para diferentes casos de uso (como ter um feed transacional versus um feed de marketing).
A documentação a seguir demonstra um exemplo de implementação que pode ser alterado para se adequar à sua integração específica.
Etapa 1: Definição de pares de valores-chave em cartões
Ao criar uma campanha de cartão de conteúdo, os dados do par chave-valor podem ser definidos em cada cartão. Nossa lógica de filtragem usará esses dados do par chave-valor para categorizar os cartões.
Para este exemplo, definiremos um par valor-chave com a chave feed_type que designará qual feed do cartão de conteúdo o cartão deve ser exibido. O valor será o valor de seus feeds personalizados, como Transactional, Marketing, etc.
Etapa 2: Configurar um ouvinte de cartão de conteúdo
Use o seguinte trecho de código para adicionar um observador para ouvir as atualizações do cartão de conteúdo.
1
2
3
4
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(contentCardsUpdatedNotificationReceived:)
name:ABKContentCardsProcessedNotification
object:nil];
1
2
3
NotificationCenter.default.addObserver(self, selector:
#selector(contentCardsUpdated),
name:NSNotification.Name.ABKContentCardsProcessed, object: nil)
Adicione os seguintes métodos para responder às atualizações do observador e filtrar os cartões retornados por tipo.
O primeiro método, contentCardsUpdatedNotificationReceived:, lida com as atualizações do observador. Ele chama o segundo método, getCardsForFeedType:, com o tipo de feed desejado, nesse caso, Transactional.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
- (void)contentCardsUpdatedNotificationReceived:(NSNotification *)notification {
BOOL updateIsSuccessful = [notification.userInfo[ABKContentCardsProcessedIsSuccessfulKey] boolValue];
if (updateIsSuccessful) {
// Get an array containing only cards that have the "Transactional" feed type set in their extras.
NSArray<ABKContentCard *> *filteredArray = [self getCardsForFeedType:@"Transactional"];
NSLog(@"Got filtered array of length: %lu", [filteredArray count]);
// Pass filteredArray to your UI layer for display.
}
}
- (NSArray<ABKContentCard *> *)getCardsForFeedType:(NSString *)type {
NSArray<ABKContentCard *> *cards = [Appboy.sharedInstance.contentCardsController getContentCards];
NSArray<ABKContentCard *> *filteredArray = [cards filteredArrayUsingPredicate:[NSPredicate predicateWithBlock:^BOOL(ABKContentCard * card, NSDictionary *bindings) {
NSDictionary *extras = [card extras];
if (extras != nil && [extras objectForKey:@"feed_type"] != nil && [[extras objectForKey:@"feed_type"] isEqualToString:type]) {
NSLog(@"Got card: %@ ", card.idString);
return YES;
}
return NO;
}]];
return filteredArray;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
@objc private func contentCardsUpdatedNotificationReceived(notification: NSNotification) {
guard let updateSuccessful = notification.userInfo?[ABKContentCardsProcessedIsSuccessfulKey] as? Bool else { return }
if updateSuccessful {
// Get an array containing only cards that have the "Transactional" feed type set in their extras.
let filteredArray = getCards(forFeedType: "Transactional")
NSLog("Got filtered array of length: %@",filteredArray?.count ?? 0)
// Pass filteredArray to your UI layer for display.
}
}
func getCards(forFeedType type: String) -> [ABKContentCard]? {
guard let allCards = Appboy.sharedInstance()?.contentCardsController.contentCards as? [ABKContentCard] else { return nil }
// return filtered cards
return allCards.filter {
if $0.extras?["feed_type"] as? String == type {
NSLog("%@","Got card: \($0.idString)")
return true
} else {
return false
}
}
}
Editar esta página no GitHub