2012-01-13 18 views
6

OK, vì vậy tôi đã chỉ định một UIRequiresPersistentWiFi chủ chốt của plist App của tôi để YES nên iOS sẽ không dừng lại lấy dữ liệu khi ứng dụng của tôi là ở chế độ nền.UIRequiresPersistentWiFi tương đương cho kết nối di động

Tuy nhiên, khi người dùng sử dụng kết nối di động (không phải wifi) và ứng dụng của tôi ở chế độ nền, việc tải xuống dữ liệu sẽ bị dừng sau vài phút.

Tôi đã kiểm tra lại tài liệu và có vẻ như không có tương đương với UIRequiresPersistentWiFi cho mạng di động mà tôi có thể đặt.

Có cách nào tôi có thể thực hiện các kết nối qua mạng di động tồn tại trong khi ứng dụng ở chế độ nền không? Bất kỳ gợi ý nào?

Chúc mừng!

Cập nhật:

Tôi đang làm cho một ứng dụng Internet radio. Stream được kết hợp với mp3 mà tôi yêu cầu cái khác (không thể yêu cầu trước, không thể thay đổi phía máy chủ). Nó hoạt động khi ứng dụng của tôi ở chế độ nền và sử dụng wifi. Tuy nhiên, khi sử dụng kết nối di động, các yêu cầu mạng sẽ không được thực hiện sau một khoảng thời gian nào đó trong nền. Không có chỗ thay đổi chiến lược. Ứng dụng này nằm trong AppStore và nó đã hoạt động trước đó. Tôi đoán họ đã thay đổi một cái gì đó trong phiên bản mới của hệ thống.

Hơn nữa tôi không cần điều chỉnh. Ứng dụng radio của tôi đã được phê duyệt và đang ở trong AppStore. Luồng được gửi với 128kb/s (đó là tối đa) do đó không phải là một vấn đề. Có vẻ như hệ thống im lặng yêu cầu mạng của tôi (khi trên mạng di động) sau một thời gian ở chế độ nền. Tuy nhiên, điều này chỉ xảy ra khi tôi cố gắng khởi động kết nối ở chế độ nền.

Mô tả:

  1. App được trong nền chơi một mp3 xem trực tiếp qua mạng di động .
  2. Mp3 kết thúc
  3. tôi yêu cầu URL khác mp3
  4. Yêu cầu không được thực hiện *.

* hoạt động khi sử dụng WiFi.

+0

Tôi không chắc chắn rằng đó chính xác là những gì bạn đang tìm kiếm, nhưng hãy xem xét điều đó: http://stackoverflow.com/q/4595638/1047258 – Novarg

+0

Cảm ơn, nhưng không liên quan gì đến câu hỏi của tôi. – RaffAl

Trả lời

10

Tôi khá chắc chắn không có cái gì như thế này cho mạng di động. Đây là lý do của tôi:

  • Chi phí dịch vụ di động tiền. Nhiều tiền. Mỗi phút. Dịch vụ Wifi không tốn tiền, so sánh.
  • AT & T không có nhiều băng thông và tính phí thêm cho người dùng để sử dụng băng thông bổ sung.
  • Apple là một công ty muốn làm cho trải nghiệm người dùng trở nên sạch sẽ và tốt đẹp nhất có thể.
  • Khi chi phí là cắt cổ không phải do lỗi của chính họ, người dùng tức giận và trải nghiệm của họ không tốt.

Nếu Apple cho phép bạn kết nối liên tục với web ngoài phạm vi wifi, chi phí dịch vụ của người dùng sẽ tăng vọt và họ sẽ không biết tại sao. Và nếu Apple cung cấp cho các lập trình viên khả năng này, ai đó sẽ lạm dụng nó. Vì vậy, tôi chắc chắn rằng Apple sẽ không cho phép bạn làm điều đó.

Tại sao bạn cần kết nối internet liên tục khi ứng dụng của bạn ở chế độ nền (trừ khi, tôi đoán, bạn đang tạo một ứng dụng radio internet)? Hãy nhớ rằng, khi ở chế độ nền, ứng dụng của bạn có thể bị chấm dứt mà không cần cảnh báo bất cứ lúc nào. Bạn có thể muốn suy nghĩ lại chiến lược của mình nếu bạn không thể tìm ra cách để làm điều này. :/

+0

Tôi đang tạo một ứng dụng radio trên Internet. Stream được kết hợp với mp3 mà tôi yêu cầu cái khác (không thể yêu cầu trước). Nó hoạt động khi ứng dụng của tôi ở chế độ nền và sử dụng wifi. Tuy nhiên, khi sử dụng kết nối di động, các yêu cầu mạng sẽ không được thực hiện sau một khoảng thời gian nào đó trong nền. Không có chỗ thay đổi chiến lược. Ứng dụng nằm trong AppStore và nó hoạt động. Tôi đoán họ đã thay đổi một cái gì đó trong phiên bản mới của hệ thống. – RaffAl

+0

Tôi đã biết, tôi sẽ không nói để suy nghĩ lại chiến lược. Đối với yêu cầu mp3 điều, tôi mang nó, bạn đã cố gắng để liên tục dòng âm thanh, mà không cần phải yêu cầu lại các dòng âm thanh? Tôi biết Apple đã nhận được flack cho các ứng dụng nền tiêu hao pin khi họ lần đầu tiên đưa lên đa tác vụ. Rất có thể điều đã thay đổi là chiến lược của Apple để giữ cho các ứng dụng nền không chiếm dụng pin và băng thông (sau cùng, tốn nhiều pin hơn để thực hiện kết nối di động hơn là kết nối wifi) – Tustin2121

+0

Cách tiếp cận của tôi đã hoạt động trước đó. Kết luận của tôi là Apple đã trở nên nghiêm ngặt hơn và không cho phép thực hiện các yêu cầu trong khi ứng dụng đã ở chế độ nền trong một thời gian và sử dụng mạng di động. Tôi đã thử tất cả các cách giải quyết mà tôi nghĩ đến. Không ai trong số họ khắc phục vấn đề này. – RaffAl

1

Tôi nghĩ rằng không có tương đương với UIRequiresPersistentWiFi, có các lý do có thể bao gồm những lý do được chỉ ra bởi Tusting2121.

Nhưng xin lưu ý rằng UIRequiresPersistentWiFi được kết nối với tiết kiệm năng lượng. Mô-đun wifi tiêu thụ năng lượng, vì vậy thông thường nó sẽ ngừng hoạt động sau một thời gian để tiết kiệm năng lượng trừ phi UIRequiresPersistentWiFi được đặt. Tiết kiệm năng lượng như vậy, tôi tin rằng, không phải là một trường hợp trong trường hợp di động.

Và thực tế là kết nối của bạn biến mất sau một vài phút trong chế độ di động có thể do một điều gì đó hoàn toàn khác với bản sao cơ chế tiết kiệm năng lượng wifi mà bạn yêu cầu. Xem ví dụ this article cho thấy rằng bạn có nghĩa vụ phải điều tiết luồng dữ liệu 3G của bạn.

+0

Cảm ơn bạn đã đề xuất nhưng tôi không cần điều chỉnh. Ứng dụng radio của tôi đã được phê duyệt và đang ở trong AppStore. Luồng được gửi với 128kb/s (đó là tối đa) do đó không phải là một vấn đề. Có vẻ như hệ thống im lặng yêu cầu mạng của tôi (khi trên mạng di động) sau một thời gian ở chế độ nền. Tuy nhiên, điều này chỉ xảy ra khi tôi cố gắng khởi động kết nối ở chế độ nền. – RaffAl

1

Thêm audio vào số UIBackgroundModes mục nhập số Info.plist của bạn.

Theo Apple Documents: In your callbacks, though, you should do only the work necessary to provide data for playback. For example, a streaming audio app would need to download the music stream data from its server and push the current audio samples out for playback. You should not perform any extraneous tasks that are unrelated to playback.

Bạn cũng có thể nhận được một số giá trị ra khỏi sự xâm nhập voip - bạn có thể setKeepAliveTimeout:handler: đã xử lý của bạn được gọi là trên cơ sở định kỳ để cư luồng dữ liệu của bạn.

+0

Cảm ơn câu trả lời nhưng tôi đã có khóa âm thanh trong mục nhập UIBackgroundModes. Tôi cũng nghĩ rằng tôi không nên thêm khóa voip.Điều này có thể dẫn đến việc từ chối ứng dụng vì ứng dụng của tôi không sử dụng bất kỳ dịch vụ VoIP nào. – RaffAl

+1

Bạn đang xếp hàng các tệp mp3 riêng biệt và sau đó phát từng tệp một? Có thể là khi bạn ngừng phát tệp xếp hàng cuối cùng thì ứng dụng sẽ bị tạm ngưng? Từ các tài liệu 'Tuy nhiên, nếu ứng dụng ngừng phát âm thanh hoặc video đó, hệ thống sẽ tạm ngưng nó.' Bạn có ngừng phát và sau đó bắt đầu tệp tiếp theo không? Có cách nào để liên tục tải bộ đệm của bạn thay vì để nó thoát? – ikuramedia

+0

Nếu không, chúng tôi sẽ cần thêm chi tiết - liệu nó có ngừng phát sau một khoảng thời gian giống nhau không? Hoặc cùng một số bài hát? Có phải giữa các bài hát hoặc giữa bài hát không? Bạn yêu cầu dữ liệu của bạn từ mạng như thế nào? Bạn đang sử dụng những cuộc gọi lại nào để tải các giai điệu tiếp theo? Vv ... – ikuramedia

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