ข้ามไปที่เนื้อหา

การส่งแบบเดี่ยว

ข้อกำหนดเบื้องต้น

ในการซิงค์กับ Single Push API ให้แน่ใจว่าคุณได้ออกโทเค็นการอนุญาต (API KEY) หากคุณมีคีย์แล้ว ให้ขอสิทธิ์เพิ่มเติม ดูที่ Hive Server API > Notification > Push v4 > Authentication เพื่อตรวจสอบวิธีการขอและออกโทเค็นการอนุญาต

Note

Single Puch API เป็นแบบอะซิงโครนัสและประมวลผลตามลำดับ, API Request > Token Lookup > Send.

  • API Request: ตรวจสอบข้อมูลคำขอและส่งคืนรหัสการตอบสนองไปยังคำขอ
  • Token Lookup: ค้นหาสัญลักษณ์การส่งข้อมูลไปยังข้อมูลคำขอ อาจมีสถานการณ์ที่ไม่มีสัญลักษณ์
  • Send: โอนข้อมูลไปยังเซิร์ฟเวอร์ส่งข้อมูลของแต่ละตลาด (เช่น ADM, APNS, FCM) การตอบสนองที่ได้รับจากตลาดจะแสดงผลลัพธ์การประมวลผล
  • เมื่อการประมวลผลล้มเหลวในขั้นตอนการค้นหาสัญลักษณ์และการส่ง จะไม่มีการส่งการตอบสนองไปยังลูกค้าที่เรียกเซิร์ฟเวอร์ส่งข้อมูล หากคุณไม่ได้รับการส่งข้อมูลภายใน 10 นาทีหลังจากที่คุณส่งข้อมูล โปรดติดต่อทีม Solution Architect, Com2uS Platform.

เข้าถึง URL ตามสภาพแวดล้อม

เซิร์ฟเวอร์ URL
การผลิต https://notification.withhive.com
แซนด์บ็อกซ์ https://sandbox-notification.withhive.com

ข้อมูลพื้นฐานและพารามิเตอร์การร้องขอ

วิธีการ POST
URL /push/send
หมวดหมู่ ชื่อฟิลด์ คำอธิบาย ประเภท จำเป็น
Header Content-Type application/json;charset=utf-8
Authorization bearer {{API KEY}}
Body notice ว่าต้องการให้ส่งเป็นการแจ้งเตือนหรือไม่ (ค่าเริ่มต้น: false).
true: ส่งเป็นการแจ้งเตือน.
จะไม่ถูกส่งไปยังผู้รับที่ไม่ได้ตกลงรับการแจ้งเตือน หากส่งในช่วงเวลากลางคืน (21:00~08:00) จะต้องมีการยินยอมเพิ่มเติมในช่วงเวลากลางคืน ดูรายละเอียดเพิ่มเติมที่ กระบวนการแจ้งเตือน.
false: ส่งเป็นการแจ้งเตือนเกม (การแจ้งเตือนที่จำเป็นต้องดำเนินการ). จะถูกส่งไม่ว่าผู้รับจะยินยอมรับการแจ้งเตือนหรือไม่.
※ หากการแจ้งเตือนถูกบล็อกที่ระดับอุปกรณ์/OS การแจ้งเตือนอาจไม่ถูกส่งไม่ว่าจะตั้งค่าแจ้งเตือนอย่างไร
Boolean O
identifiers ข้อมูลตัวระบุ (สูงสุด 100) โครงสร้างตัวระบุ และ ตัวอย่าง สามารถดูได้ด้านล่าง identifier[] O
game gameid รหัสเกม String O
appids รายการ AppIDs
หาก AppID ที่แมพกับตัวระบุไม่ถูกต้อง จะไม่ถูกส่ง

คำแนะนำ

  • สำหรับตัวระบุที่อิงจากอุปกรณ์ (did): เพิ่ม AppID ที่แมพ
  • สำหรับตัวระบุที่อิงจากบัญชี (playerId): เพิ่ม AppIDs ที่แมพทั้งหมด
  • หากมีตัวระบุหลายตัว: ตรวจสอบลำดับความสำคัญใน โครงสร้างตัวระบุ
String[] X
enableLocale ว่าจะใช้ภาษาท้องถิ่นหรือไม่

    true

  • ส่งข้อความในภาษาที่ตั้งค่าโดยผู้รับการส่งข้อความ โดยอิงจากรหัสภาษาที่บันทึกไว้กับข้อมูลโทเคน
  • เกณฑ์ในการกำหนดภาษาเมื่อบันทึกโทเคน
  • 1st: ภาษาเกม
  • 2nd: ภาษาอุปกรณ์ (ถ้าไม่มีการให้ภาษาของเกม)

  • false

  • ไม่สนใจภาษาท้องถิ่นและส่งเฉพาะค่าผ่าน payload เท่านั้น
Boolean O
payload single หาก enableLocale=false ให้ขอด้วยฟิลด์เดียว โครงสร้างข้อความ อยู่ด้านล่าง Message O
defaultLanguage หาก enableLocale=true ให้ตั้งเป็นภาษาพื้นฐาน String
locale {{LANGUAGE}} หาก enableLocale=true ให้ตั้งค่าผ่านฟิลด์ locale ซึ่งเหมือนกับข้อมูลข้อความในฟิลด์เดียว Message
option ข้อมูลตัวเลือก อยู่ด้านล่าง Option X
actionInfo android ข้อมูล ActionPayload อยู่ด้านล่าง ActionPayload X
ios ข้อมูล ActionPayload อยู่ด้านล่าง ActionPayload X

การแจ้งเตือนการทำงาน

การแจ้งเตือนจะถูกส่งไปยังผู้ใช้แอปเกมที่ได้ตกลงที่จะรับการแจ้งเตือนเท่านั้น หากการแจ้งเตือนถูกส่งระหว่าง 21:00~08:00 จะต้องมีการยินยอมเพิ่มเติมสำหรับการแจ้งเตือนในเวลากลางคืน

รายละเอียดของกระบวนการแจ้งเตือนมีดังนี้:

  • หากผู้ใช้ไม่เห็นด้วยที่จะรับการแจ้งเตือนข้อความ แจ้งเตือนทั้งหมดจะไม่ถูกส่ง
  • ผู้ใช้ที่เห็นด้วยที่จะรับการแจ้งเตือนข้อความเท่านั้นที่สามารถให้ความยินยอมสำหรับการแจ้งเตือนในเวลากลางคืน.
Warning

ข้อบังคับสำหรับการแจ้งเตือนโฆษณาสำหรับผู้ใช้ชาวเกาหลี

เมื่อส่งการแจ้งเตือนให้กับผู้ใช้ชาวเกาหลี จะถือว่าเป็นการแจ้งเตือนโฆษณาและต้องปฏิบัติตามมาตรา 50 ของ「พระราชบัญญัติข้อมูลและการสื่อสาร」 ข้อความการแจ้งเตือนโฆษณาต้องรวมถึงวลีที่ระบุว่าเป็นโฆษณาและคำแนะนำในการยกเลิกการรับข้อมูล

  • ตัวอย่างของข้อความแจ้งเตือนโฆษณา: (โฆษณา) {message_body} (ยกเลิก: เปลี่ยนในการตั้งค่า)
Note
  • สำหรับการรับข้อมูลแบบกดครั้งเดียวอย่างราบรื่น แนะนำให้ป้อนข้อมูลเพียงรายการเดียวสำหรับฟิลด์ appids และ identifiers
  • หากมี identifiers หรือ appids หลายรายการรวมอยู่ในคำขอ อาจทำให้เกิดความล่าช้าในการส่งข้อมูลเนื่องจากไม่สามารถกำหนดเงื่อนไขการค้นหาได้
  • แนะนำให้ระบุค่าตัวระบุที่มีลำดับความสำคัญสูงสุด และหลีกเลี่ยงการกำหนดตัวระบุที่มีเพียงค่าด้วย did เท่านั้น
  • หลีกเลี่ยงคำขอที่ระบุเฉพาะ gameid ในฟิลด์เกม
  • หากไม่มีข้อมูลในฟิลด์ appids จะมีการค้นหาทั้งหมด appids ที่รวมอยู่ใน gameid ซึ่งอาจทำให้เกิดความล่าช้าในการส่งข้อมูล

โครงสร้างตัวระบุ

หมวดหมู่ ชื่อฟิลด์ คำอธิบาย ประเภท จำเป็น
identifier identifier ต้องรวมอย่างน้อยหนึ่งในสอง
ลำดับความสำคัญ: playerId, จากนั้น did
Long O
playerId
did

ตัวอย่างตัวระบุ

    [
        {
            "playerId":51234,
            "did":1234
        }
    ]

โครงสร้างข้อความ

หมวดหมู่ ชื่อฟิลด์ คำอธิบาย ประเภท จำเป็น
ข้อความ android title ชื่อเรื่อง String O
message เนื้อหา String O
messageExpanded เนื้อหาขยาย String O
imageUrl URL รูปภาพ String X
ticker Ticker String X
summaryText สรุป String X
ios title ชื่อเรื่อง String O
message เนื้อหา String O
mediaUrl URL รูปภาพ String X

ข้อมูลตัวเลือก

หมวดหมู่ ชื่อฟิลด์ คำอธิบาย ประเภท จำเป็น
ตัวเลือก badge หมายเลขที่แสดงบนไอคอนแอปเมื่อได้รับการแจ้งเตือน (ค่าเริ่มต้น: 1) จำนวนเต็ม X
overwrite ว่าจะใช้ฟีเจอร์การเขียนทับการแจ้งเตือนของ Android หรือไม่ (ค่าเริ่มต้น: false) Boolean X
collapseKey ค่าคีย์เมื่อใช้การเขียนทับการแจ้งเตือน (สตริงของตัวเลข: "123") สตริง X
engagement การมีส่วนร่วมของผู้ใช้ สตริง X
comment ความคิดเห็น สตริง X
groupKey คีย์กลุ่มสำหรับการจัดกลุ่มการแจ้งเตือนบนอุปกรณ์ iOS และ Android สำหรับรายละเอียดเพิ่มเติม โปรดดูเอกสารด้านล่าง สตริง X
android icon ชื่อไฟล์รูปไอคอนที่แสดงเมื่อมีการแจ้งเตือนปรากฏบนอุปกรณ์ของผู้ใช้ ไฟล์รูปภาพต้องมีอยู่ใน /src/main/res/drawable สำหรับรูปแบบไฟล์รูปภาพที่รองรับ โปรดดู ที่นี่. เพื่อแสดงภาพจากเว็บ ให้ป้อน URL ของภาพในฟิลด์นี้แทนชื่อไฟล์ หากฟิลด์นี้ว่างเปล่า จะมีการแสดงภาพไอคอนแอป สตริง X
sound ชื่อไฟล์เสียงที่จะเล่นเมื่อมีการแจ้งเตือนปรากฏบนอุปกรณ์ของผู้ใช้ ไฟล์เสียงต้องมีอยู่ใน /src/main/res/raw หากฟิลด์นี้ว่างเปล่า จะใช้เสียงเริ่มต้นของระบบ สตริง X
priority ระดับความสำคัญของข้อความที่ส่งไปยังอุปกรณ์ Android ซึ่งควบคุมเวลาการจัดส่งตาม FCM สามารถเป็น NORMAL หรือ HIGH ค่าเริ่มต้นคือ NORMAL สำหรับรายละเอียดเพิ่มเติม โปรดดู คู่มือ Firebase.
  • NORMAL = ระดับความสำคัญเริ่มต้นสำหรับข้อความข้อมูล โดยปกติจะถูกจัดส่งทันทีเมื่ออุปกรณ์ไม่ได้อยู่ในโหมด Doze อาจมีการล่าช้าเพื่อประหยัดแบตเตอรี่หากอุปกรณ์กำลังนอนหลับ ใช้สำหรับข้อความที่เวลาไม่สำคัญ
  • HIGH = FCM พยายามจัดส่งทันที อาจปลุกอุปกรณ์จากโหมด Doze ใช้สำหรับข้อความที่ต้องการการมีส่วนร่วมจากผู้ใช้
enum(NORMAL, HIGH) X
ios sound ชื่อไฟล์เสียงที่จะเล่นเมื่อมีการแจ้งเตือนปรากฏบนอุปกรณ์ของผู้ใช้ ไฟล์เสียงต้องมีอยู่ใน Library/Sounds ของคอนเทนเนอร์แอปหรือในบันเดิลหลัก หากว่างเปล่า จะใช้ "default" และเสียงเริ่มต้นของ ระบบ จะถูกเล่น สตริง X

ActionPayload

ActionPayload เป็นรูปแบบข้อมูลที่ส่งเมื่อใช้ปุ่มการกระทำแบบพุช ซึ่งเป็นฟีเจอร์เพิ่มเติมของ API การพุชแบบเดี่ยว

ปุ่มการกระทำการผลักดันเป็นฟีเจอร์การแจ้งเตือนที่มีอยู่ใน SDK ซึ่งจะแสดงเป็นปุ่มระบบเมื่อกดนานที่การแจ้งเตือนการผลักดัน

สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับปุ่มการกระทำแบบพุช โปรดดูคู่มือด้านล่าง

Warning

โปรดทราบสิ่งต่อไปนี้เมื่อใช้ปุ่มการกระทำแบบ push:

  • ใช้งานได้เฉพาะใน SDK Android & iOS 4.25.5.0 หรือสูงกว่า
  • มีเพียง identifier เดียวที่ใช้ได้ในฟิลด์ identifiers และ playerId เป็นสิ่งจำเป็น
  • นักพัฒนาต้องรับผิดชอบต่อการตรวจสอบความปลอดภัยของ URL ที่เรียกโดยปุ่มการกระทำแบบพุช

โครงสร้างข้อมูล ActionPayload

เมื่อขอ API การส่งข้อมูลแบบเดี่ยว ข้อมูลที่รวมอยู่ใน ActionPayload มีดังนี้

ชื่อฟิลด์ คำอธิบาย ประเภท จำเป็น
category ตัวระบุหมวดหมู่ สำหรับชุดปุ่มการกระทำการผลักดัน ใช้เพื่อระบุชุด Hive SDK มีชุดปุ่มการกระทำการผลักดันเริ่มต้น ดูชุดปุ่มการกระทำการผลักดันเริ่มต้น
สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับหมวดหมู่ โปรดดูที่ เว็บไซต์นักพัฒนาของ Apple.
iOS: จำเป็น, Android: ไม่จำเป็นและถูกละเลย
String O iOS
X Android
actions รายการปุ่มระบบที่จะแสดงในการแจ้งเตือนการผลักดัน
(Android: สูงสุด 3 / iOS: ขึ้นอยู่กับชุดปุ่มการกระทำการผลักดัน)
ดู ข้อมูลการกระทำ ด้านล่าง
Action[] O

การกระทำ

การกระทำคือข้อมูลสำหรับแต่ละปุ่มระบบใน ActionPayload พารามิเตอร์ที่รวมอยู่ใน Action มีดังต่อไปนี้

ชื่อฟิลด์ คำอธิบาย ประเภท จำเป็น
actionId รหัสระบุการกระทำ สำหรับปุ่มการกระทำการส่งการแจ้งเตือน ใช้เพื่อระบุปุ่มระบบในการแจ้งเตือนแบบพุช.
สำหรับรายละเอียดเพิ่มเติม โปรดดูที่ คู่มือของนักพัฒนา Apple.
iOS: จำเป็น, Android: ไม่จำเป็นและจะถูกละเลย
String O iOS
X Android
titles ข้อความปุ่มหลายภาษา ใช้ตามพารามิเตอร์ enableLocale หากไม่พบรหัสภาษาที่ถูกต้อง จะใช้ default.
key = รหัสภาษา, default key เป็นสิ่งจำเป็น, value = ชื่อปุ่ม
หากชื่อปุ่มยาวเกินไป อาจถูกตัดทอน กรุณากำหนดความยาวที่เหมาะสม
เฉพาะ Android
Map O Android
X iOS
actionType ประเภทการกระทำ (CURL, CLOSE) ค่าเริ่มต้น: CLOSE
CURL จะดำเนินการเรียก URL ด้วยค่าของฟิลด์ action.
CLOSE จะปิดการแจ้งเตือนแบบพุช.
enum(CURL, CLOSE) O
action การกระทำที่จะดำเนินการตามประเภทการกระทำ
เช่น, https://....
จำเป็นหาก actionType เป็น CURL.
String X

ผลลัพธ์ > โครงสร้างพารามิเตอร์การตอบกลับ

หมวดหมู่ ชื่อฟิลด์ คำอธิบาย
หัวข้อ Content-Type application/json;charset=utf-8
UUID {{UUID}}
เนื้อหา - ว่างเปล่าหากสำเร็จ

รหัสสถานะการตอบกลับ

คีย์ ค่า คำอธิบาย
200 สำเร็จ (เนื้อหาว่างเปล่า)
400 ข้อความไม่ถูกต้อง ข้อมูล POST ขาดหายไป, ข้อผิดพลาดรูปแบบ JSON, องค์ประกอบที่จำเป็นขาดหายไปหรือไม่ถูกต้อง
401 ไม่ได้รับอนุญาต หัวข้อการอนุญาตขาดหายไปหรือไม่ถูกต้อง, API KEY ยังไม่ได้ลงทะเบียน, ไม่มีสิทธิ์เข้าถึง API นี้
403 ห้ามเข้าถึง รูปแบบหัวข้อการอนุญาตไม่ใช่ "Bearer" (รองรับเฉพาะ Bearer)
404 ไม่พบ URL ที่ร้องขอไม่ถูกต้อง
500 ข้อผิดพลาดของเซิร์ฟเวอร์ภายใน ข้อผิดพลาดของเซิร์ฟเวอร์ภายใน
502 เกตเวย์ไม่ถูกต้อง เซิร์ฟเวอร์เกตเวย์ Push เกินกำลัง, เครือข่ายพยายามเชื่อมต่อที่ไม่ถูกต้อง
503 บริการไม่พร้อมใช้งาน เซิร์ฟเวอร์ API หรือเซิร์ฟเวอร์การตรวจสอบสิทธิ์ไม่ทำงาน

ตัวอย่างโค้ด

  • คำขอ ("enableLocale":false)

      POST /push/send HTTP/1.1
        Host: sandbox-notification.qpyou.cn
        Content-Type: application/json
        Authorization: Bearer {API KEY}
        Content-Length: [auto calculated]
    
      {
          "notice": false,
          "identifiers": [
              {
                  "playerId": 200001358,
                  "did": 300010915
              }
          ],
          "game": {
              "gameid": "com.com2us.hivesdk",
              "appids": [
                  "com.com2us.hivesdk.normal.freefull.google.global.android.common",
                  "com.com2us.hivesdk.normal.freefull.apple.global.ios.universal"
              ]
          },
          "enableLocale": false,
          "payload": {
              "single": {
                  "android": {
                      "title": "android title",
                      "message": "android message",
                      "messageExpanded": "",
                      "imageUrl": "",
                      "ticker": "",
                      "summaryText": ""
                  },
                  "ios": {
                      "title": "ios title",
                      "message": "ios message",
                      "mediaUrl": ""
                  }
              },
              "option": {
                  "badge": "1",
                  "overwrite": false,
                  "collapseKey": "",
                  "engagement": "",
                  "groupKey": "",
                  "android": {
                      "icon": "",
                      "sound": "",
                      "priority": "normal"
                  },
                  "ios": {
                      "sound": ""
                  }
              }
          },
          "actionInfo": {
              "android": {
                  "actions": [
                      {
                          "titles": {
                              "default": "OK"
                          },
                          "actionType": "CURL",
                          "action": "https://examplecurl.com"
                      },
                      {
                          "titles": {
                              "default": "Cancel"
                          },
                          "actionType": "CLOSE",
                          "action": ""
                      }
                  ]
              },
              "ios": {
                  "category": "CONFIRM_CATEGORY",
                  "actions": [
                      {
                          "actionId": "CONFIRM_ID",
                          "actionType": "CURL",
                          "action": "https://examplecurl.com"
                      },
                      {
                          "actionId": "CLOSE_ID",
                          "actionType": "CLOSE",
                          "action": ""
                      }
                  ]
              }
          }
      }
    

  • คำขอ ("enableLocale":true)

    POST /push/send HTTP/1.1
    Host: sandbox-notification.qpyou.cn
    Content-Type: application/json
    Authorization: Bearer {API KEY}
    Content-Length: [auto calculated]
    
    {
        "notice": false,
        "identifiers": [
            {
                "playerId": 200001358,
                "did": 300010915
            }
        ],
        "game": {
            "gameid": "com.com2us.hivesdk",
            "appids": [
                "com.com2us.hivesdk.normal.freefull.google.global.android.common",
                "com.com2us.hivesdk.normal.freefull.apple.global.ios.universal"
            ]
        },
        "enableLocale": true,
        "payload": {
            "defaultLanguage": "en",
            "locale": {
                "ko": {
                    "android": {
                        "title": "테스트_한국어 제목",
                        "message": "테스트_한국어 메세지"
                    },
                    "ios": {
                        "title": "테스트_한국어 제목",
                        "message": "테스트_한국어 메세지"
                    }
                },
                "en": {
                    "android": {
                        "title": "test_English title",
                        "message": "test_English message"
                    },
                    "ios": {
                        "title": "test_English title",
                        "message": "test_English message"
                    }
                }
            },
            "option": {
                "badge": 1,
                "overwrite": true,
                "collapseKey": "99",
                "groupKey": "",
                "android": {
                    "icon": "GoogleIcon",
                    "sound": "GoogleSound",
                    "priority": "normal"
                },
                "ios": {
                    "sound": "AppleSound"
                }
            }
        },
        "actionInfo": {
            "android": {
                "actions": [
                    {
                        "titles": {
                            "default": "ตกลง",
                            "en": "OK",
                            "ko": "확인"
                        },
                        "actionType": "CURL",
                        "action": "https://examplecurl.com"
                    },
                    {
                        "titles": {
                            "default": "ยกเลิก",
                            "en": "Cancel",
                            "ko": "취소"
                        },
                        "actionType": "CLOSE",
                        "action": ""
                    }
                ]
            },
            "ios": {
                "category": "CONFIRM_CATEGORY",
                "actions": [
                    {
                        "actionId": "CONFIRM_ID",
                        "actionType": "CURL",
                        "action": "https://examplecurl.com"
                    },
                    {
                        "actionId": "CLOSE_ID",
                        "actionType": "CLOSE",
                        "action": ""
                    }
                ]
            }
        }
    }
    

Note

แนะนำให้ส่งข้อมูลคำขอในบรรทัดเดียวโดยไม่มีการขึ้นบรรทัดใหม่เพื่อให้สามารถตรวจสอบบันทึกของเซิร์ฟเวอร์ได้ทันที.

  • การตอบสนอง
    HTTP/1.1 200 OK
    Content-length: 0
    Content-Type: application/json
    UUID: 3bc6b414-e2df-40d6-8006-9d2308a6edf9