【问题标题】:How to send real time device to device notifications using swift 3?如何使用 swift 3 向设备发送实时通知?
【发布时间】:2017-08-09 20:10:43
【问题描述】:

我是 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 服务。
  • 我查看了您发送给我的链接,不幸的是它没有为我的问题提供答案:(
  • @Barns52 有什么例子吗?
  • 您是否创建了 Apple 推送通知证书并正确配置了 Firebase 云通知 APN?此外,您的 iOS 项目中的推送通知是否“开启”-> 启用通知权利的功能?

标签: firebase swift3 push-notification onesignal


【解决方案1】:

我使用了 Firebase,它提供了我需要的所有功能。我没有调查 onesignal。

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

您将需要一个网络服务器。来自 Strato 等任何提供商的一个都可以(如果你有的话,你甚至可以使用自己的)。您至少需要一个虚拟服务器。

我将 PHP 用于我的网络服务。该网络服务将我的消息配置为发送到 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 字符串来完成。根据需要在代码中使用响应,例如。错误处理。

是的,这只是一个草图。这是很多工作!但是,你会通过自己做很多事情来学习。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-13
    • 1970-01-01
    • 1970-01-01
    • 2019-05-09
    • 2011-08-03
    • 1970-01-01
    相关资源
    最近更新 更多