2016-06-03 10 views
0

Ich versuche zu umgehen, dass die messageLostHandler nicht für viele Minuten ausgelöst wird, nachdem ein Gerät mit Audio (oder Earshot für Android) außerhalb der Reichweite ist.Google Nest subscriptionWithMessageFoundHandler wird einmal ausgelöst?

Ich hatte gehofft, dass alle paar Sekunden eine Nachricht von einem anderen Gerät empfangen würde. Es feuert einmal. Wird das erwartet? Da ich mich nicht auf den Handler messageLost verlassen kann - woher weiß ich, wenn ein Gerät wirklich außerhalb der Reichweite des Ultraschalls ist?

Ich habe einen Timer nach dem Empfang von subscriptionWithMessageFoundHandler programmiert, in der Hoffnung, dass eine andere Nachricht hereinkommt. Ich könnte den Timer einfach ungültig machen oder neu starten. Wenn der Timer ausgelöst wird, würde ich wissen, dass x Sekunden vergangen sind und dass das andere Gerät außerhalb der Reichweite sein muss. Kein solches Glück.

UPDATE: Hier ist der Code in Frage:

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 
}) 

Beachten Sie, dass die "PING" nur einmal gedruckt.

+0

können Sie einen Teil Ihres Codes in Ihre Frage einfügen –

+0

Ich habe es oben zur ursprünglichen Frage hinzugefügt. –

Antwort

2

Wenn ein Gerät den zulässigen Bereich verlässt, wartet Nearby für 2 Minuten, bevor das Token des anderen Geräts aus dem Cache gelöscht wird. Wenn Sie also 2 Minuten warten, sollte der Handler messageLost aufgerufen werden. Kannst du das verifizieren? Kann man davon ausgehen, dass Sie eine Auszeit von weniger als 2 Minuten haben möchten? Diese Zeitüberschreitung war ein Diskussionsthema, und es wurde darüber geredet, einen Parameter hinzuzufügen, damit Apps einen Wert auswählen können, der für den Anwendungsfall besser geeignet ist.

+0

Ich werde dieses Wochenende oder spätestens am Montag überprüfen. Ein Parameter wäre super wunderbar mit einem Standardwert von zwei Minuten. –

+0

Ich fand, es war mehr in der Größenordnung von 3 Minuten, aber nahe 2 unabhängig. Auch hier wäre ein Parameter wunderbar. Ich verstehe, warum die Standard 2 Minuten verwendet werden und unter bestimmten Umständen für das, was ich mache, ist es in Ordnung. –

+0

Danke für die Rückmeldung! Ich werde dieses Thema nicht auf den Boden fallen lassen. –

Verwandte Themen