การส่งแบบเดี่ยว
ข้อกำหนดเบื้องต้น¶
ในการซิงค์กับ 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 ที่แมพกับตัวระบุไม่ถูกต้อง จะไม่ถูกส่ง คำแนะนำ 
 | String[] | X | ||
| enableLocale | ว่าจะใช้ภาษาท้องถิ่นหรือไม่ 
 truefalse | 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 | 
ตัวอย่างตัวระบุ¶
โครงสร้างข้อความ¶
| หมวดหมู่ | ชื่อฟิลด์ | คำอธิบาย | ประเภท | จำเป็น | |
|---|---|---|---|---|---|
| ข้อความ | 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. 
 | enum(NORMAL, HIGH) | X | ||
| ios | sound | ชื่อไฟล์เสียงที่จะเล่นเมื่อมีการแจ้งเตือนปรากฏบนอุปกรณ์ของผู้ใช้ ไฟล์เสียงต้องมีอยู่ใน Library/Sounds ของคอนเทนเนอร์แอปหรือในบันเดิลหลัก หากว่างเปล่า จะใช้ "default" และเสียงเริ่มต้นของ ระบบ จะถูกเล่น | สตริง | X | |
ActionPayload¶
ActionPayload เป็นรูปแบบข้อมูลที่ส่งเมื่อใช้ปุ่มการกระทำแบบพุช ซึ่งเป็นฟีเจอร์เพิ่มเติมของ API การพุชแบบเดี่ยว
ปุ่มการกระทำการผลักดันเป็นฟีเจอร์การแจ้งเตือนที่มีอยู่ใน SDK ซึ่งจะแสดงเป็นปุ่มระบบเมื่อกดนานที่การแจ้งเตือนการผลักดัน
สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับปุ่มการกระทำแบบพุช โปรดดูคู่มือด้านล่าง
- คู่มือการพัฒนา SDK > ปุ่มการกระทำการส่งข้อความ
- Apple > คู่มือการตั้งค่าการกระทำของผู้ใช้สำหรับการแจ้งเตือนแบบดัน
- Android > คู่มือปุ่มการกระทำ FCM
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 = รหัสภาษา, defaultkey เป็นสิ่งจำเป็น, value = ชื่อปุ่มหากชื่อปุ่มยาวเกินไป อาจถูกตัดทอน กรุณากำหนดความยาวที่เหมาะสม เฉพาะ Android | Map | O Android X iOS | 
| actionType | ประเภทการกระทำ ( CURL,CLOSE) ค่าเริ่มต้น:CLOSECURLจะดำเนินการเรียก 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
แนะนำให้ส่งข้อมูลคำขอในบรรทัดเดียวโดยไม่มีการขึ้นบรรทัดใหม่เพื่อให้สามารถตรวจสอบบันทึกของเซิร์ฟเวอร์ได้ทันที.
- การตอบสนอง