推送配置
應用的離線推送在應用詳情的“推送”標籤頁中配置,分為三部分:
- 推送憑據:上傳 APNs、FCM 和各手機廠商通道的憑據,傳送測試推送;
- 通知模板:修改通知的標題和正文,或者為更多語言提供模板;
- 推送統計:按日期、通道、類別和結果檢視推送的次數。
排查某個使用者收不到推送時,在“IM 使用者”中開啟這個使用者,檢視他的“推送”標籤頁,見使用者的推送裝置與設定。離線推送的規則(推給哪些裝置、免打擾、角標等)見離線推送。
先上傳憑據,再發布 App
應用沒有憑據時不會發出任何離線推送。App 登記推送令牌時要指明憑據的名稱,名稱不存在時登記失敗,所以請先在控制檯上傳憑據,再把憑據的名稱配置到 App 中。
角色與許可權
| 操作 | owner | admin | developer |
|---|---|---|---|
| 檢視推送憑據(不含金鑰)、通知模板和推送統計 | ✓ | ✓ | ✓ |
| 傳送測試推送 | ✓ | ✓ | ✓ |
| 修改和恢復通知模板 | ✓ | ✓ | ✓ |
| 檢視使用者的推送裝置、推送設定和會話免打擾;修改使用者的推送設定、取消會話免打擾、解綁推送裝置 | ✓ | ✓ | ✓ |
| 新增憑據、更換憑據的金鑰、刪除憑據(需要重新驗證身份) | ✓ | ✓ | |
| 修改憑據的公開引數,停用和啟用憑據 | ✓ | ✓ |
持有憑據就能向這個 App 的全部使用者推送任意內容,所以上傳、更換和刪除憑據要求在最近 10 分鐘內重新驗證過身份。以上寫操作和測試推送都記錄在操作日誌中,日誌中不記錄金鑰:憑據為 push_credential.create、push_credential.update、push_credential.disable、push_credential.enable、push_credential.delete,模板為 push_template.update、push_template.delete,使用者的推送設定、會話免打擾、解綁裝置和測試推送為 push.settings_update、push.conversation_setting_update、push.device_unbind、push.test。
推送憑據
“推送憑據”列出應用的全部憑據,按名稱排序:
| 列 | 說明 |
|---|---|
| 名稱 | 憑據的名稱,App 登記推送令牌時用它指明憑據 |
| 通道 | 推送通道。APNs 憑據另外標出環境(生產或開發),能發 VoIP 推送的標出“VoIP” |
| 包名 | iOS 的 Bundle ID 或 Android、鴻蒙的包名 |
| 金鑰 | 供辨認的提示,不是金鑰本身:APNs 的 .p8 金鑰為 Key ID,.p12 證書為證書的名稱,並顯示還有多少天到期(30 天內到期時標紅);FCM 為服務賬號的郵箱;鴻蒙為金鑰 ID;其他通道為金鑰的末 4 位 |
| 狀態 | 啟用或已停用。被平臺停用的另外標出“平臺停用”;暫停中的標出暫停的原因,滑鼠移上去顯示暫停到什麼時候,見憑據的暫停 |
| 最近成功 | 最近一次經這份憑據推送成功的時間,最多每分鐘更新一次 |
| 最近錯誤 | 最近一次憑據類錯誤(鑑權失敗、證書過期、包名不符、令牌無效突增、廠商的每日額度已滿等)的錯誤碼,滑鼠移上去顯示說明和時間。網路錯誤不記在這裡 |
新增憑據
owner 或 admin 點選“新增憑據”,填寫以下內容後點選“儲存”,按提示重新驗證身份:
| 欄位 | 說明 |
|---|---|
| 名稱 | 字母、數字、_、-、.,1 到 64 個字元,區分大小寫,如 ios-prod、xiaomi-main。同一個應用中不能重複;刪除後可以再次使用 |
| 通道 | apns、fcm、huawei、harmony、xiaomi、oppo、vivo、honor、meizu 之一 |
| Bundle ID 或包名 | 客戶端 App 的 Bundle ID(iOS、macOS)或包名(Android、鴻蒙),必須與 App 一致,如 com.example.chat。至少包含一個 . |
| 環境 | 只用於 APNs:生產(production)或開發(sandbox),見 Apple APNs |
| 公開引數 | 各通道的 App ID、訊息分類、通知渠道等,見各通道的憑據。每項最長 64 個字元 |
| 金鑰 | 各通道的金鑰、證書或服務賬號,可以貼上內容,也可以點選“從檔案讀取”選擇檔案 |
儲存時檢查金鑰的格式:.p8 金鑰能否解析,.p12 證書的密碼是否正確、是否已過期、是否包含填寫的 Bundle ID,服務賬號的私鑰能否解析。不符合時提示“憑據的金鑰無效”,不說明金鑰的哪一部分有誤。
金鑰加密儲存,儲存後任何頁面和介面都不再顯示,只顯示供辨認的提示。通道、環境和包名建立後不能修改:換了 App 或環境,原來登記的令牌都不能再用,請新建一份憑據。
每個應用最多 20 份憑據,同一個通道可以有多份。一個 IM 應用對應多個客戶端 App(如主 App 和極速版)時,各上傳一份憑據,各個 App 用自己的憑據名稱登記令牌。
各通道的憑據
Apple APNs
APNs 有兩種鑑權方式,推薦使用 .p8 金鑰:
.p8金鑰(推薦):在 Apple Developer 網站的 Certificates, Identifiers & Profiles 中,建立一個啟用了 Apple Push Notifications service (APNs) 的金鑰,下載.p8檔案(只能下載一次),記下它的 Key ID;Team ID 在開發者賬號的會員資訊中。填寫 Key ID、Team ID,貼上.p8檔案的內容。.p8金鑰不會過期,同一個金鑰可以用於開發者賬號下的多個 App,也可以發 VoIP 推送。.p12證書:在 Certificates, Identifiers & Profiles 中為 App 建立 Apple 推送證書,匯入鑰匙串後連同私鑰匯出為.p12檔案,選擇檔案並填寫匯出時設定的密碼。證書有到期時間,到期前 30 天起,系統以郵件或簡訊提醒租戶的所有者和管理員,請在到期前更換。證書中同時登記了{Bundle ID}.voip的才能發 VoIP 推送,列表中標出“VoIP”。
環境:從 Xcode 直接安裝到手機上除錯的 App 使用開發環境(sandbox),App Store、TestFlight 和企業分發的 App 使用生產環境(production)。兩種環境的令牌不通用:開發版 App 的令牌用生產環境的憑據傳送,會被報告為令牌無效。同一個 App 的開發版和生產版各上傳一份憑據(.p8 金鑰可以用同一個),如 ios-dev 和 ios-prod,App 按自己的構建型別使用對應的名稱登記。
可選引數:
| 引數 | 說明 |
|---|---|
提示音 sound | 訊息和通知的提示音,填寫 App 中聲音檔案的名稱,預設為系統的 default |
允許通知擴充套件改寫內容 mutable_content | 開啟後通知帶 mutable-content,App 可以在 Notification Service Extension 中改寫通知的內容,如按本地的好友備註顯示傳送者 |
Google FCM
在 Firebase 控制檯開啟 App 所在的專案,在“專案設定”的“服務賬號”中生成新的私鑰,下載服務賬號的 JSON 檔案,貼上檔案的內容或選擇這個檔案。包名填寫 Android App 的包名(applicationId),App 中整合的 Firebase 配置要屬於同一個專案。
可選引數:
| 引數 | 說明 |
|---|---|
通知渠道 ID android_channel_id | 訊息和通知使用的 Android 通知渠道(Android 8 以上),App 啟動時要建立同樣 ID 的渠道 |
靜默渠道 ID silent_channel_id | 撤回後更新通知時使用的渠道,App 以低重要級別建立它,替換通知時不再響鈴。沒有填寫時使用通知渠道 ID,可能再響一次 |
來電、未接來電等經 FCM 傳送的是資料訊息,由 App 自行顯示,不需要另外配置。
國內手機廠商和鴻蒙
在各廠商的開發者平臺上為 App 開通推送服務後,填寫以下材料:
| 通道 | 在哪裡獲取 | 必填 | 可選引數 |
|---|---|---|---|
華為 huawei | 華為 AppGallery Connect 中 App 的應用資訊 | App ID、App Secret | 訊息分類 category |
鴻蒙 harmony | 華為 AppGallery Connect:專案的專案 ID;在專案設定中建立服務賬號金鑰,下載 JSON 檔案 | 專案 ID、服務賬號金鑰 JSON | 訊息分類 category |
榮耀 honor | 榮耀開發者服務平臺中 App 的推送服務資訊 | App ID、Client ID、Client Secret | 通知的重要級別 importance,按榮耀推送的取值填寫 |
小米 xiaomi | 小米開放平臺的推送服務中 App 的應用資訊 | App Secret | 通道 ID channel_id;靜默通道 ID silent_channel_id |
OPPO oppo | OPPO 開放平臺的推送服務中 App 的應用資訊 | App Key、Master Secret | 通知渠道 ID channel_id;訊息分類 category;靜默渠道 ID silent_channel_id |
vivo vivo | vivo 開放平臺的推送服務中 App 的應用資訊 | App ID、App Key、App Secret | 訊息分類 category |
魅族 meizu | 魅族開放平臺的推送服務中 App 的應用資訊 | App ID、App Secret | — |
- 訊息分類和通知渠道:國內廠商要求按內容申請訊息分類(如即時通訊、私信),沒有申請的推送按廠商的預設分類處理,會被限量甚至拒收。請在廠商後臺申請即時通訊類的分類,把分類的取值、通知渠道 ID 原樣填在憑據中,傳送時隨推送帶上。
- 靜默渠道:小米、OPPO 填寫了靜默渠道的,撤回後更新通知時使用它,App 以低重要級別建立這個渠道。
- 華為、鴻蒙、小米、OPPO 憑據中的“來電分類”“來電通道 ID”“來電渠道 ID”可以填寫,目前來電在這些通道上按普通的高優先順序通知傳送,暫不使用這幾項。
- 華為通道同時適用於 Android 和鴻蒙裝置,鴻蒙通道只適用於鴻蒙裝置,其他國內廠商只適用於 Android 裝置。
修改憑據
owner 或 admin 點選憑據的“修改”:
- 公開引數:可以直接修改,儲存時整體替換,不需要重新驗證身份;
- 更換金鑰:開啟“更換金鑰”,上傳新的金鑰、證書或服務賬號,需要重新驗證身份。APNs 憑據更換鑑權方式(
.p8金鑰和.p12證書之間)時,必須同時上傳新的金鑰; - 名稱、通道、環境和包名不能修改。
儲存後對之後的推送立即生效,憑據的“最近錯誤”被清空。如果提示“內容已被修改,請重新整理後重試”,說明有人在你開啟之後修改過這份憑據,請重新整理後重新修改。
停用與啟用
owner 或 admin 點選“停用”,可以填寫原因。停用後這份憑據立即不再用於傳送(包括來電),用它登記的令牌保留:裝置還登記了其他憑據的令牌時改用下一個,沒有的收不到推送。點選“啟用”後恢復。憑據停用期間 App 仍可以用它登記令牌,啟用後立即可用。
平臺停用:憑據被平臺停用時(如被用於推送違規內容),狀態旁標出“平臺停用”,滑鼠移上去可以看到原因,系統同時以郵件或簡訊通知租戶的所有者和管理員。被平臺停用的憑據不能修改、啟用或刪除,只能由平臺啟用,啟用後同樣會通知。
刪除憑據
owner 或 admin 點選“刪除”,按提示重新驗證身份。刪除後憑據立即不再用於傳送,用它登記的令牌由後臺清理。刪除後可以用同一個名稱重新新增,但原來登記的令牌不會恢復,要等 App 下次啟動重新登記後才能收到推送。被平臺停用的憑據不能刪除。
憑據的暫停
推送通道出現以下情況時,系統暫時停止使用這份憑據,憑據的狀態旁顯示暫停的原因。暫停期間的推送改用裝置的下一個令牌,沒有的計入 channel_paused,到時間後自動恢復,不需要處理:
| 原因 | 說明 | 暫停多久 |
|---|---|---|
| 通道限額 | 通道返回請求過於頻繁 | 通道要求的時間,沒有給出時 60 秒,最長 1 小時 |
| 每日額度已滿 | 廠商給這個 App 的每日推送額度已經用完,同時記在“最近錯誤”中 | 到北京時間次日 0 點 |
| 連續鑑權失敗 | 1 分鐘內連續 20 次憑據類錯誤,如金鑰不對、證書已過期 | 1 分鐘 |
| 令牌無效突增 | 1 分鐘內至少傳送 50 次、其中超過一半報告令牌無效,通常是憑據的環境或包名與 App 不符 | 10 分鐘。其間報告無效的令牌不刪除,以免一次刪光這份憑據的令牌 |
憑據連續出錯 1 小時(其間沒有一次成功)時,系統以郵件或簡訊通知租戶的所有者和管理員;同一次持續的出錯只通知一次,恢復成功後再出錯時重新計算。請檢查憑據的金鑰、環境和包名,修改憑據後“最近錯誤”隨之清空。
測試推送
點選憑據的“測試”,用這份憑據發一條測試推送,可以選擇:
- 使用者名稱:發給這個使用者用這份憑據登記了令牌的裝置,每臺裝置一條;
- 令牌:直接發給一個令牌,例如在 App 釋出前,把除錯日誌中的令牌複製過來,驗證憑據是否配置正確。APNs 按憑據的環境傳送。
測試推送的標題為“測試推送”,正文為“這是一條測試推送,收到說明推送配置正確”,按裝置登記的語言顯示(直接發給令牌的使用應用的預設語言),不能自定義。它不受免打擾和線上狀態的限制,不帶角標,不計入應用的推送額度,不使用 VoIP 令牌。
傳送後等待通道的結果,最多 10 秒,按裝置列出:
| 列 | 說明 |
|---|---|
| 裝置 | 裝置的平臺和會話 ID;直接發給令牌的顯示“令牌” |
| 憑據 | 使用的憑據和通道 |
| 令牌 | 遮蓋後的令牌,只顯示前 6 位和後 4 位 |
| 結果 | 推送的結果,失敗時另外顯示通道返回的錯誤碼,見排查收不到推送 |
- 發給使用者時,這個使用者沒有用這份憑據登記令牌的裝置也會列出,結果為“憑據不可用”(
credential_unavailable); - 通道報告令牌無效時,這個令牌會被刪除(直接發給令牌的不刪除任何資料);
- 測試推送遇到網路錯誤不重試,直接顯示
failed; - 每個應用每分鐘最多發 20 次測試推送,同一個使用者每分鐘最多 5 次,超出時提示“測試推送過於頻繁,請稍後再試”。應用停用或被暫停時不能傳送。
通知模板
通知的標題和正文由模板生成,內建簡體中文(zh-CN)、繁體中文(zh-TW)和英文(en)三種語言。“通知模板”列出全部模板鍵,以及每個模板鍵可以使用的佔位符、內建的簡體中文內容和已有的覆蓋。模板的選擇和語言的查詢順序見通知的標題和內容。
覆蓋模板
點選模板鍵所在行的“覆蓋”,填寫:
| 欄位 | 說明 |
|---|---|
| 語言 | BCP 47 語言標籤,如 zh-CN、en、ja,儲存為小寫。可以覆蓋內建語言,也可以新增其他語言 |
| 標題 | 最長 64 個字元,可以為空,為空時通知的標題位置由系統顯示 App 名稱 |
| 正文 | 1 到 256 個字元 |
- 只能使用這個模板鍵的佔位符(列表中“佔位符”一列),使用其他佔位符或花括號不成對時不能儲存;要顯示花括號本身時連寫兩個。
- 不能有控制字元(如換行)。
- 每個應用最多 300 條覆蓋。
- 已有的覆蓋顯示為語言標籤,點選標籤修改,點選標籤上的關閉按鈕刪除覆蓋、恢復內建模板。
- 儲存後對之後的推送立即生效,已經發出的通知不變。
例如為日語使用者覆蓋 message.group:標題為 {group},正文為 {sender}:{content}。日語裝置的群訊息隨即使用這個模板,沒有覆蓋的其他模板鍵仍按語言的查詢順序使用預設語言。
模板鍵
| 模板鍵 | 用途 | 佔位符 | 內建的標題 | 內建的正文 |
|---|---|---|---|---|
message.single | 單聊訊息 | {sender}、{content} | {sender} | {content} |
message.single_merged | 單聊,合併了多條 | {sender}、{count}、{content} | {sender} | [{count}条] {content} |
message.group | 群訊息 | {group}、{sender}、{content} | {group} | {sender}: {content} |
message.group_merged | 群訊息,合併了多條 | {group}、{count}、{sender}、{content} | {group} | [{count}条] {sender}: {content} |
message.group_mention | 群訊息 @ 了本人 | {group}、{sender}、{content} | {group} | [有人@我] {sender}: {content} |
message.group_system | 以系統身份傳送的群訊息 | {group}、{content} | {group} | {content} |
message.single_sender_only | 預覽方式為“只顯示傳送者”的單聊訊息 | {sender} | {sender} | 发来一条新消息 |
message.group_sender_only | 預覽方式為“只顯示傳送者”的群訊息 | {group}、{sender} | {group} | {sender} 发来一条新消息 |
message.hidden | 預覽方式為“都不顯示”的訊息 | 無 | 空 | 你收到了一条新消息 |
content.image、content.voice、content.video | 圖片、語音、影片訊息的摘要,即 {content} | 無 | — | [图片]、[语音]、[视频] |
content.file | 檔案訊息的摘要 | {file_name} | — | [文件] {file_name} |
content.location | 位置訊息的摘要 | {location_name} | — | [位置] {location_name} |
content.custom、content.unknown | 自定義訊息、其他型別訊息的摘要 | 無 | — | [消息] |
name.deleted_user | 傳送者已刪除時的 {sender} | 無 | — | 已删除的用户 |
name.unnamed_group | 群沒有名稱時的 {group} | 無 | — | 群聊 |
name.system | 以系統身份傳送時的 {sender} | 無 | — | 系统 |
recall.single | 單聊訊息被髮送者撤回後的通知 | {sender} | {sender} | 撤回了一条消息 |
recall.group | 群訊息被髮送者撤回後的通知 | {group}、{sender} | {group} | {sender} 撤回了一条消息 |
recall.removed | 訊息被其他人撤回,或預覽方式為“都不顯示” | 無 | 空 | 一条消息已被撤回 |
friend.request | 收到好友申請 | {sender} | {sender} | 请求添加你为好友 |
friend.accepted | 好友申請被同意 | {sender} | {sender} | 已同意你的好友申请 |
friend.added | 被對方直接新增為好友 | {sender} | {sender} | 已添加你为好友 |
group.application | 有人申請入群 | {group}、{target} | {group} | {target} 申请加入群聊 |
group.invite_review | 成員的邀請等待審批 | {group}、{inviter}、{target} | {group} | {inviter} 邀请 {target} 加入群聊,等待审批 |
group.invitation | 收到入群邀請 | {group}、{inviter} | {group} | {inviter} 邀请你加入群聊 |
group.removed | 被移出群 | {group} | {group} | 你已被移出群聊 |
group.dismissed | 群解散 | {group} | {group} | 群聊已解散 |
notice.hidden | 預覽方式為“都不顯示”的好友和群的通知 | 無 | 空 | 你收到了一条新通知 |
call.audio、call.video | 單聊的語音、影片來電 | {sender} | {sender} | 邀请你语音通话、邀请你视频通话 |
call.group_audio、call.group_video | 群通話的邀請 | {group}、{sender} | {group} | {sender} 邀请你加入语音通话、{sender} 邀请你加入视频通话 |
call.missed、call.canceled | 未接來電、對方已取消 | {sender} | {sender} | [未接来电]、对方已取消通话 |
call.hidden | 預覽方式為“都不顯示”的來電 | 無 | 空 | 你有一个新的来电 |
call.missed_hidden | 預覽方式為“都不顯示”的未接來電、對方已取消 | 無 | 空 | 你有一个未接来电 |
test | 測試推送 | 無 | 测试推送 | 这是一条测试推送,收到说明推送配置正确 |
佔位符:{sender} 為傳送者(或申請人、來電方)的暱稱,沒有暱稱時為使用者名稱;{group} 為群名稱;{content} 為訊息的摘要;{count} 為合併的條數;{inviter}、{target} 為邀請人和被邀請或申請入群的人的暱稱;{file_name}、{location_name} 為檔名和位置名稱。替換後為空的佔位符,多餘的空白會被去掉。content.* 和 name.* 只使用正文,替換到其他模板的佔位符中。
服務端傳送訊息時在 push 中給出的標題和正文不套用模板,見傳送訊息時的 push 欄位。
推送統計
“推送統計”按日期、通道、類別和結果統計推送的次數:
- 查詢範圍:選擇日期範圍,最多查詢最近 180 天,一次最多 92 天。日期按北京時間劃分,頁面上顯示統計時區;當天的資料隨時更新。
- 篩選:可以按通道和類別篩選。類別為訊息、好友和群的通知、來電、清除來電通知、撤回後的更新和測試推送。
- 彙總:頂部顯示範圍內主要結果的合計:通道已接受、失敗、令牌無效、憑據暫停中、超出推送額度、前臺線上、免打擾和沒有裝置。
- 明細:每一行為一個日期、通道、類別和結果的次數,沒有推送的組合不顯示。沒有選出令牌的結果(如前臺線上、免打擾、沒有裝置),通道顯示為
-。
各結果的含義和計數單位見推送統計與排查。幾個值得關注的比例:
- 令牌無效突然增多,通常是新上傳的憑據與 App 的環境或包名不符;
- 失敗持續出現,請檢視對應憑據的最近錯誤,或發測試推送檢視通道返回的錯誤碼;
- 超出推送額度出現時,說明應用每分鐘的推送次數達到了上限,需要提高時請聯絡我們;
- 前臺線上佔比明顯偏低,可能是 App 沒有在切到後臺時上報狀態;明顯偏高而使用者反映收不到提醒,可能是 App 切到後臺時上報沒有送達。
使用者的推送裝置與設定
在“IM 使用者”中開啟一個使用者,“推送”標籤頁中顯示:
登記了推送的裝置:
| 列 | 說明 |
|---|---|
| 裝置 | 平臺和裝置標識 |
| 線上 | 前臺線上、後臺或離線。前臺線上的裝置不推送 |
| 令牌 | 每個令牌的序號(#1、#2 為普通令牌的優先順序,VoIP 為 VoIP 令牌)、憑據和通道、遮蓋後的令牌,以及憑據的狀態:可用、憑據已停用、憑據暫停中或憑據已刪除 |
| 語言 | 裝置登記的語言,沒有登記的顯示“預設”,使用應用的預設語言 |
| 角標 | 這臺裝置當前的角標計數 |
| 登入時間 | 這次登入的時間 |
- 解綁:刪除這臺裝置的推送登記,裝置隨即收不到這個使用者的推送。登入不受影響,App 下次啟動時會重新登記。用於處理“這臺手機收到了別人的推送”這類問題,或在排查時讓 App 重新登記;要讓裝置徹底收不到推送,請在“登入裝置”中把它踢下線。
- 發測試推送:向這個使用者全部登記了推送的裝置發一條測試推送,每臺裝置用第一個可用的令牌,規則同測試推送。
裝置列表為空,說明 App 沒有在任何裝置上登記推送:App 沒有呼叫登記、使用者在 App 內或系統設定中關閉了通知、已經退出登入,或者使用者只在 Web 等不能登記推送的平臺上登入。
推送設定:全域性免打擾(關閉、到什麼時候或一直開啟)、夜間免打擾(時段和時區)和預覽方式(沒有選擇時顯示應用預設的預覽方式)。點選“修改”可以替使用者修改:
| 專案 | 說明 |
|---|---|
| 全域性免打擾 | 關閉;一段時間(從現在起的小時數);一直開啟 |
| 夜間免打擾 | 關閉,或開啟並填寫開始、結束時刻(HH:MM)和時區 |
| 預覽方式 | 應用預設、顯示傳送者和內容、只顯示傳送者、不顯示內容 |
會話免打擾:使用者設定了免打擾的單聊和群、方式(不推送,或只在 @ 我時推送)和到期時間。點選“取消”恢復這個會話的正常推送。
修改後使用者線上的裝置立即同步新的設定。服務端也可以透過 OpenAPI 管理這些設定和裝置,見推送裝置與設定。
排查收不到推送
使用者反映收不到推送時,按以下順序檢查:
- 裝置:在使用者的“推送”標籤頁檢視他的裝置。沒有裝置的,見上文的原因;裝置顯示“前臺線上”而 App 實際已在後臺的,是 App 沒有上報後臺狀態;令牌的憑據狀態不是“可用”的,到“推送憑據”中檢視這份憑據。
- 免打擾:檢視推送設定和會話免打擾,注意夜間免打擾的時區。
- 測試推送:點選“發測試推送”,檢視每臺裝置的結果。
- 憑據:在“推送憑據”中檢視對應憑據的最近錯誤和暫停狀態。
- 統計:在“推送統計”中按通道和結果檢視這段時間的推送分佈。
測試推送和統計中常見的結果:
| 結果 | 常見原因 | 處理 |
|---|---|---|
通道已接受 sent | 通道已收下推送,但裝置是否顯示還取決於裝置 | 裝置沒有顯示時,檢查系統設定中是否關閉了 App 的通知、Android 是否建立了憑據中配置的通知渠道、國內廠商的訊息分類是否已申請、當天的額度是否已用完 |
令牌無效 invalid_token | App 已解除安裝或令牌已過期;或者令牌與憑據不匹配:iOS 開發版 App 的令牌用了生產環境的憑據(或者相反),包名、Bundle ID 與憑據不同,令牌屬於另一個 Firebase 專案 | 核對憑據的環境和包名,讓 App 用正確的憑據名稱重新登記 |
失敗 failed,錯誤碼為 network_error 或 timeout | 服務端訪問推送通道失敗 | 一般是暫時的網路問題,正式的推送會自動重試兩次;持續出現請聯絡我們 |
失敗 failed,其他錯誤碼 | 通道拒絕了這條推送,錯誤碼由通道返回,如 APNs 的 BadDeviceToken | 按通道的文件處理;鑑權類的錯誤檢查金鑰是否正確、證書是否已過期 |
憑據不可用 credential_unavailable | 裝置的令牌所屬的憑據都已停用或刪除;用憑據測試時,這臺裝置沒有用這份憑據登記令牌 | 啟用憑據,或讓 App 用可用的憑據重新登記 |
憑據暫停中 channel_paused | 憑據因通道限額、每日額度已滿等原因暫停中 | 見憑據的暫停 |
免打擾 skipped_dnd | 使用者的免打擾擋住了推送 | 確認是否為使用者自己的設定 |
前臺線上 skipped_online | 裝置在前臺,訊息由長連線送達 | 無需處理 |
推送停用 skipped_disabled | 平臺在平臺控制檯關閉了「廠商離線推送」的全域性開關,所有廠商推送都停發 | 聯絡平臺管理員重新開啟 |
