React-Native:推送通知+解析

2024-01-06

我目前正在开发一个小型应用程序项目,以学习和尝试 iOS 上的 React-Native。我对解析(parse.com)有一些经验,并且希望将解析集成到新应用程序中。目前,我没有任何问题,包括将js解析为react-native。我可以使用帐户等登录。现在我需要向一定数量的用户(不是所有用户)发送推送通知。

我不明白的是推送通知应如何与反应本机和解析一起使用。通常,我会将设备安装与用户 ID 连接起来,然后向一定数量的用户(这意味着具有相应安装的设备)发送推送。 React-Native 指南 (https://facebook.github.io/react-native/docs/pushnotificationios.html#content https://facebook.github.io/react-native/docs/pushnotificationios.html#content)没有提到类似的事情。尽管它提供了解析指南作为参考,但我看不到应该如何通过解析发送推送。该指南还留下了很多有待改进的信息。这些“听众”订阅的来源是什么?我要从哪个服务器发送通知等?

据我了解,parse js 无法读取当前安装。我也犹豫是否将 Parse iOS 添加到项目中。这感觉不自然,不应该是必须要做的事情,尽管它可以让我阅读当前的安装。 (但解析js仍然无法注册该安装以便订阅推送通知)。

此刻,我感到有些失落。这条信息(https://news.ycombinator.com/item?id=9271687 https://news.ycombinator.com/item?id=9271687)告诉我这应该是可能的。我只是不知道怎么办:(

希望有人能帮助我。一些建议将非常感激。


EDIT:react-native 现在默认实现此行为。有趣的部分是注册事件的事件监听器,它现在返回设备令牌。现在程序非常简单。只需看一下docs https://facebook.github.io/react-native/docs/pushnotificationios.html#content另请查看 JWindey 的答案。其中有一些非常重要的点,需要实际触发事件。

经过一段时间的尝试和大量的尝试,我们今天找到了答案。这是我们的解决方案,看起来效果很好。

我们使用以下资源:

  • 反应本机
  • parse-js
  • 解析 REST API
  • 反应本机远程推送(https://github.com/darylrowland/react-native-remote-push https://github.com/darylrowland/react-native-remote-push)

请遵循推送通知的解析指南(https://parse.com/tutorials/ios-push-notifications https://parse.com/tutorials/ios-push-notifications)并正确设置所有内容(配置文件、证书等)。稍后使用react-native-remote-push组件,您不必遵循步骤5和6。

现在将react-native-remote-push 添加到您的项目中。我们必须对代码进行一些小的调整(主要处理遗留的 objC 代码),但这可能取决于您自己的项目。

我们的项目有某种“起始页面”,每次打开应用程序时都会显示该页面。在此页面上,我们处理推送通知权限以及设备令牌和推送通知侦听器的注册。我们的目标是模仿使用解析 iOS SDK 收到的相同行为。

我们需要先注册设备并订阅推送通道。 react-native-remote-push 允许我们处理权限并接收设备令牌。然后,我们继续使用此设备令牌通过 Rest API 注册此安装。这段代码是我们的 componentDidMount() 调用的一部分。

var PushManager = require('./RemotePushIOS');
var registerInstallation = require('./Installation');

componentDidMount() {
    PushManager.requestPermissions(function(err, data) {
        if (err) {
            console.log("Could not register for push");
        } else {
            registerInstallation({
                "deviceType": "ios",
                "deviceToken": data.token,
                "channels": ["global"]
            });
         }
    });

    PushManager.setListenerForNotifications(this.receiveRemoteNotification);
}

PushManager 是react-native-remote-push 所需的组件,registerInstallation 是包含Rest API 调用的函数。

/**
* registers an installation
* data should look like the following:
* {
*  "deviceType": "ios", // or "android"
*  // if android is targeted set
*  // "pushType": "gcm",
*  // "GCMSenderId": "56712320625545", // whatever the later means
*  "deviceToken": "29e32a686fd09d053e1616cb48",
*  "channels": [
*       ""
*   ]
* };
* for more information visit:
* https://www.parse.com/docs/rest#installations-uploading
*/
var registerInstallation = function(data) {
    var url = "https://api.parse.com";
    url += "/1/installations";
    fetch(url, {
        method: 'post',
        headers: {
            'Accept': 'application/json',
            'X-Parse-Application-Id': PARSE_APP_ID,
            'X-Parse-REST-API-Key': PARSE_REST_KEY,
            'Content-Type': 'application/json'
        },
        body: JSON.stringify(data)
    })
    .then(processStatus)
    .then(parseJson)
    .catch(error);
};

module.exports = registerInstallation;

“processStatus”、“parseJson”和“error”只是一些处理 API 调用结果的小函数。如有必要,我可以提供更多详细信息。此函数允许我们通过“数据”对象添加大量信息,例如用户 ID、应用程序版本、解析版本等,就像您习惯从 iOS SDK 中一样。我们现在只有一个基本的示例,但在此基础上应该很容易扩展。这一步对我们来说非常重要,因为我们需要将每个安装与特定用户相关联。

您现在应该能够接收推送通知。您可以在充当侦听器的“receiveRemoteNotification”函数中处理它们。在react-native-remote-push组件的网站上提供了一个基本的功能。

我希望我能分享一些关于这个话题的见解。如果我应该更详细地了解某些部分,我很乐意添加更多信息。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

React-Native:推送通知+解析 的相关文章

  • 如何将 LC_LOAD_DYLIB 命令插入 Mach-O 二进制文件或将静态库加入现有二进制文件 (IOS)

    这是我第一次在 stackoverflow 上提问 我很绝望 我的任务是加载 dylib 或将静态库加入到 IOS 设备的现有可执行文件中 我将使用static void attribute constructor initialize v
  • NSCFData fastCharacterContents 崩溃? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我目前在控制台中收到此崩溃日志 20
  • AWS S3 公共对象与私有对象?

    回到 S3 我的存储桶中有图像的 URL 我将在我的应用程序中呈现这些图像 但它们被设置为私有 当我尝试单击该链接时 它显示 访问被拒绝 当我将链接的设置更改为公共时 它会通过 但是我读到公共访问并不是最安全的事情 所以这本质上是一个由两部
  • ios 导航 堆栈操作

    我在尝试从 iOS 应用程序操作导航堆栈时遇到问题 或者至少是由于这种操纵而产生的行为 我的情况 我有 3 个 ViewController 控制器a显示多个级别 控制器 b 是游戏视图 控制器 c 是某种分数 显然 我将在控制器 a 中选
  • iOS 上的 UIBezierPath 操作

    我从一条直线开始 我希望用户能够触摸并拖动该线 使其弯曲 实际上 他们有能力将线条操纵成波浪形状 我不确定从技术上实现这一目标的最简单方法 我首先创建了三次曲线的 UIBezierPaths 数组 目的是操纵控制点 但似乎一旦绘制了 UIB
  • ios7 navigationController PushViewController 动画错误

    看来我在 navigationController PushViewController 方法中发现了一个错误 为了重新创建它 我采用了示例主详细信息项目并对 didSelectRow method void tableView UITab
  • SwiftUI:状态栏颜色

    有没有办法将 SwiftUI 视图的状态栏更改为白色 我可能错过了一些简单的东西 但我似乎找不到在 SwiftUI 中将状态栏更改为白色的方法 到目前为止我只看到 statusBar hidden Bool 状态栏文本 色调 前景色可以通过
  • 从 iOS 应用程序内的 Junos Pulse 获取用户凭据

    我正在通过 Junos Pulse 在 iPad 中建立 VPN 连接 以进入我组织的 Intranet 谁能告诉我是否有任何 iOS api 或 SDK 可用于获取在 iOS 应用程序内的 Junos pulse 中输入的用户凭据 Jun
  • Objective-c 中的块递归

    当执行涉及 Objective C 块的递归时 我在 iOS 应用程序中收到 EXC BAD ACCESS 信号 这是简化的代码 void problematicMethod FriendInfo friendInfo onComplete
  • 为什么我不能在 Realm 属性上使用 private

    我正在尝试在 RealmSwift 中存储一个枚举案例 但 Realm 不支持枚举 本文 https medium com it works locally persisting swift enumerations with realm
  • iOS 滚动视图允许滚动过去的内容

    我正在努力优化我的应用程序以适应横向和较小的屏幕 我主要使用滚动视图来实现这一点 在我的其中一个视图中 我有一个容器视图 当我在故事板中的设备之间切换时 这个容器视图看起来很完美 容器视图映射到具有滚动视图的视图控制器 该滚动视图的顶部 底
  • iphone NSDate 转换问题

    在我的 facebook 图表 Api 中 我正在获取这些数据 来自杰森 updated time 2011 05 17T14 52 16 0000 我正在使用此代码将其转换为有效的日期格式 NSDateFormatter df NSDat
  • 架构armv7的重复符号

    尝试在我现有的应用程序中使用 Layar SDK 时出现以下错误 我该如何解决这个问题 Ld Users pnawale Library Developer Xcode DerivedData hub afxxzaqisdfliwbzxbi
  • 防止 AlertView 被解雇

    任何人都可以帮助我防止在其按钮单击事件上解雇警报视图吗 我有一个 textview 作为我的alertView 的子视图 如果 textview 值为 nil 我不想关闭它 因为这是一个非常老的问题 但我得到了一个解决方案 并且如果其他开发
  • iphone:如何停止快门动画?

    我有两个问题 1 我想知道如何在相机加载时停止快门动画 我正在使用 UIImagePickerController 我已经参考了堆栈溢出的许多答案 但没有成功 2 我在相机中有一个自定义按钮 使用cameraOverlayView并想通过单
  • 指定访问组时出现 KeychainItemWrapper 错误

    相当长一段时间以来 我一直在使用 KeychainItemWrapper 的 ARC 版本成功读取和写入私有钥匙串项目 我现在正在努力将我的 iOS 应用程序转换为使用共享访问组 以便我的 2 个共享相同应用程序前缀的应用程序可以访问钥匙串
  • 为什么我的视图仍然以横向呈现?

    我的视图是由导航控制器控制的 因此我将导航控制器支持的方向设置为明确的纵向和纵向UpSideDown 这可以工作 但是如果调用视图时前一个视图处于横向状态 它将以横向方式呈现并保持横向状态 直到设备旋转 如何防止这种情况发生 这是我的代码
  • 苹果企业程序分发问题[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 这个问题涉及到Apple iOS 开发者企业计划 http developer apple com programs ios enterprise 我
  • 避免 UIImage 的 imageNamed - 内存管理

    我正在经历这个链接 http akosma com 2009 01 28 10 iphone memory management tips 我遇到了一个点避免 UIImage 的 imageNamed 出于什么原因我们应该避免这种情况 它会
  • 分发内部业务 IOS 应用程序

    我遇到了 IOS 应用程序分发的一个令人困惑的部分 因此 我需要简单细分一下我的限制 即仅将我的应用程序分发给我的员工 同事或任何被视为 内部 的人 这是表明我不希望该应用程序出现在应用程序商店中的另一种方式 我的情况是我为几家公司开发 他

随机推荐