Dokumentacja

Powiadomienia push

Dostarczaj odpowiedzi operatorów i kampanie, gdy aplikacja jest zamknięta, z linkiem głębokim prosto do właściwej rozmowy. Twoja aplikacja jest właścicielem podsystemu push; SDK rejestruje tokeny i otwiera rozmowy.

Co wysyła Respondo#

  • Push wiadomości — odpowiedź operatora lub AI w rozmowie, w której uczestniczy odwiedzający.
  • Push kampanii — wychodzące kampanie push, które dodatkowo raportują sygnalizator otwarcia.

Push wiadomości zawsze niosą link głęboki w postaci respondo://conversation/<id>. Push kampanii niosą link głęboki skonfigurowany w kampanii — jest opcjonalny, a gdy nie jest ustawiony, push nie zawiera linku głębokiego.

Apple (APNs)#

Push na iOS działa bezpośrednio na APNs — bez zależności od Firebase. Ze swojego konta Apple Developer uzyskaj:

  • Klucz uwierzytelniający APNs (klucz tokenowy .p8).
  • Key ID tego klucza.
  • Twój Team ID.
  • bundle id aplikacji.

Google (FCM)#

Push na Androidzie przechodzi przez Firebase Cloud Messaging. Ze swojego projektu Firebase uzyskaj:

  • JSON konta usługi z rolą Cloud Messaging.
  • Identyfikator projektu Firebase (konsola Firebase → Project settings) — wpisywany jako osobne pole w formularzu push w panelu, obok JSON-a konta usługi.
  • nazwę pakietu aplikacji Android i połącz aplikację z tym samym projektem Firebase (google-services.json).

Konfiguracja w Respondo#

Dodaj klucz APNs oraz konto usługi FCM wraz z jego identyfikatorem projektu do kanału widgetu w panelu. To wszystko, czego Respondo potrzebuje, aby wysyłać na obie platformy.

Ustawianie poświadczeń przez API oraz pełne odniesienie do pól są opisane w przewodniku konfiguracji push dostarczanym wraz z dostępem do SDK.

Format payloadu#

Payload zawsze żyje pod głównym kluczem respondo — jego obecność to sposób, w jaki SDK odróżnia własne push od innych (na iOS w userInfo, na Androidzie jako ciąg JSON w data["respondo"]).

payload respondojson
{
  "respondo": {
    "type": "message",
    "conversation_id": "a1c4e7b2-5d38-4f6a-9e10-3b7c2d5f8a90",
    "message_id": "e9a3c1f6-4b8d-4e0a-b5f3-1d7b2a4e9c63",
    "deep_link": "respondo://conversation/a1c4e7b2-5d38-4f6a-9e10-3b7c2d5f8a90"
  }
}

Wszystkie wartości to płaskie ciągi znaków. Tytuł i treść powiadomienia są dostarczane przez transport platformy — aps.alert w APNs i message.notification w FCM — a nie wewnątrz obiektu respondo.

Push kampanii zawiera dodatkowo delivery_id używany do zaraportowania sygnalizatora otwarcia i może nieść dodatkowe płaskie klucze tekstowe z danych push kampanii.

Obsługa dotknięć i pierwszego planu#

Po dotknięciu powiadomienia przekaż surowy payload do SDK. Parsuje ono payload i otwiera właściwą rozmowę, zwracając false, jeśli push nie jest pushem Respondo (w takim przypadku obsłuż go samodzielnie).

Obsługa dotknięcia (per platforma)text
Android:  RespondoPushPayload.from(data)?.let { Respondo.handlePush(it) }
iOS:      Respondo.handlePush(userInfo: userInfo)
Flutter:  Respondo.handlePushData(message.data)

Duplikaty są scalane po message_id, a gdy ta sama rozmowa jest otwarta na pierwszym planie, systemowe powiadomienie jest tłumione — SDK obsługuje oba przypadki automatycznie.

Rejestrowanie tokenów urządzeń#

Twoja aplikacja pobiera token urządzenia ze swojego podsystemu push i przekazuje go do setPushToken. Wywołaj clearPushToken przy wylogowaniu.

Który token przekazać. Backend kieruje każdą dostawę według platformy — iOS trafia bezpośrednio do APNs, Android trafia do FCM — więc musisz zarejestrować token natywnego transportu danej platformy, a nie cokolwiek, co akurat zwróci Twoja biblioteka push:
  • Android — token rejestracyjny FCM z FirebaseMessaging.getToken().
  • iOS (natywnie) — token urządzenia APNs (hex) z didRegisterForRemoteNotificationsWithDeviceToken.
  • iOS przez Flutter (firebase_messaging) — użyj getAPNSToken(), a nie getToken(). Przekazanie tokena FCM na iOS wysyła go do APNs, gdzie nie jest on prawidłowym tokenem urządzenia i push nigdy nie docierają. getAPNSToken() może być null w pierwszych chwilach po uruchomieniu — jeśli tak, ponów po krótkim opóźnieniu.
Android — FirebaseMessagingServicekotlin
override fun onNewToken(token: String) {
    Respondo.setPushToken(token)
}
iOS — AppDelegateswift
func application(
    _ application: UIApplication,
    didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data
) {
    let token = deviceToken.map { String(format: "%02x", $0) }.joined()
    Respondo.setPushToken(token)
}
Flutter — firebase_messagingdart
// iOS potrzebuje tokena APNs; Android potrzebuje tokena FCM.
final token = Platform.isIOS
    ? await FirebaseMessaging.instance.getAPNSToken()
    : await FirebaseMessaging.instance.getToken();
if (token != null) Respondo.setPushToken(token);

// FCM rotuje swój token rejestracyjny; utrzymuj synchronizację na Androidzie.
if (!Platform.isIOS) {
  FirebaseMessaging.instance.onTokenRefresh.listen(Respondo.setPushToken);
}