
Das AppboyKit (auch bekannt als Objective-C SDK) wird nicht mehr unterstützt und wurde durch das Swift SDK. ] ersetzt. Es wird keine neuen Features, Fehlerbehebungen, Sicherheitsupdates oder technischen Support mehr erhalten - Messaging und Analytics werden jedoch weiterhin wie gewohnt funktionieren. Weitere Informationen finden Sie unter Einführung in das neue Braze Swift SDK.
Verwendung mehrere Content-Card-Feeds
Content Cards können in der App gefiltert werden, so dass nur bestimmte Karten angezeigt werden. So können Sie mehrere Content Card Feeds für verschiedene Anwendungsfälle haben (z.B. einen Transaktions-Feed und einen Marketing-Feed).
Die folgende Dokumentation zeigt eine Beispielimplementierung, die an Ihre spezifische Integration angepasst werden kann.
Schritt 1: Schlüssel-Wert-Paare auf Karten setzen
Bei der Erstellung einer Content-Card-Kampagne können für jede Karte Schlüssel-Wert-Paare festgelegt werden. Unsere Filterlogik wird diese Schlüssel-Wert-Paar-Daten verwenden, um die Karten zu kategorisieren.
In diesem Beispiel legen wir ein Schlüssel-Wert-Paar mit dem Schlüssel feed_type fest, um anzugeben, welcher Content-Card-Feed angezeigt werden soll. Der Wert entspricht dem Ihrer benutzerdefinierten Feeds, z. B. Transactional, Marketing, usw.
Schritt 2: Einrichten eines Inhaltskarten-Hörers
Verwenden Sie das folgende Code-Snippet, um einen Beobachter hinzuzufügen, der auf Content-Card-Updates wartet.
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)
Fügen Sie die folgenden Methoden hinzu, um auf Updates vom Beobachter zu reagieren und die zurückgegebenen Karten nach Typ zu filtern.
Die erste Methode, contentCardsUpdatedNotificationReceived:, verarbeitet Updates vom Beobachter. Sie ruft die zweite Methode, getCardsForFeedType:, mit dem gewünschten Feed-Typ – in diesem Fall Transactional – auf.
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
}
}
}