Android SDK: Grundlegende Integrationsanleitung
Dieser Abschnitt enthält Informationen zur Integration des Pushwoosh SDK in Ihre Android-Anwendung.
Voraussetzungen
Anchor link toUm das Pushwoosh Android SDK in Ihre App zu integrieren, benötigen Sie Folgendes:
Integrationsschritte
Anchor link to1. Firebase Cloud Messaging einrichten
Anchor link toVerbinden Sie zuerst Ihr Android-Projekt mit Firebase:
- Öffnen Sie Ihr Projekt in Android Studio
- Navigieren Sie zu Tools > Firebase > Cloud Messaging und klicken Sie auf „Set up Firebase Cloud Messaging“
- Folgen Sie den Anweisungen des Assistenten. Im letzten Schritt fügt der Assistent die notwendigen Abhängigkeiten zu Ihren
build.gradle-Dateien hinzu
2. Pushwoosh SDK hinzufügen
Anchor link toFügen Sie die Abhängigkeit der Pushwoosh-Bibliothek zur build.gradle-Datei Ihrer Anwendung hinzu:
implementation 'com.pushwoosh:pushwoosh-firebase:6.+'Ersetzen Sie „+“ durch die aktuelle Version des Pushwoosh Android SDK
3. Pushwoosh-Metadaten zu AndroidManifest.xml hinzufügen
Anchor link toÖffnen Sie Ihre AndroidManifest.xml-Datei und fügen Sie die folgenden Metadaten innerhalb des <application>-Tags hinzu:
<meta-data android:name="com.pushwoosh.appid" android:value="__YOUR_APP_CODE__" /><meta-data android:name="com.pushwoosh.senderid" android:value="@string/fcm_sender_id" /><meta-data android:name="com.pushwoosh.apitoken" android:value="__YOUR_DEVICE_API_TOKEN__" />Wobei:
com.pushwoosh.appidIhr Pushwoosh Application Code istcom.pushwoosh.apitokenIhr Pushwoosh Device API Token ist
Wichtig: Stellen Sie sicher, dass Sie dem Token in Ihrem Pushwoosh Control Panel Zugriff auf die richtige App geben. Erfahren Sie mehr
Um com.pushwoosh.senderid festzulegen, fügen Sie fcm_sender_id zur Datei res/values/strings.xml Ihres Projekts hinzu:
<resources> <string name="fcm_sender_id">__YOUR_FCM_SENDER_ID__</string></resources>4. Initialisierungscode
Anchor link toRegistrieren Sie sich für Push-Benachrichtigungen, indem Sie diesen Code zu Ihrer Initialisierungslogik hinzufügen:
Pushwoosh.getInstance().registerForPushNotifications()5. Projekt ausführen
Anchor link to- Erstellen Sie das Projekt und führen Sie es aus.
- Gehen Sie zum Pushwoosh Control Panel und senden Sie eine Push-Benachrichtigung.
- Sie sollten die Benachrichtigung in der App sehen.
Erweiterte Integration
Anchor link toIn diesem Stadium haben Sie das SDK bereits integriert und können Push-Benachrichtigungen senden und empfangen. Lassen Sie uns nun die Kernfunktionalität erkunden.
Push-Benachrichtigungen
Anchor link toIm Pushwoosh SDK gibt es zwei Callbacks, die für die Verarbeitung von Push-Benachrichtigungen konzipiert sind:
onMessageReceived: Diese Methode wird aufgerufen, wenn eine Push-Benachrichtigung empfangen wird.onMessageOpened: Diese Methode wird aufgerufen, wenn der Benutzer mit der Benachrichtigung interagiert (sie öffnet).
Diese Callbacks ermöglichen es Entwicklern, den Empfang und die Benutzerinteraktion mit Push-Benachrichtigungen in ihren Anwendungen zu verwalten:
<meta-data android:name="com.pushwoosh.notification_service_extension" android:value="com.your.package.YourNotificationServiceExtension" />import android.util.Logimport com.pushwoosh.notification.NotificationServiceExtensionimport com.pushwoosh.notification.PushMessage
class YourNotificationServiceExtension : NotificationServiceExtension() {
override fun onMessageReceived(data: PushMessage): Boolean { Log.d("Pushwoosh", "onMessageReceived: ${data.toJson()}") return false }
override fun onMessageOpened(message: PushMessage) { Log.d("Pushwoosh", "onMessageOpened: ${message.toJson()}") }
}import android.util.Log;import com.pushwoosh.notification.NotificationServiceExtension;import com.pushwoosh.notification.PushMessage;
public class YourNotificationServiceExtensionJava extends NotificationServiceExtension {
@Override public boolean onMessageReceived(PushMessage data) { Log.d("Pushwoosh", "onMessageReceived: " + data.toJson()); return false; }
@Override public void onMessageOpened(PushMessage message) { Log.d("Pushwoosh", "onMessageOpened: " + message.toJson()); }}Benutzerkonfiguration
Anchor link toIndem Sie sich auf das individuelle Benutzerverhalten und die Vorlieben konzentrieren, können Sie personalisierte Inhalte bereitstellen, was zu einer erhöhten Benutzerzufriedenheit und -loyalität führt.
import com.pushwoosh.Pushwooshimport com.pushwoosh.tags.TagsBundleimport java.util.Date
class Registration {
public void afterUserLogin(User user) { Pushwoosh pushwoosh = Pushwoosh.getInstance()
// Set user ID if (user.getUserId() != null) { pushwoosh.setUserId(user.getUserId()) }
// Set user email if (user.getEmail() != null) { pushwoosh.setEmail(user.getEmail()) }
// Setting additional user information as tags for Pushwoosh if (user.getUserDetails() != null) { val details = user.getUserDetails() val tagsBuilder = TagsBundle.Builder()
if (details.getAge() != null) { tagsBuilder.putInt("age", details.getAge()) }
if (details.getUserName() != null) { tagsBuilder.putString("name", details.getUserName()) }
if (details.lastLoginDate() != null) { tagsBuilder.putDate("last_login", details.getLastLoginDate()) }
// Build and send tags val tags = tagsBuilder.build() if (!tags.isEmpty()) { pushwoosh.setTags(tags) } } }}import com.pushwoosh.Pushwoosh;import com.pushwoosh.tags.TagsBundle;import java.util.Date;
public class Registration {
public void afterUserLogin(User user) { Pushwoosh pushwoosh = Pushwoosh.getInstance();
// Set user ID if (user.getUserId() != null) { pushwoosh.setUserId(user.getUserId()); }
// Set user email if (user.getEmail() != null) { pushwoosh.setEmail(user.getEmail()); }
// Set user SMS number if (user.getSmsNumber() != null) { pushwoosh.registerSMSNumber(user.getSmsNumber()); }
// Set user WhatsApp number if (user.getWhatsAppNumber() != null) { pushwoosh.registerWhatsappNumber(user.getWhatsAppNumber()); }
// Setting additional user information as tags for Pushwoosh if (user.getUserDetails() != null) { UserDetails details = user.getUserDetails(); TagsBundle.Builder tagsBuilder = new TagsBundle.Builder();
if (details.getAge() != null) { tagsBuilder.putInt("age", details.getAge()); }
if (details.getUserName() != null) { tagsBuilder.putString("name", details.getUserName()); }
if (details.getLastLoginDate() != null) { tagsBuilder.putDate("last_login", details.getLastLoginDate()); }
// Build and send tags TagsBundle tags = tagsBuilder.build(); if (!tags.isEmpty()) { pushwoosh.setTags(tags); } } }}Tags
Anchor link toTags sind Schlüssel-Wert-Paare, die Benutzern oder Geräten zugewiesen werden. Sie ermöglichen eine Segmentierung basierend auf Attributen wie Vorlieben oder Verhalten und ermöglichen so gezielte Nachrichten.
import com.pushwoosh.Pushwooshimport com.pushwoosh.tags.TagsBundleimport java.util.List
class UpdateUser { public void afterUserUpdateProfile(User user) { val pushwoosh = Pushwoosh.getInstance() val tagsBuilder = TagsBundle.Builder()
// Set list of favorite categories if (user.favoriteCategories != null && user.favoriteCategories.isNotEmpty()) { tagsBuilder.putList("favorite_categories", user.getFavoriteCategories()) }
// Set payment information tagsBuilder.putBoolean("is_subscribed", user.isSubscribed()) tagsBuilder.putString("payment_status", user.getPaymentStatus()) tagsBuilder.putString("billing_address", user.getBillingAddress())
// Build and send tags pushwoosh.setTags(tagsBuilder.build()) }}import com.pushwoosh.Pushwoosh;import com.pushwoosh.tags.TagsBundle;import java.util.List;
public class UpdateUser { public void afterUserUpdateProfile(User user) { Pushwoosh pushwoosh = Pushwoosh.getInstance(); TagsBundle.Builder tagsBuilder = TagsBundle.Builder();
// Set list of favorite categories if (user.getFavoriteCategories() != null && !user.getFavoriteCategories().isEmpty()) { tagsBuilder.putList("favorite_categories", user.getFavoriteCategories()); }
// Set payment information tagsBuilder.putBoolean("is_subscribed", user.isSubscribed()); tagsBuilder.putString("payment_status", user.getPaymentStatus()); tagsBuilder.putString("billing_address", user.getBillingAddress());
// Build and send tags pushwoosh.setTags(tagsBuilder.build()); }}Events
Anchor link toEvents sind spezifische Benutzeraktionen oder Vorkommnisse innerhalb der App, die verfolgt werden können, um das Verhalten zu analysieren und entsprechende Nachrichten oder Aktionen auszulösen.
import com.pushwoosh.Pushwooshimport com.pushwoosh.inapp.InAppManagerimport com.pushwoosh.tags.TagsBundleimport java.util.Date
class Registration {
public void afterUserLogin(User user) { if (user.getUserName() != null && user.getLastLoginDate() != null) { val attributes = TagsBundle.Builder() .putString("name", user.getUserName()) .putDate("last_login", user.getLastLoginDate()) .build()
InAppManager.getInstance().postEvent("login", attributes) } }
public void afterUserPurchase(User user, Product product) { Pushwoosh pushwoosh = Pushwoosh.getInstance()
// Track purchase event val purchaseAttributes = TagsBundle.Builder() .putString("product_id", product.getId()) .putString("product_name", product.getName()) .putDouble("price", product.getPrice()) .putInt("quantity", product.getQuantity()) .build()
InAppManager.getInstance().postEvent("purchase", purchaseAttributes)
// Set user tags val tagsBuilder = TagsBundle.Builder() tagsBuilder.putDate("last_purchase_date", Date()) val lifetimeSpend = getCurrentLifetimeSpend() + product.getPrice() tagsBuilder.putDouble("lifetime_spend", getCurrentLifetimeSpend()) pushwoosh.setTags(tagsBuilder.build()) }}import com.pushwoosh.Pushwoosh;import com.pushwoosh.tags.TagsBundle;import java.util.Date;
public class Registration {
public void afterUserLogin(User user) { if (user.getUserName() != null && user.getLastLoginDate() != null) { TagsBundle attributes = new TagsBundle.Builder() .putString("name", user.getUserName()) .putDate("last_login", user.getLastLoginDate()) .build();
Pushwoosh.getInstance().postEvent("login", attributes); } }
public void afterUserPurchase(User user, Product product) { Pushwoosh pushwoosh = Pushwoosh.getInstance();
// Track purchase event TagsBundle purchaseAttributes = new TagsBundle.Builder() .putString("product_id", product.getId()) .putString("product_name", product.getName()) .putDouble("price", product.getPrice()) .putInt("quantity", product.getQuantity()) .build();
Pushwoosh.getInstance().postEvent("purchase", purchaseAttributes);
// Set user tags TagsBundle.Builder tagsBuilder = new TagsBundle.Builder(); tagsBuilder.putDate("last_purchase_date", new Date()); double lifetimeSpend = getCurrentLifetimeSpend() + product.getPrice(); tagsBuilder.putDouble("lifetime_spend", getCurrentLifetimeSpend()); pushwoosh.setTags(tagsBuilder.build()); }}Rich Media
Anchor link toRich Media bezieht sich auf interaktive und multimediale Inhalte wie Bilder, Videos oder HTML, die in Benachrichtigungen und In-App-Nachrichten verwendet werden, um das Engagement der Benutzer zu erhöhen.
Um die Funktion Modal Rich Media zu aktivieren, müssen Sie sie in der AndroidManifest.xml-Datei Ihrer Anwendung konfigurieren, indem Sie den folgenden Metadaten-Eintrag hinzufügen:
<meta-data android:name="com.pushwoosh.rich_media_type" android:value="Modal" />import android.util.Logimport com.pushwoosh.richmedia.RichMediaimport com.pushwoosh.richmedia.RichMediaManagerimport com.pushwoosh.richmedia.RichMediaPresentingDelegateimport com.pushwoosh.inapp.view.config.ModalRichmediaConfigimport com.pushwoosh.inapp.view.config.enums.*
class MainActivity : AppCompatActivity(), RichMediaPresentingDelegate {
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) RichMediaManager.setDelegate(this)
// Configure the modal rich media val config = ModalRichmediaConfig() .setViewPosition(ModalRichMediaViewPosition.BOTTOM) .setPresentAnimationType(ModalRichMediaPresentAnimationType.SLIDE_UP) .setDismissAnimationType(ModalRichMediaDismissAnimationType.SLIDE_DOWN)
// Apply the configuration RichMediaManager.setDefaultRichMediaConfig(config) }
override fun shouldPresent(richMedia: RichMedia): Boolean { Log.d("Pushwoosh", "Rich media will be presented with: ${richMedia.content}") return true }
override fun onPresent(richMedia: RichMedia) { Log.d("Pushwoosh", "Rich media has been presented: ${richMedia.content}") }
override fun onClose(richMedia: RichMedia) { Log.d("Pushwoosh", "Rich media has been closed: ${richMedia.content}") }
override fun onError(richMedia: RichMedia, pushwooshException: PushwooshException) { Log.e("Pushwoosh", "Failed to present rich media: ${richMedia.content}. Error: ${pushwooshException.message}") }}import android.util.Log;import com.pushwoosh.richmedia.RichMedia;import com.pushwoosh.richmedia.RichMediaManager;import com.pushwoosh.richmedia.RichMediaPresentingDelegate;import com.pushwoosh.inapp.view.config.ModalRichmediaConfig;import com.pushwoosh.inapp.view.config.enums.*;
public class MainActivity extends AppCompatActivity implements RichMediaPresentingDelegate {
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); RichMediaManager.setDelegate(this);
// Configure the modal rich media ModalRichmediaConfig config = new ModalRichmediaConfig() .setViewPosition(ModalRichMediaViewPosition.BOTTOM) .setPresentAnimationType(ModalRichMediaPresentAnimationType.SLIDE_UP) .setDismissAnimationType(ModalRichMediaDismissAnimationType.SLIDE_DOWN);
// Apply the configuration RichMediaManager.setDefaultRichMediaConfig(config); }
@Override public boolean shouldPresent(RichMedia richMedia) { Log.d("Pushwoosh", "Rich media will be presented with: " + richMedia.getContent()); return true; }
@Override public void onPresent(RichMedia richMedia) { Log.d("Pushwoosh", "Rich media has been presented: " + richMedia.getContent()); }
@Override public void onClose(RichMedia richMedia) { Log.d("Pushwoosh", "Rich media has been closed: " + richMedia.getContent()); }
@Override public void onError(RichMedia richMedia, PushwooshException pushwooshException) { Log.e("Pushwoosh", "Failed to present rich media: " + richMedia.getContent() + ". Error: " + pushwooshException.getMessage()); }}Fehlerbehebung
Anchor link toSollten während des Integrationsprozesses Probleme auftreten, lesen Sie bitte den Abschnitt Support und Community.