Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Firebase 如何使用swift 3发送实时设备到设备通知?_Firebase_Swift3_Push Notification_Onesignal - Fatal编程技术网

Firebase 如何使用swift 3发送实时设备到设备通知?

Firebase 如何使用swift 3发送实时设备到设备通知?,firebase,swift3,push-notification,onesignal,Firebase,Swift3,Push Notification,Onesignal,我是Swift的新手,现在我正在开发一个iOS应用程序,它必须发送实时用户到用户通知。与聊天应用程序一样,当用户收到新消息时,iPhone必须发送通知。在我的情况下,我只需要通知,但它们必须是实时的。当一个用户单击按钮时,另一个用户应收到通知。我读过很多文章和问题,但我从来没有找到一个好的例子。我已经在我的应用程序中安装了OneSignal和FireBase pod文件,我可以从它们的服务器向应用程序发送通知,但现在我需要在设备之间发送通知 通过以下代码,我获得用户ID: func onOSSu

我是Swift的新手,现在我正在开发一个iOS应用程序,它必须发送实时用户到用户通知。与聊天应用程序一样,当用户收到新消息时,iPhone必须发送通知。在我的情况下,我只需要通知,但它们必须是实时的。当一个用户单击按钮时,另一个用户应收到通知。我读过很多文章和问题,但我从来没有找到一个好的例子。我已经在我的应用程序中安装了OneSignal和FireBase pod文件,我可以从它们的服务器向应用程序发送通知,但现在我需要在设备之间发送通知

通过以下代码,我获得用户ID:

func onOSSubscriptionChanged(_ stateChanges: OSSubscriptionStateChanges!) {
    if !stateChanges.from.subscribed && stateChanges.to.subscribed {
        print("Subscribed for OneSignal push notifications!")
    }
    print("SubscriptionStateChange: \n\(stateChanges)")

    //The player id is inside stateChanges. But be careful, this value can be nil if the user has not granted you permission to send notifications.
    if let playerId = stateChanges.to.userId {
        print("Current playerId \(playerId)")
    }
}
但是我如何使用这个ID向它发送通知呢。 任何示例或建议都将不胜感激。

我使用了Firebase——它提供了我所需的所有功能。我没有调查一个信号

我将勾勒出我使用的解决方案。是的,还有其他解决办法

您将需要一个Web服务器。像Strato这样的任何供应商都可以提供一个(如果你有,你甚至可以使用自己的)。您至少需要一个虚拟服务器

我将PHP用于我的Web服务。该Web服务将我的消息配置为发送到iOS和Android设备。由于iOS和Android设备处理某些类型的消息的方式不同,因此您需要决定哪种类型的通知最适合您

使用我从Firebase获得的信誉(密钥、授权、URL),我创建了一个配置文件,我在所有Firebase通知脚本中都使用了该文件。我曾经和Firebase服务联系过

大概是这样的:

$headers = array();
$headers[] = 'Content-Type: application/json';
$headers[] = 'Authorization: key='.$server_key;

//Setup curl, add headers and post parameters.
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");                                                                     
curl_setopt($ch, CURLOPT_POSTFIELDS, $json);
curl_setopt($ch, CURLOPT_HTTPHEADER,$headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$error = "0";
//Send the request
$curl_result = curl_exec($ch);
if($curl_result == FALSE){
    $error = curl_error($ch);
}

//Close request
curl_close($ch);
在发送实际消息之前,您将有大量工作要做——确定要发送的消息类型(数据有效负载,或者只是通知)。然后相应地格式化它。请参阅Firebase文档了解此信息

从您的设备,您将需要与Web服务进行通信。为此,我使用
URLRequest
与服务器通信。决定如何发送请求(我使用POST)并相应地添加参数

您将希望从Web服务返回一个响应,作为对请求的响应。这通常是通过一个JSON字符串来完成的,该字符串返回消息是否成功发送的信息。根据需要在代码中使用响应,例如错误处理


是的,这只是个草图。这是一个很大的工作!但是,你自己做会学到很多

可能的重复项为了发送设备到设备的消息,您需要设置一个Web服务来处理您的请求,并将必要的数据发送到Firebase服务。我查看了您发送给我的链接,不幸的是,它没有提供我问题的答案:(@Barns52)有任何示例吗?您是否创建了Apple推送通知证书并正确配置了Firebase云通知APN?此外,在您的iOS项目->启用通知权限的功能中推送通知是否“打开”?