菜鸟教程小白 发表于 2022-12-13 12:56:43

ios - firebase onDisconnectSetValue 未按预期工作


                                            <p><p>也许我理解 firebase 的 onDisconnectSetValue 错误,但我希望如下:
在firebase中,如果应用程序与firebase连接,我有一个值为“active”的值。如果连接丢失,我喜欢使用 onDisconnectSetValue 将值设置为 false。
为了测试它,我执行以下操作:
- 使用互联网连接启动应用程序(设置 wlan)
- 应用程序将“事件”设置为真
- 现在我切断互联网连接(关闭无线局域网)</p>

<p>现在我希望 firebase 自动将“Active”设置为 false,但该值保持为 true。</p>

<p>奇怪的是,如果我重新连接到互联网(再次打开 wlan),“事件”设置为 false。</p>

<p>代码:</p>

<pre><code>Firebase *userAppActiveRef = ;
Firebase *infoRef = ;
[infoRef observeEventType:FEventTypeValue withBlock:^(FDataSnapshot *snapshot) {
    if() {
      NSLog(@&#34;connected&#34;);
      ;
      ;
    } else {
      NSLog(@&#34;not connected&#34;);
    }
}];
</code></pre>

<p>infoRef = .../.info/connected</p>

<p>我做错了什么或者 onDisconnectSetValue 没有按照我的想法工作?</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>尝试这个稍微不同的方向(这是您发布的大部分代码的扩展版本)</p>

<p>这有两个部分。第 1 部分是应用程序知道自己是否已连接(并采取任何一种方式),第 2 部分是知道其他用户是否已连接:</p>

<pre><code>    //keep track if the app is connected to firebase or not via isConnected
    //isConnected has KVO listeners in the classes so they can take
    //action when the user disconnects or reconnects

    Firebase *connectedRef = ;

    [connectedRef observeEventType:FEventTypeValue withBlock:^(FDataSnapshot *snapshot) {

      //KVO property will change if the app d/c&#39;s      
      self.isConnected = ;

      if ( self.isConnected ) {
            NSLog(@&#34;connected&#34;);
            ;

      } else {
            NSLog(@&#34;d/c&#39;d!! Run for the hills!&#34;);
      }

    }];
</code></pre>

<p>通过此设置,应用知道何时连接,并将 thisUsersStatusRef 设置为 YES。</p>

<p>然后,设置 onDisconnect 以在用户断开连接时执行操作</p>

<pre><code>;
</code></pre>

<p>这告诉服务器在客户端断开连接时删除 thisUsersStatusRef(您也可以设置为 NO)。</p>

<p>所以当用户连接时,thisUsersStatusRef 设置为 YES,当它断开连接时,该值被删除。</p>

<p>最后,让您的应用观察用户节点是否有任何更改 - 如果其他用户连接该应用,将会收到通知,如果他们断开连接,他们也会收到通知。</p>

<pre><code>[usersRef observeEventType:FEventTypeChildChanged withBlock:^(FDataSnapshot *snapshot) {

   //the snapshot will contain the user that connected or disconnects
   //so just test to see if status is YES or null

}];
</code></pre></p>
                                   
                                                <p style="font-size: 20px;">关于ios - firebase onDisconnectSetValue 未按预期工作,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/34400749/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/34400749/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - firebase onDisconnectSetValue 未按预期工作