2013-06-21 23 views
6

Tôi đang làm việc trên ứng dụng iPhone và Mac OS X, cho phép bạn khóa và mở khóa máy Mac của bạn thông qua sự gần gũi. Có nghĩa là nếu bạn cường độ tín hiệu là dưới một ngưỡng xác định hoặc kết nối bị mất nó sẽ khóa mac.CoreBluetooth - Quảng cáo iPhone ở chế độ backgrund

Tôi đang làm việc với khung công tác Apples CoreBluetooth cho BTLE, sử dụng iPhone làm thiết bị ngoại vi và Mac làm trung tâm. Càng xa càng tốt. Nó cũng wokrs rất tốt nhưng khi tôi gửi các ứng dụng cho nền trên iPhone quảng cáo dường như thay đổi. IPhone vẫn quảng cáo nhưng không có hồ sơ dịch vụ và đặc điểm tôi sử dụng trong ứng dụng. Mặc dù đây không phải là vấn đề khi iPhone vẫn nằm trong phạm vi của Mac, vì nó vẫn được kết nối và các đặc tính không được sử dụng ở trung tâm, nó trở thành vấn đề sau khi di chuyển iPhone ra khỏi phạm vi. Theo dự kiến, Mac sẽ khóa và bắt đầu khám phá để kết nối lại iPhone và mở khóa nếu thành công.

Nhưng trong khám phá này, tôi sử dụng hồ sơ dịch vụ được chỉ định và các đặc điểm để chỉ nhận các thiết bị chạy ứng dụng của tôi và xác định một thiết bị để mở khóa.

Tôi đã cố gắng giải quyết sự cố bằng cách khám phá mà không có hồ sơ dịch vụ và xác định thiết bị chính xác qua UUID, mà tôi đã lưu, khi tôi bắt đầu sử dụng iPhone này để khóa và mở khóa. Cách giải quyết này cũng hoạt động trong một phạm vi nhỏ, bởi vì khi tôi tắt Bluetooth trên iPhone và bật lại, nó nhận được một UUID khác. Đó là một hạn chế tôi có thể sống với, nhưng nó cũng thay đổi UUID sau một vài giờ và sau đó mở khóa không hoạt động.

Có thể ai đó đã làm việc trên một ứng dụng như vậy và biết cách khắc phục sự cố như vậy? Hoặc bạn biết một giá trị tĩnh mà tôi có thể sử dụng để xác định thiết bị?

Trả lời

5

Vì vậy, có vẻ như, như thường lệ, Apple có một số điều kỳ lạ và độc đáo đang diễn ra trong khuôn khổ của họ. Khi bạn quảng cáo từ thiết bị iOS (chẳng hạn như iPhone), có hai "vùng lưu trữ" cho quảng cáo - một thiết bị bình thường mà mọi thiết bị đang quét có thể xem và một thiết bị "tràn" chỉ có thể xem được Các thiết bị iOS đang quét cụ thể. Khi ứng dụng của bạn quảng cáo trong nền, tất cả UUID dịch vụ mà bạn quảng cáo đi vào vùng tràn này không may, vì vậy có vẻ như chỉ các thiết bị iOS khác có thể xem và không phải máy Mac của bạn. Từ CBPeripheralManager docs:

Bất kỳ dịch vụ Uuid (UUIDs) chứa trong giá trị của khóa CBAdvertisementDataServiceUUIDsKey không phù hợp trong không gian được phân bổ được thêm vào một “tràn” khu vực đặc biệt; chúng có thể là chỉ được phát hiện bởi thiết bị iOS đang quét chúng một cách rõ ràng. Trong khi ứng dụng của bạn ở chế độ nền, tên địa phương không được quảng cáo và tất cả UUID dịch vụ được đặt trong vùng tràn.

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