我是Swift的新手,现在我正在开发一个iOS应用程序,它必须将实时用户发送给用户通知。与聊天应用程序相同,当用户收到新消息时,iPhone必须发送通知。在我的情况下,我只需要通知,但它们必须是实时的。当1个用户点击按钮时,另一个用户应该收到通知。我读了很多文章和问题,但我从来没有找到一个很好的例子。我在我的应用程序中安装了OneSignal和FireBase pod文件,我可以从他们的服务器向应用程序发送通知,但现在我需要在设备之间发送通知。
使用以下代码获取userID:
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向其发送通知。 任何例子或建议将不胜感激。
答案 0 :(得分:1)
我使用了Firebase - 它提供了我需要的所有功能。我没有调查信号。
我将勾勒出我使用的解决方案。是的,还有其他解决方案。
您需要一个网络服务器。像Strato这样的任何供应商都会做(如果你有的话,你甚至可以使用自己的)。您至少需要一台虚拟服务器。
我将PHP用于我的webservice。该webservice将我的消息配置为发送到iOS和Android设备。由于iOS和Android设备会以不同方式处理某些类型的消息,因此您需要确定最适合您的通知类型。
使用我从Firebase获得的信用(密钥,授权,URL),我创建了一个配置文件,我在所有Firebase通知脚本中都使用了该文件。我使用curl与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文档!
您需要通过设备与网络服务进行通信。为此,我使用URLRequest
与服务器进行通信。决定如何发送请求(我使用POST)并相应地添加参数。
您需要返回来自您的网络服务的回复,作为对您的请求的回复。这通常使用JSON字符串来完成,该字符串返回有关消息是否已成功发送的信息。根据需要在代码中使用响应,例如。错误处理。
是的,这只是一个草图。这是很多工作!但是,通过自己动手,你将学到很多东西。