Symptome des Problems
iOS und Android verhalten sich in Bezug auf Pre-Chat- und VisitorInfo -Objekte unterschiedlich. Dies kann die Vereinheitlichung des Anwendungsverhaltens verwirrend machen.
Mit dem VisitorInfo- Objekt können Sie die Informationen über den Besucher festlegen, bevor der Chat gestartet wird. Im Gegensatz dazu erfasst das PreChatForm- Objekt diese Informationen, sobald der Chat beginnt.
Ursprünglich war die Idee, das eine oder das andere in Ihrem Workflow zu verwenden, aber nicht beides gleichzeitig, was jetzt für iOS aktualisiert wurde.
Der Workflow mit JWT-Authentifizierung ändert auch das Verhalten von Chat. Weitere Informationen finden Sie in der Dokumentation ( Android | iOS ) oder in diesem Beitrag: Aktivieren authentifizierter Benutzer mit dem Chat SDK.
Lösungsschritte
iOS
Die Logik in iOS sieht wie folgt aus:
- Nehmen Sie die ChatAPIConfiguration s
visitorInfo
unddepartment
Eigenschaften. - Nehmen Sie die ChatConfiguration 's
preChatFormConfiguration
Anforderungen an die Daten. - Wenn die zugrunde liegenden Eigenschaften von
VisitorInfo
Null oder leere Zeichenfolgen sind und die entsprechenden Datenanforderungen nicht.hidden
, und zeigen Sie das Feld an. - Wenn die zugrunde liegenden Eigenschaften von
department
Null oder leere Zeichenfolgen sind und die entsprechenden Datenanforderungen nicht.hidden
, und zeigen Sie das Feld an. - Das SDK zeigt dem Benutzer das Formular an. Der Benutzer gibt die Details an oder überspringt sie
.optional
Felder nach eigenem Ermessen. - Das SDK sammelt die in das Formular eingegebenen Informationen.
Wenn ein Feld übersprungen wurde, wird auf die dort vorhandenen Konfigurationsdetails zurückgegriffen. Wenn das Feld leer ist, werden keine Details gesendet. - Das SDK weist die Abteilung und Anrufe zu
chat.profileProvider.setVisitorInfo(visitorInfo)
mit den VisitorInfo- Details des Formulars (die eingegebenen Daten werden mit der API-Konfiguration zusammengeführt, sofern sie nicht ausgefüllt wurde).
Beispiel:
func status(for info: String?) -> FormFieldStatus {
info?.isEmpty == true ? .optional: .hidden
}
let chatAPIConfig = ChatAPIConfiguration()
chatAPIConfig.visitorInfo = visitorInfo
chatAPIConfig.department = departmentName
chat.configuration = chatAPIConfig
chat.profileProvider.setVisitorInfo(visitorInfo)
let chatUIConfig = ChatConfiguration()
chatUIConfig.preChatFormConfiguration = .init(name: status(for: visitorInfo.name),
email: status(for: visitorInfo.email),
phoneNumber: status(for: visitorInfo.phoneNumber),
department: status(for: form.departmentId))
// pass chatUIConfig into buildUI(engines:, configs:)
Android
Für Versionen vor SDK Chat 3.2.0:
Bei Android ist die Logik anders. Die VisitorInfo wird vollständig gelöscht, wenn PreChatForm aktiviert ist, unabhängig davon, ob das Feld auf Erforderlich, Optional oder Ausgeblendet gesetzt ist.
Eine Möglichkeit, diese Einschränkung zu umgehen, besteht darin, die VisitorInfo nach dem Starten des Chats zu aktualisieren (mit Ausnahme der Abteilung, die nach dem Starten des Chats nicht mehr bearbeitet werden kann):
- erstellen
VisitorInfo
Objekt. - Geben Sie bereits bekannte Informationen über den Benutzer ein.
- Konfigurieren Sie das Pre-Chat-Formular so, dass die fehlenden Informationen abgefragt werden.
- Richten Sie den Beobachter ein.
- Starten Sie die Chat-Aktivität.
Sobald der PreChat abgeschlossen ist und der Chat in den Status STARTED wechselt, werden die Besucherinformationen aktualisiert.
Beispiel:
boolean visitorSet = false; // Generic condition to ensure that you only set those info once
// ...
public void setupObserver(){
final ObservationScope observationScope = new ObservationScope();
Chat.INSTANCE.providers().chatProvider().observeChatState(observationScope, new Observer<ChatState>() {
@Override
public void update(ChatState chatState) {
ChatSessionStatus chatStatus = chatState.getChatSessionStatus();
// Status achieved after the PreChatForm is completed
if (chatStatus == ChatSessionStatus.STARTED) {
// Update the information MID chat here. All info but Department can be updated
if (!visitorSet) {
// Add here the code to set the visitor info - visitorInfo would be a VisitorInfo type variable containing all the information to set
profileProvider.setVisitorInfo(visitorInfo, null);
visitorSet = true;
}
} else {
// There are few other statuses that you can observe but they are unused in this example
Log.d("DEBUG", "[observerSetup] - ChatSessionUpdate -> (unused) status : " + chatStatus.toString());
}
}
});
}
Aktualisieren Sie die bereitgestellten Codeskripts, um sie an Ihren Workflow anzupassen.
Ab Version 3.2.0:
Das neueste SDK ermöglicht eine flexiblere Nutzung von PreChatForm mit VisitorInfo. Weitere Informationen finden Sie in diesem Beitrag: Einstellungsinformationen für die Chat-Sitzung.
Dies kann nativ funktionieren, indem Sie dem Beispiel in der Dokumentation folgen.
Hinweis zur Übersetzung: Dieser Beitrag wurde mit automatischer Übersetzungssoftware übersetzt, um dem Leser ein grundlegendes Verständnis des Inhalts zu vermitteln. Trotz angemessener Bemühungen, eine akkurate Übersetzung bereitzustellen, kann Zendesk keine Garantie für die Genauigkeit übernehmen.
Sollten in Bezug auf die Genauigkeit der Informationen im übersetzten Beitrag Fragen auftreten, beziehen Sie sich bitte auf die englische Version des Beitrags, die als offizielle Version gilt.
0 Kommentare
Bitte melden Sie sich an, um einen Kommentar zu hinterlassen.