# Flutter 好用package - callkeep 介紹 搭配 [firebase 相關套件](https://hackmd.io/XjNkMUaFQwq0hn9067OQ6g?view) 及 [flutter_local_notifications](https://hackmd.io/kfPTDa83RgO2ZtgZkLN9Xw) 就可以實做出來電顯示的功能。 ## callkeep 使手機可以在 APP 未開啟狀態喚醒螢幕,收到來電通知並串接手機本身通話系統。 ``` flutter pub add callkeep ``` [官網](https://pub.dev/packages/callkeep) ## 安卓 各平台手機開通通話帳戶權限落差大,以下是整理的開通方式 |Pixel/Sony/Asus | Samsung | Column 3 | | -------- | -------- | -------- | | ![](https://i.imgur.com/Kc5xYIQ.gif) | ![](https://i.imgur.com/9xLlJho.gif) | Text | ## OPPO / Realme 手機沒有通話帳戶功能 ## iOS 只可使用真實機型進行測試,模擬器不支援 callkit 框架。 ### 上架 APP Store(含 TestFlight) VOIP 憑證申辦 1. 搜尋 keychain ![](https://i.imgur.com/rdKsTVs.png) 2. 鑰匙圈存取 > 憑證輔助程式 > 從憑證授權要求 ![](https://i.imgur.com/hijnM33.png) 3. 輸入完相關資訊就可以獲得憑證 (CertificateSigningRequest.certSigningRequest) 4. 進入[Apple Developer](https://developer.apple.com/account/resources),點 Certificates 旁邊的 + ![](https://i.imgur.com/xdIahQI.png) 5. 找到 VoIP Services Certificate 勾選後點擊繼續按鈕 6. 選擇你專案的 APP ID 後點擊繼續按鈕 ![](https://i.imgur.com/p1SIa0S.png) 7. 上傳剛剛建立的憑證(CertificateSigningRequest.certSigningRequest)後點擊繼續按鈕 8. 點擊下載取得 voip_services.cer ![](https://i.imgur.com/IMLubLo.png) 9. 去儲存位置雙擊剛剛下載的憑證加入 ![](https://i.imgur.com/9zVoqNt.png) 10. 已經更新至 APP Store 的 APP 不需重新上版即可使用~ #### 參考資料 1. [建立憑證](https://developer.apple.com/help/account/create-certificates/create-a-certificate-signing-request/) 2. [developer.apple.com 開通憑證流程](https://developer.apple.com/help/account/create-certificates/create-voip-services-certificates/) ## 問題處理 ### 重複安裝後 FCM token 會在一段時間後才變動 可用此事件接收 token 異動時機 ```dart _callKeep.on(CallKeepPushKitToken(), ((CallKeepPushKitToken event) async { logger.w('CallKeepPushKitToken token => ${event.token},需重新登入刷新 firebase token'); })); ``` #### 參考資料 1. https://developer.apple.com/forums/thread/679986 ## 參考資料 https://medium.com/joe-tsai/%E4%BD%BF%E7%94%A8keystore-%E5%84%B2%E5%AD%98%E6%95%8F%E6%84%9F%E6%80%A7%E8%B3%87%E6%96%99-92ad9b236e58 ###### tags: `flutter`