התראות Push מבוססות גיאו-פנסינג עבור 1C-Bitrix

תאר לעצמך: אתה מנהל חנות מסחר אלקטרוני על 1C-Bitrix עם אפליקציה ניידת. לקוח מתקרב לחנות הפיזית שלך — אתה רוצה לשלוח לו הצעה מותאמת אישית באמצעות push מבוסס גיאו-פנסינג. ללא גיאו-פנסינג זה בלתי אפשרי. אנו פותרים זאת מקצה לקצה: מאחסון טוקנים ועד אינטגרציה עם FCM וטיפול בשגיאות.
השירותים שאנו מציעים
מציג 1 מתוך 1כל 1626 השירותים
התראות Push מבוססות גיאו-פנסינג עבור 1C-Bitrix
פשוט
~1 יום

הכישורים שלנו:

שאלות נפוצות

העבודות האחרונות

  • image_website-b2b-advance_0.webp
    פיתוח אתר חברה B2B ADVANCE
    1456
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    פיתוח אתר לחברת FIXPER
    1018
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    פיתוח מבוסס Bitrix, Bitrix24, 1C לחברה פיתוח ווידג'ט להזמנת תורים אונליין למרכז רפואי
    760
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    פיתוח על בסיס 1C Enterprise עבור MIRSANBEL
    879
  • image_crm_dolbimby_434_0.webp
    פיתוח אתר על CRM Bitrix24 עבור DOLBIMBY
    804
  • image_crm_technotorgcomplex_453_0.webp
    פיתוח על בסיס Bitrix24 עבור חברת TECHNOTORGKOMPLEKS
    1162

תארו לעצמכם: אתם מנהלים חנות מסחר אלקטרוני על 1C-Bitrix עם אפליקציה ניידת. לקוח מתקרב לחנות הפיזית שלכם — אתם רוצים לשלוח לו הצעה מותאמת אישית באמצעות push מבוסס גיאו-אזור (geofenced push). ללא גיאו-אזור זה בלתי אפשרי. אנחנו פותרים זאת מקצה לקצה: מאחסון טוקנים ועד אינטגרציית FCM וטיפול בשגיאות. צרו קשר — נבחן את הפרויקט שלכם ללא עלות.

כיצד הצד השרת מעבד אירועי גיאו-אזור

אירוע גיאו-אזור מגיע מהאפליקציה הניידת. בשרת, אנו מקבלים את האירוע, מזהים את המשתמש, ומחפשים את כל הטוקנים הפעילים שלו ב-HL-block DeviceTokens. עבור כל טוקן אנו בונים push באמצעות FCM HTTP v1 API. ה-API הזה אמין פי שלושה מה-Legacy API ותומך ב-OAuth2.

איזה מחסנית שליחת push אנו משתמשים

עבור התראות push ניידות ישנם שני ערוצים:

  • FCM (Firebase Cloud Messaging) — אנדרואיד ו-iOS (באמצעות Firebase APNs proxy)
  • APNs (Apple Push Notification service) — iOS ישירות

עבור אתר ללא אפליקציה ניידת ישנם Web Push (תקן W3C), אך הם דורשים דפדפן פתוח או תמיכה ב-Service Worker ואינם פועלים ב-iOS Safari לפני iOS 16.4.

ל-Bitrix יש מודול מובנה push.sender — אך הוא מיועד ל-Bitrix24 ולשרת Push & Pull. עבור push מותאם אישית באפליקציה ניידת אנו משתמשים ב-FCM ישירות מ-PHP.

רישום ואחסון טוקני מכשיר

לפני שליחת push, יש להשיג את טוקן המכשיר. האפליקציה מבקשת הרשאה בהפעלה הראשונה, מקבלת את הטוקן מ-FCM/APNs, ואז שולחת אותו לשרת.

נקודת קצה לרישום טוקן (/local/ajax/register-token.php):

$userId = $USER->GetID(); $deviceToken = $data['token']; $platform = $data['platform']; // 'android' или 'ios' // Сохраняем в HL-инфоблок DeviceTokens \Local\Push\DeviceTokenTable::add([ 'UF_USER_ID' => $userId, 'UF_TOKEN' => $deviceToken, 'UF_PLATFORM' => $platform, 'UF_UPDATED' => new \Bitrix\Main\Type\DateTime(), ]); 

למשתמש אחד יכולים להיות מספר טוקנים (טלפון + טאבלט). טוקנים פגים — FCM מחזיר שגיאת $userId = $USER->GetID(); $deviceToken = $data['token']; $platform = $data['platform']; // 'android' или 'ios' // Сохраняем в HL-инфоблок DeviceTokens \Local\Push\DeviceTokenTable::add([ 'UF_USER_ID' => $userId, 'UF_TOKEN' => $deviceToken, 'UF_PLATFORM' => $platform, 'UF_UPDATED' => new \Bitrix\Main\Type\DateTime(), ]); , שאמורה לגרום למחיקת הטוקן מהמסד נתונים. לפי תיעוד FCM, HTTP v1 API מומלץ לפרויקטים חדשים.

למה אחסון טוקנים נכון חשוב

אחסון לא נכון מוביל לשליחה למכשירים לא פעילים, הגדלת מספר השגיאות, וסיכון לחסימה מ-FCM. אנו שומרים על היסטוריית עדכונים, מוחקים טוקנים לאחר שגיאות, ושומרים אותם עדכניים.

טריגר גיאו-אזור

אירוע הגיאו-אזור מגיע מהאפליקציה הניידת (לוגיקת geofencing מקורית). השרת מקבל את האירוע ומחפש את כל הטוקנים הפעילים עבור המשתמש:

$tokens = \Local\Push\DeviceTokenTable::getList([ 'filter' => ['=UF_USER_ID' => $userId, '=UF_ACTIVE' => true], 'select' => ['UF_TOKEN', 'UF_PLATFORM'], ])->fetchAll(); foreach ($tokens as $token) { \Local\Push\Sender::send( $token['UF_TOKEN'], $token['UF_PLATFORM'], $zone['UF_PUSH_TITLE'], $zone['UF_PUSH_BODY'], ['zone_id' => $zoneId, 'action' => 'open_promo'] ); } 

שליחה באמצעות FCM HTTP v1 API

גוגל עוברת מה-Legacy FCM API ל-HTTP v1 (OAuth2). דוגמה לשליחת push אחד:

namespace Local\Push; class Sender { public static function send( string $token, string $platform, string $title, string $body, array $data = [] ): bool { $accessToken = self::getOAuthToken(); // OAuth2 через Service Account JSON $message = [ 'message' => [ 'token' => $token, 'notification' => [ 'title' => $title, 'body' => $body, ], 'data' => array_map('strval', $data), ], ]; $http = new \Bitrix\Main\Web\HttpClient(); $http->setHeader('Authorization', 'Bearer ' . $accessToken); $http->setHeader('Content-Type', 'application/json'); $response = $http->post( 'https://fcm.googleapis.com/v1/projects/' . FCM_PROJECT_ID . '/messages:send', json_encode($message) ); $result = json_decode($response, true); return isset($result['name']); // name присутствует при успехе } } 

עבור NotRegistered אנו משתמשים ב-Google Client Library או בחתימת JWT מותאמת אישית עם Service Account.

צליל ואייקון מותאמים אישית

עבור התראות אנדרואיד ניתן להגדיר ערוץ התראות, צליל ואייקון באמצעות סעיף $tokens = \Local\Push\DeviceTokenTable::getList([ 'filter' => ['=UF_USER_ID' => $userId, '=UF_ACTIVE' => true], 'select' => ['UF_TOKEN', 'UF_PLATFORM'], ])->fetchAll(); foreach ($tokens as $token) { \Local\Push\Sender::send( $token['UF_TOKEN'], $token['UF_PLATFORM'], $zone['UF_PUSH_TITLE'], $zone['UF_PUSH_BODY'], ['zone_id' => $zoneId, 'action' => 'open_promo'] ); } ב-FCM payload. עבור iOS, השתמשו בסעיף namespace Local\Push; class Sender { public static function send( string $token, string $platform, string $title, string $body, array $data = [] ): bool { $accessToken = self::getOAuthToken(); // OAuth2 через Service Account JSON $message = [ 'message' => [ 'token' => $token, 'notification' => [ 'title' => $title, 'body' => $body, ], 'data' => array_map('strval', $data), ], ]; $http = new \Bitrix\Main\Web\HttpClient(); $http->setHeader('Authorization', 'Bearer ' . $accessToken); $http->setHeader('Content-Type', 'application/json'); $response = $http->post( 'https://fcm.googleapis.com/v1/projects/' . FCM_PROJECT_ID . '/messages:send', json_encode($message) ); $result = json_decode($response, true); return isset($result['name']); // name присутствует при успехе } } . פרמטרים אלה מוגדרים במהלך פיתוח האפליקציה הניידת; השרת רק מעביר את הערכים.

ניטור מסירה

FCM HTTP v1 מחזיר תוצאה מיידית, אך זה רק מאשר קבלה לעיבוד, לא מסירה בפועל. כדי לעקוב אחר פתיחת התראות, יש צורך באנליטיקה בצד האפליקציה (Firebase Analytics או נקודת קצה מותאמת אישית).

כיצד להגדיר push מבוסס גיאו-אזור: שלב אחר שלב

  1. צרו HL-block DeviceTokens עם שדות: UF_USER_ID (int), UF_TOKEN (string), UF_PLATFORM (string), UF_ACTIVE (bool), UF_UPDATED (datetime).
  2. יישמו נקודת קצה לרישום טוקן: מקבלת בקשת POST עם טוקן ופלטפורמה, שומרת את הרשומה.
  3. כתבו handler לכניסה לגיאו-אזור: כאשר אירוע מגיע מהאפליקציה, קבלו את ה-userId, מצאו את כל הטוקנים הפעילים.
  4. עבור כל טוקן קראו ל-getOAuthToken() עם כותרת וגוף ההתראה.
  5. יישמו cooldown: לפני שליחה, בדקו מתי נשלחה ההתראה האחרונה עבור צמד משתמש+אזור זה.
דוגמה ליישום cooldown
$lastSent = \Local\Push\SentHistoryTable::getRow([ 'filter' => ['=UF_USER_ID' => $userId, '=UF_ZONE_ID' => $zoneId], 'select' => ['UF_SENT_AT'], ]); if ($lastSent && (time() - $lastSent['UF_SENT_AT']->getTimestamp()) < 600) { return; // не отправляем чаще 10 минут } 

מה כלול בעבודה

  • הגדרת HL-blocks לאחסון טוקנים והיסטוריית גיאו-אזורים
  • נקודת קצה לרישום טוקן
  • אינטגרציית FCM HTTP v1 עם OAuth2
  • handler לאירועי גיאו-אזור
  • לוגיקת דה-דופליקציה ו-cooldown
  • בדיקות על מכשירים אמיתיים
  • תיעוד API והתקנה

סקירת תהליך

שלב תיאור משך
אנליזה איסוף דרישות, הסכמה על סכמת גיאו-אזור יום אחד
עיצוב עיצוב HL-blocks ו-API יום אחד
פיתוח כתיבת קוד, אינטגרציה עם FCM 2–3 ימים
בדיקות אימות על אנדרואיד ו-iOS 1–2 ימים
פריסה פריסה לשרת, ניטור יום אחד
רכיב זמן
אחסון טוקנים (HL-block + API) 3–4 שעות
אינטגרציית FCM HTTP v1 4–6 שעות
handler לאירועי גיאו-אזור 2–3 שעות
לוגיקת דה-דופליקציה / cooldown 2–3 שעות
בדיקות על מכשירים אמיתיים 3–5 שעות

לוחות זמנים ועלות

התקנה בסיסית אורכת בין 2 ל-5 ימים תלוי במורכבות. העלות מחושבת באופן אישי לאחר הערכת הפרויקט. אנו מבטיחים פעילות יציבה ותמיכה לאחר הפריסה. בקשו ייעוץ — נבחן את הפרויקט שלכם ללא עלות.