2015-01-19 29 views
13

Tôi đang trong quá trình viết ứng dụng VoIP cho iOS nhưng khi ứng dụng ở chế độ nền, nó dừng nhận cuộc gọi. Khi ứng dụng hoạt động trở lại, tất cả các thư được xếp hàng đợi sẽ bắt đầu được xử lý.iOS nền không hoạt động

Sau đây là những gì tôi đã làm.

Khi xây dựng ứng dụng tôi thêm Voice over IP cũng như Audio and AirPlay vào tệp plist. Sau đó, tôi đánh dấu kết nối websocket với NetworkServiceTypeVoIP như bạn có thể thấy here.

Tôi chưa đặt trình xử lý chờ thời gian chờ vì đăng ký không quan trọng nếu ứng dụng không thức dậy để trả lời cuộc gọi. Mọi sự trợ giúp sẽ rất được trân trọng.

Cần lưu ý rằng đây là dự án Swift đầu tiên của tôi và tôi không quen thuộc với nền tảng iOS.

+0

Bạn có đang sử dụng ổ cắm TCP làm ổ cắm VoIP không? http://stackoverflow.com/a/7393083/624920 –

+0

Tôi đang sử dụng một websocket vì vậy nó chắc chắn là TCP. Bạn có thể tìm thấy mã cho dự án tại đây https://github.com/BetterVoice/phonertc/blob/master/src/ios/WebSocket.swift#L27 –

Trả lời

0

Bạn có thể tìm thấy câu trả lời của bạn hoặc một số đầu mối ->here < -

đúng phải nghiên cứu như sau:

applicationDidEnterBackground 
beginBackgroundTaskWithExpirationHandler 
1

Hãy xem tại Apple documentation, có lẽ bạn đang quan tâm đến việc UIBackgroundModes=voip.

UPD:

Từ tài liệu:

Để cấu hình một ứng dụng VoIP, bạn phải làm như sau:

  1. Cho phép hỗ trợ Voice over IP từ phần chế độ nền của tab Khả năng trong dự án Xcode của bạn. (Bạn cũng có thể bật hỗ trợ này bằng cách bao gồm khóa UIBackgroundModes có giá trị voip trong tệp Info.plist của ứng dụng.)
  2. Định cấu hình một trong các ổ cắm của ứng dụng để sử dụng VoIP .
  3. Trước khi chuyển sang nền, hãy gọi phương thức setKeepAliveTimeout:handler: để cài đặt trình xử lý là được thực hiện định kỳ. Ứng dụng của bạn có thể sử dụng trình xử lý này để duy trì kết nối dịch vụ của nó.
  4. Định cấu hình phiên âm thanh của bạn để xử lý các chuyển tiếp đến và đi từ hoạt động sử dụng.
+2

Nếu liên kết bị chết hoặc thay đổi, câu trả lời của bạn sẽ giảm xuống "bạn có thể quan tâm đến 'UIBackgroundModes = voip'.". Bạn có thể thịt nó ra một chút để sau liên kết là không cần thiết? –

+1

Bản cập nhật sau có ý nghĩa gì đối với bạn không? – ilidar

+0

Ah, đó là ** nhiều hơn **. Cảm ơn bạn. –

2

Để cho phép để làm việc ứng dụng của bạn trong chế độ nền, bạn cần phải kích hoạt Voice over IP cờ ON (Đường dẫn: Tới nhắm mục tiêu -> khả năng -> Các chế độ Background). như dưới đây.

enter image description here

Và thêm sau mã trong dự án của bạn để hỗ trợ trong nền:

Bước 1: Declare __block UIBackgroundTaskIdentifier bgTask như biến toàn cầu.

Bước 2: Để thêm mã sau vào ứng dụngDidEnterBackground.

- (void)applicationDidEnterBackground:(UIApplication *)application { 

     bgTask = [application beginBackgroundTaskWithExpirationHandler:^{ 
     bgTask = UIBackgroundTaskInvalid; 
      }]; 

} 

Bước 3: Dừng xử lý tác vụ chạy nền khi các ứng dụng đi kèm trong chế độ foreground.

- (void)applicationWillEnterForeground:(UIApplication *)application { 
    // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background. 

    [[UIApplication sharedApplication] endBackgroundTask:bgTask]; 

} 
Các vấn đề liên quan