ECall Partner Onboarding Guide¶
Step-by-step guide from account registration to iOS app deployment.
Need more details? See Partner Technical Reference for Xcode setup, troubleshooting, branding, and compliance.
Target Audience¶
- iOS developers integrating ECall open-source for a branded app
- Technical partners with Apple Developer accounts
Prerequisites¶
- You own an Apple Developer Account
- You can build and run iOS apps using Xcode
1. Register Partner Account¶
Action¶
- Open the registration page:
-
π http://web.ecall.org/auth/registration
-
Fill in the following fields:
- Email: Partner email address
- Password / Confirm Password
- App Title: Full application name
-
App Short Name: Short, unique identifier (no spaces)
-
Click Register
-
Verify OTP
Expected Result¶
- Partner account is created successfully
- You can log in to the ECall web dashboard
2. Create Apple Certificates (Local CSR β Apple Developer Portal)¶
This step creates the required Apple certificates used for Sign in with Apple, Push Notification and VoIP Push, which are mandatory for incoming calls (CallKit).
2.1 Create Sign in with Apple Key (.p8)¶
This section creates the Apple Authentication Key used for Sign in with Apple.
Action¶
- Go to Apple Developer Portal
-
π https://developer.apple.com/account
-
Navigate to:
-
Certificates, Identifiers & Profiles β Keys
-
Click + to create a new key
-
Enter:
-
Key Name: Example:
Ecall Sign In -
Enable service:
-
β Sign in with Apple
-
Click Continue β Register
-
Download the key file:
AuthKey_XXXXXXXXXX.p8
β οΈ Important -
.p8file can be downloaded only once - Apple does not store it - Back it up immediately in a secure location
2.2 Create Certificate Signing Request (CSR) on macOS¶
Action¶
-
Open Keychain Access
-
From the menu bar, select:
-
Keychain Access β Certificate Assistant β Request a Certificate From a Certificate Authorityβ¦
-
Fill in the form:
- User Email Address: Your Apple ID email
- Common Name: Company or app name (e.g.
YourCompany) -
CA Email Address: (leave empty)
-
Under Request is, select:
-
β Saved to disk
-
Click Continue
-
Save the file (example):
ApplePushCertRequest.certSigningRequest
Expected Result¶
- A
.certSigningRequest(CSR) file is created on your machine - This file will be uploaded to Apple Developer Portal in the next step
β οΈ Important Do NOT choose "Emailed to the CA". Always use Saved to disk for Apple certificates.
2.3 Create Push Notification Certificate on Apple Developer Portal¶
Action¶
- Go to Apple Developer Certificates page:
-
π https://developer.apple.com/account/resources/certificates/add
-
Under Services, select:
-
β Apple Push Notification service SSL (Sandbox & Production)
-
Click Continue
-
Choose App ID (bundle app)
-
Upload the CSR file created in Step 2.2
-
Click Continue β Download
Expected Result¶
- A Push certificate (
aps.cer) is downloaded - This certificate supports both Sandbox & Production
- It will be used for standard push notifications
2.4 Create VoIP Push Certificate¶
Action¶
- Repeat the same process:
-
Go to Certificates β Add
-
Select:
-
β VoIP Services Certificate
-
Choose Same App ID (bundle app)
-
Upload the same CSR file
-
Download the VoIP certificate
Expected Result¶
- A VoIP Services certificate (
voip.cer) is downloaded - This certificate is required for CallKit incoming calls
π Without VoIP Push, incoming calls will not wake the app in background.
2.5 Install Certificates & Export .p12¶
Action¶
-
Double-click each downloaded
.cerfile to install into Keychain Access -
Open Keychain Access
-
Locate the certificate + private key pair:
- Apple Push Services
-
VoIP Services
-
Click the βΌ (disclosure arrow) to expand the certificate.
-
Select both rows at the same time:
- the certificate row (e.g.
Apple Push Services: <bundle id>/VoIP Services: <bundle id>) -
the private key row under it (e.g.
β¦ private key) -
Right-click (or Control-click) on the selection β Export 2 itemsβ¦
-
Export as:
push_cert.p12-
voip_cert.p12 -
Set and remember a password for each
.p12
Expected Result¶
- You have:
push_cert.p12voip_cert.p12- Passwords are known and ready for upload
2.6 Upload Certificates to ECall Partner Dashboard¶
Action¶
-
Go back to ECall Partner Dashboard
-
Navigate to Account β Settings β Apple Configuration
-
Upload:
- Apple Push Cert (
.p12) + password - Apple VoIP Cert (
.p12) + password
Expected Result¶
- Apple Push & VoIP services are fully configured
- Incoming call notifications will work correctly
3. Retrieve API Credentials & Configure Apple Integration¶
This step collects all credentials required for iOS integration, including ECall API credentials and Apple authentication & push certificates.
3.1 Retrieve ECall API Credentials¶
Action¶
-
Log in to the Partner Dashboard
-
Navigate to:
- Account β Settings
-
π http://web.ecall.org/admin/profile/settings
-
In App Configuration, copy the following values:
- API ID
- API Hash
Expected Result¶
- You have both:
APP_API_IDAPP_API_HASH- These credentials will be used in the iOS project to authenticate with the ECall backend
π Security Notice - API ID and API Hash are sensitive credentials - Do NOT commit them to GitHub - Do NOT hardcode them in source code - Store them only in
Config.local.xcconfig(gitignored)
3.2 Upload Apple Credentials to ECall Partner Dashboard¶
This step binds all Apple credentials (Login, Push, VoIP) to your ECall partner application.
Action¶
- In Partner Dashboard, navigate to:
-
Account β Settings β Apple Configuration
-
Fill in the following fields:
Apple Login
| Field | Value |
|---|---|
| Apple Client ID | Your app Bundle ID (e.g. com.company.ecall) |
| Apple Team ID | Found in Apple Developer Portal β Membership |
| Apple Key ID | The 10-character ID shown when creating the Sign in with Apple key |
| Apple Private Key | Upload the .p8 file (AuthKey_XXXXXXXXXX.p8) |
APNs
| Field | Value |
|---|---|
| Apple Push Cert (.p12) | Upload push_cert.p12 |
| Apple Push Password | Password used when exporting .p12 |
VoIP Push
| Field | Value |
|---|---|
| Apple VoIP Cert (.p12) | Upload voip_cert.p12 |
| Apple VoIP Password | Password used when exporting .p12 |
- Click Save / Update
Expected Result¶
- Apple Login is enabled
- APNs Push is enabled
- VoIP Push is enabled
- Incoming calls can be delivered via CallKit
3.3 OTP Delivery Configuration (SMTP & Twilio)¶
This section configures how OTP codes are delivered to users, via Email (SMTP) and/or Phone (Twilio SMS).
ECall supports Email OTP, SMS OTP, or both, depending on partner configuration.
3.3.1 SMTP Configuration (Email OTP)¶
SMTP configuration defines the sender email address used when sending OTP via email.
Fields
| Field | Description |
|---|---|
| SMTP Host | Mail server hostname (e.g. smtp.gmail.com, smtp.office365.com) |
| SMTP Port | Common values: 587 (TLS β recommended), 465 (SSL) |
| SMTP User | Email account used to authenticate with SMTP server |
| SMTP Password | Password or App Password of the SMTP account |
Behavior When SMTP Is Configured
- OTP emails are sent from the partner's SMTP email
- Sender name and address are derived from SMTP account
Fallback Behavior
β οΈ If SMTP configuration is left empty - OTP emails will be sent using the ECall default system email: -
E2EE Call Support <support@airfeedkh.com>- No email delivery is blocked - This is a safe default for partners who do not want to manage SMTP
β Recommended: Partners who want custom sender branding should configure SMTP.
3.3.2 Twilio Configuration (SMS OTP)¶
Twilio configuration enables OTP delivery via phone number (SMS).
Required Fields
| Field | Description |
|---|---|
| Twilio Account SID | From Twilio Console |
| Twilio Auth Token | From Twilio Console |
| Twilio Verify Service SID | From Twilio Console |
Behavior When Twilio Is Configured
- Users can receive OTP via SMS
- The login UI will show:
- Continue with Phone
- Continue with Email
Behavior When Twilio Is NOT Configured
β οΈ If Twilio configuration is empty - SMS OTP is automatically disabled - The option "Continue with Phone" is hidden from UI - Only Email OTP is available
This behavior is controlled dynamically via:
GET https://api.your_app.org/app/api/app-config
The backend returns app configuration flags, and the client UI adapts automatically.
β This is by design, not a UI bug.
4. Configure iOS Project (Xcode)¶
This step configures the iOS source code to use the credentials prepared above.
4.1 Configure API Credentials via Config.local.xcconfig¶
The project uses .xcconfig files to manage sensitive credentials locally without committing them to Git.
Action¶
-
In the project root, copy the example file:
cp Config.local.example.xcconfig Config.local.xcconfig -
Open
Config.local.xcconfigand fill in your real values:SLASH = / APP_API_ID = your_api_id_from_dashboard APP_API_HASH = your_api_hash_from_dashboard BASE_DOMAIN = your_app.org BUNDLE_URL_SCHEME = your_bundle_url_scheme GOOGLE_CLIENT_ID = your_google_client_id.apps.googleusercontent.com GOOGLE_URL_SCHEME = com.googleusercontent.apps.your_google_client_id SHARE_URL = https:$(SLASH)/your_app_url -
Open
ecall.xcworkspacein Xcode -
Verify: Go to Build Settings β Levels view to confirm values from Config File column are resolved correctly
β οΈ URL Note In
.xcconfigfiles,//is treated as a comment. For URLs, always use:https:$(SLASH)/domain.com/path
Expected Result¶
- API credentials are injected at build time via xcconfig
- App can authenticate with ECall backend
Config.local.xcconfigdoes NOT appear ingit status(gitignored)
π Security Notice - Never hardcode credentials in source files -
Config.local.xcconfigis already in.gitignore- Each developer must create their own copy from the example fileβ οΈ Do NOT modify the following: - API base URLs - Socket / Janus endpoints - Encryption / E2EE logic - Call signaling flow
These components are managed by the ECall core system. Changing them may break security and compatibility.
4.2 Build & Run on Real Device¶
Action¶
-
Select a physical iOS device
-
Build & Run the app
-
Test:
- App launch
- Login (Apple ID)
- Incoming call (VoIP Push)
- CallKit UI appears
Expected Result¶
- App launches successfully
- Incoming calls work in background & locked screen
5. Final Pre-Submission Checklist¶
| Item | Status |
|---|---|
| Partner account created | β |
| Apple certificates created (Push, VoIP, Sign in with Apple) | β |
.p8, .p12 uploaded to dashboard | β |
API credentials configured in Config.local.xcconfig | β |
| SMTP & Twilio configuration | β |
| Bundle ID matches everywhere | β |
| Push & VoIP tested on real device | β |
| CallKit works correctly | β |
| No credentials committed to Git | β |
Support¶
For technical support, contact: - Email: support@airfeedkh.com - Portal: https://web.ecall.org/ - Documentation: https://docs.ecall.org