2016-06-03 4 views
0

Audio (또는 Earshot for Android)를 사용하여 장치가 범위를 벗어난 후 messageLostHandler가 수 분 동안 실행되지 않는다는 사실을 해결하려고합니다.Google Nest subscriptionWithMessageFoundHandler가 한 번 발생합니까?

나는 몇 초마다 다른 장치로부터 메시지를 받기를 바랬다. 그것은 한 번 발사됩니다. 예상 되나요? 메시지에 의존 할 수 없기 때문에 핸들러가 - 초음파가 범위를 벗어 났을 때 어떻게 알 수 있습니까?

다른 메시지가 들어 오기를 기대하면서 subscriptionWithMessageFoundHandler를받은 후 타이머를 코딩했는데 타이머를 무효화하거나 다시 시작할 수있었습니다. 타이머가 작동하면 x 초가 지나고 다른 장치가 범위를 벗어 났음을 알 수 있습니다. 그런 행운은 없습니다.

UPDATE :

let strategy = GNSStrategy.init(paramsBlock: { (params: GNSStrategyParams!) -> Void in 
    params.discoveryMediums = .Audio 
}) 

publication = messageMgr.publicationWithMessage(pubMessage, paramsBlock: { (pubParams: GNSPublicationParams!) in 
    pubParams.strategy = strategy 
}) 

subscription = messageMgr.subscriptionWithMessageFoundHandler({[unowned self] (message: GNSMessage!) -> Void in 
    self.messageViewController.addMessage(String(data: message.content, encoding:NSUTF8StringEncoding)) 

    // We only seem to get a 1x notification of a message. So this timer is folly. 
    print("PING") //Only 1x per discovery. 

}, messageLostHandler: {[unowned self](message: GNSMessage!) -> Void in 
    self.messageViewController.removeMessage(String(data: message.content, encoding: NSUTF8StringEncoding)) 
}, paramsBlock: { (subParams: GNSSubscriptionParams!) -> Void in 
    subParams.strategy = strategy 
}) 

주의 그 "PING은"단지 인쇄 번 : 여기에 문제의 코드입니다.

+0

질문에 귀하의 코드 일부를 포함시킬 수 있습니까? –

+0

나는 원래의 질문에 위에 추가했습니다. –

답변

2

장치가 범위를 벗어나면 주변 장치는 캐시에서 다른 장치 토큰을 플러시하기 전에 2 분 동안 기다립니다. 따라서 2 분 동안 기다리면 messageLost 핸들러가 호출되어야합니다. 이것을 확인할 수 있습니까? 또한 2 분보다 짧은 시간 제한을 원한다고 가정하는 것이 안전합니까? 이 시간 제한은 논의 주제였으며 매개 변수를 추가하여 앱이 유스 케이스에 더 적합한 값을 선택할 수 있도록하는 논의가있었습니다.

+0

이번 주말 또는 월요일에 최신 정보를 확인하겠습니다. 매개 변수는 2 분의 기본값으로 매우 훌륭합니다. –

+0

나는 그것이 3 분 정도이지만 2에 가깝다는 것을 발견했다. 다시 한 번 매개 변수가 훌륭합니다. 기본 2 분이 사용되는 이유와 일부 상황에서 내가하는 일에 대해 이해합니다. 괜찮습니다. –

+0

의견에 감사드립니다. 나는이 문제가 바닥에 떨어지지 않도록 할 것이다. –