Warning IOS only working on real device, not on simulator (Callkit framework not working on simulator)
When user make call from Pitel Connect app, Pitel Server pushes a notification for all user login (who receives the call). When user "Accept" call, extension will re-register to receive call.
iOS(Alert) | iOS(Lockscreen) | iOS(full screen) |
![]() |
![]() |
![]() |
Android(Alert) - Audio | Android(Lockscreen | Fullscreen) - Audio | |
![]() |
![]() |
If you are making VoIP application than you definitely want to update your application in the background & terminate state as well as wake your application when any VoIP call is being received.
1. Create Apple Push Notification certificate.
- Access https://developer.apple.com/account/resources/identifiers/list
- In Certificates, Identifiers & Profiles, click Certificates in the sidebar.
- On the top left, click the add button (+).The certificate type should be Apple Push Notification service SSL (Sandbox & Production) under Services.
2. Choose an App ID from the pop-up menu, then click Continue.
3. Upload Certificate Signing Request → Continue
Follow the instructions to create a certificate signing request.
- Install certificate. Download the certificate and install it into the Keychain Access app(download .cer and double click to install).
- Export the .p12 file and send it to Tel4vn (or using test)
- Open Xcode Project → Capabilities
- In Tab Signing & Capabilities. Enable Push notifications & Background Modes
- Create APNs key and upload in firebase project. In your apple developer account.
- Upload APNs key to your firebase
- Next you must add the file to the project using Xcode (adding manually via the filesystem won't link the file to the project). Using Xcode, open the project's ios/{projectName}.xcworkspace file. Right click Runner from the left-hand side project navigation within Xcode and select "Add files", as seen below:
- Select the GoogleService-Info.plist file you downloaded, and ensure the "Copy items if needed" checkbox is enabled:
Using FCM (Firebase Cloud Message) to handle push notification wake up app when app run on Background or Terminate
Warning Popup request permission only working with targetSdkVersion >= 33
-
Access link https://console.firebase.google.com/u/0/project/_/notification
-
Download & copy file google_service.json -> replace file google_service.json in path:
android/app/google_service.json
-
Go to Project Setting → Cloud Messaging → Enable Cloud Messaging API (Legacy)
Note After complete all step Setup. Please send information to dev of Tel4vn in here
- Install Packages
flutter pub add flutter_callkit_incoming
- Add pubspec.yaml:
dependencies:
flutter_callkit_incoming: any
Config your project
- Android In android/app/src/main/AndroidManifest.xml
<manifest...>
...
<!--
Using for load image from internet
-->
<uses-permission android:name="android.permission.INTERNET"/>
</manifest>
- IOS In ios/Runner/Info.plist
<key>UIBackgroundModes</key>
<array>
<string>processing</string>
<string>remote-notification</string>
<string>voip</string>
</array>
Replace your file ios/Runner/AppDelegate.swift with
https://github.com/tel4vn/pitel-ui-kit/blob/1.0.6/ios/Runner/AppDelegate.swift
- Before handle Incoming call, you should import package in home screen
import "package:flutter_pitel_voip/flutter_pitel_voip.dart";
- Initialize firebase
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await PushNotifAndroid.initFirebase(DefaultFirebaseOptions.currentPlatform); // add here
runApp(MyApp());
}
-
Config firebase_options.dart. example.
-
Get device push token VoIP.
await PushVoipNotif.getDeviceToken();
- Get fcm token.
await PushVoipNotif.getFcmToken();
- Download & install app from link https://github.com/onmyway133/PushNotifications/releases
- Fill information and click Send to Test Push Notification
Note: Add .voip after your bundleId to send voip push notification
Example:
Your app bundleId: com.pitel.uikit.demo
Voip push Bundle Id: com.pitel.uikit.demo.voip
- IOS
- Android: using above app or test from Postman
cURL
curl --location 'https://fcm.googleapis.com/fcm/send' \
--header 'Content-Type: application/json' \
--header 'Authorization: key=${server_key}' \
--data '{
"registration_ids": [${device_token}],
"data":{
"uuid": "call_id",
"nameCaller": "Anh Quang",
"avatar": "Anh Quang",
"phoneNumber": "0341111111",
"appName": "Pitel Connnect",
"callType": "CALL"
},
"content_available": true,
"priority": "high"
}'