Android

I. Thiết lập Android Studio project

Bước 1: Tải portsipSDK tại đây.

Bước 2: Giải nén file .zip vừa mới tải về, copy file AndroidSample/SIPSample_AndroidStudio/SIPSample/libs/portsipvoipsdk.jar vào thư mục app/libs của project Android

Bước 3: Compile Libs : Chuột phải vào file portsipvoipsdk.jar chọn Add as Library...

Bước 4: Khai báo các permission cần thiết trong file AndroidManifest.xml

Tài liệu tham khảo: https://www.portsip.com/docs/sdk/manual/portsip-voip-sdk-user-manual-android.pdf

Những ví dụ từ mục II trở đi áp dụng cho 2 file: MainActivity.ktPortsipService.kt

II. Khởi tạo SDK

Ở file PortsipService.kt

  • Khai báo biến global val portsipSDK: PortSipSdk = PortSipSdk() . Dùng để gọi các API của PortsipSDK.

  • Class PortsipService phải implement interface: **OnPortSIPEvent .**

Hàm này nên được gọi chung lúc với đăng nhập máy nhánh.

III. Đăng nhập máy nhánh (extension)

Đầu tiên, ở file MainActivity.kt, ta phải khởi chạy PortsipService trước

Ở file PortsipService.kt, sau khi startService như bước 1 thì onStartCommand của PortsipService được chạy, đăng nhập máy nhánh có thể được gọi lúc này, được hiện thực như ví dụ sau:

Nên có 1 biến portsipRegistered dùng để lưu trạng thái đã register với portsip thành công hay chưa. Nếu đã register thành công thì chỉ cần gọi API refreshRegistration(), không cần qua 2 bước initialSDK()registerPortsip() bên trên.

Nếu muốn register lại từ đầu thì phải Khởi tạo SDK lại như mục II.

Có 2 event sẽ xảy ra khi đăng nhập máy nhánh:

IV. Đăng xuất máy nhánh (extension)

Ở file PortsipService.kt

V. Thực hiện cuộc gọi (outgoing call)

Ở file PortsipService.kt

  • Để thực hiện cuộc gọi:

  • Khi người nhận cuộc gọi chấp nhận cuộc gọi:

Sự kiện onInviteAnswered() xảy ra.

Khi người nhận cuộc gọi từ chối cuộc gọi/cuộc gọi không được bắt máy/hay vì 1 lý do nào đó mà cuộc gọi không thành công:

sự kiện onInviteFailure() xảy ra.

Chủ động kết thúc cuộc gọi:

VI. Nhận cuộc gọi (incoming call)

Cần áp dụng Mobile Push (push notification voip) để ứng dụng có thể nhận cuộc gọi trong các trường hợp không active:

  • Người dùng không ở màn hình ứng dụng

  • Khoá màn hình

  • Kill app

6.1. Thiết lập mobile push

Để sử dụng mobile push, cần khai báo ứng dụng Android với hệ thống portsip thông qua các bước:

  • Lấy 2 thông tin: 1 Server Key và 1 Sender ID trên Firebase của Project.

  • applicationId nằm trong file build.gradle (Module: android.app) ví dụ: vn.etelecom.app

  • Gửi cho eTelecom 3 thông tin này để tạo thêm Mobile Push.

6.2. Hiện thực

  • Khi có một cuộc gọi đến máy nhánh:

Sự kiện onInviteIncoming() xảy ra.

  • Tạo 1 service là FirebaseService, và khai báo nó ở AndroidManifest.xml

  • build.gradle(Project: android), thêm classpath sau đây:

  • build.gradle(Module: android.app), thêm dependencies như sau:

Tạo notification channel: để dùng trong việc thông báo cuộc gọi đến. Ta nên gọi hàm này cùng lúc với đăng nhập máy nhánh.

Khi onStartCommand của PortsipService được chạy, đã trình bày chi tiết ở mục III.

  • Khi token của Firebase được refresh:

  • Khi kill app, hoặc tắt màn hình điện thoại, cuộc gọi đến sẽ được bắn qua Firebase và sẽ xử lý tại đây:

  • Khi khởi động ứng dụng, lần đầu tiên start của PortsipService, ta phải lắng nghe token của Firebase rồi đăng nhập máy nhánh sau.

  • Hàm refreshPushToken có thể hiện thực như sau:

  • Hàm showPendingNotification có thể hiện thực như sau:

Một số thao tác user có thể thực hiện khi có cuộc gọi: Chấp nhận (bắt máy), Từ chối, Ngắt máy (sau khi đã chấp nhận), v.v....

VII. Cuộc gọi video

Cần có 1 Activity thể hiện cuộc gọi Video, ví dụ như sau:

Nên dùng biến portsipSDK ở file PortsipService.kt để không xảy ra hiện tượng nhiều instance của 1 biến được tạo ra, sẽ phát sinh nhiều bug không mong muốn.

Giao diện của Activity bên trên, có thể hiện thực ở file video_call_view.xml như ví dụ sau:

Gọi ra và nhận cuộc gọi đến:

Last updated