הטמעה באפליקציה ניידת
הכניסו את סוכן Syncanix לאפליקציית React Native או Flutter על ידי טעינת רכיב הווב בתוך WebView — ללא צורך ב-SDK מקורי.
רכיב Syncanix הוא רכיב ווב ו-WebView הוא דפדפן, ולכן אותה הטמעה בתג יחיד שרצה באתר שלכם רצה ללא שינוי בתוך אפליקציית React Native או Flutter. אתם מקבלים את הצ'אט המלא — מותאם לנייד, עם טיפול מובנה באזור הבטוח ובמקלדת המסך — בלי לפרסם SDK מקורי. העמוד הזה הוא המתכון.
איך זה עובד
אין שום דבר ייחודי לנייד להתקין. אתם מארחים דף ווב קטן שנוש א את סקריפט ההטמעה הרגיל, ואז טוענים את הדף הזה בתוך WebView במסך מלא. הרכיב עולה בתוך ה-WebView בדיוק כמו בדפדפן שולחני.
- ארחו דף שנושא את ההטמעהדף HTML יחיד במקור ה-HTTPS שלכם — לרוב נתיב ייעודי כמו /assistant — עם תג הסקריפט של Syncanix. הוסיפו את המקור הזה לרשימת המקורות המורשים של הרכיב במרחב העבודה שלכם בלוח הבקרה.
- טענו את הדף הזה בתוך WebView במסך מלאהפנו את react-native-webview או webview_flutter לכתובת הדף ותנו לו למלא את המסך. אין צורך בחיווט מקורי נוסף כדי שהצ'אט יעבוד.
הדף שאתם מארחים
הטעינו את הצ'אט כך שימלא את ה-WebView, ונקבו בשם ספק אסימון שהרכיב קורא לו בכל תור כדי לפעול בשם המשתמש המחובר. תג ה-meta viewport-fit=cover מאפשר ל צ'אט לכבד את האזורים הבטוחים של המכשיר.
<!-- https://help.yourapp.com/assistant — a page you host, loaded by the WebView -->
<!doctype html>
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover" />
<style>
html, body { margin: 0; height: 100%; }
#assistant { height: 100vh; }
</style>
<div id="assistant"></div>
<script
type="module"
src="https://cdn.syncanix.com/widget.js"
data-key="pk_live_..."
data-chat-size="embedded"
data-mount-target="#assistant"
data-token-provider="getSyncanixToken"
></script>
<script>
// The widget calls this once per turn; return the token your app injected.
window.getSyncanixToken = () => window.__SYNCANIX_TOKEN__ ?? undefined;
</script>הסקריפט המוטמע מגדיר את הפונקציה הגלובלית שהרכיב קורא לה בכל תור; הקוד המקורי שלכם מגדיר את window.__SYNCANIX_TOKEN__ לפני שהדף נטען (למטה).
React Native
הציגו WebView במסך מלא והזריקו את אסימון המשתמש לפני שתוכן הדף נטען. השאירו את JavaScript מופעל — הוא מופעל כברירת מחדל.
import { WebView } from 'react-native-webview';
export function AssistantScreen({ userToken }: { userToken: string }) {
return (
<WebView
source={{ uri: 'https://help.yourapp.com/assistant' }}
// Hand the signed-in user's token to the page before its content loads.
injectedJavaScriptBeforeContentLoaded={
`window.__SYNCANIX_TOKEN__ = ${JSON.stringify(userToken)}; true;`
}
// JavaScript is enabled by default; the widget needs it.
/>
);
}כאשר האסימון מתחדש, דחפו את הערך החדש עם webviewRef.injectJavaScript('window.__SYNCANIX_TOKEN__ = "..."; true;').
Flutter
השתמשו ב-webview_flutter עם JavaScript ללא הגבלה, והגדירו את האסימון כשהדף מתחיל להיטען.
final controller = WebViewController()
..setJavaScriptMode(JavaScriptMode.unrestricted)
..setNavigationDelegate(NavigationDelegate(
onPageStarted: (_) => controller.runJavaScript(
'window.__SYNCANIX_TOKEN__ = ${jsonEncode(userToken)};',
),
))
..loadRequest(Uri.parse('https://help.yourapp.com/assistant'));
// In build(): return WebViewWidget(controller: controller);חיבור המשתמש
WebView אינו חולק שום סשן עם האפליקציה המקורית שלכם, ולכן הרכיב אינו יכול לדעת מי מחובר אלא אם תגידו לו. מסרו לו את אסימון המשתמש מ-SDK הזהות של האפליקציה שלכם; הרכיב אז פועל בשם אותו משתמש, מוגבל בהרשאות שלו עצמו — אותו מודל פעולה בשם המשתמש כמו בווב.
- האסימון הוא ה-JWT של המשתמש מספק הזהות שלכם — אותו אחד שה-API שלכם כבר בוטח בו.
- הוא נקרא פעם אחת בכל תור צ'אט, כך שאסימון מחודש נקלט אוטומטית.
- בעת ההתנתקות, נקו אותו (הגדירו את window.__SYNCANIX_TOKEN__ ל-null) כדי שהעוזר יפסיק לפעול בשם אותו משתמש.
לפני ההשקה
- ארחו את הדף במקור HTTPS אמיתי (לא נכס file:// ארוז) והוסיפו את המקור הזה לרשימת המקורות המורשים של הרכיב — הרשימה מותאמת לפי מקור.
- הפעילו JavaScript ב-WebView (React Native: מופעל כברירת מחדל; Flutter: JavaScriptMode.unrestricted).
- הוסיפו viewport-fit=cover כדי שהצ'אט יתרחק מהמגרעת וממחוון הבית.
- תנו למקלדת המסך לשנות את גודל ה-viewport במקום לכסות אותו; הרכיב שומר את תיבת הכתיבה גלויה באמצעות visualViewport.