小编Mr.*_*bot的帖子

收到仅数据的Firebase云消息后,将Android React Native App带到前台

我已成功将Firebase Cloud Messaging与react-native-firebase一起用于在Android设备之间发送和接收仅数据消息。

当设备收到消息时,如果该应用程序在后台或已被杀死,我想将该应用程序置于前台。我收到的通知console.log()在两种情况下都会显示,但是我在弄清楚如何最好地“唤醒”应用程序/将其置于前台时遇到了麻烦:

  firebase.messaging().onMessage((message) => {
    // Process your message as required
    console.log('You got a message!', message);
  });
}
Run Code Online (Sandbox Code Playgroud)

在两种情况下,上述代码均按预期执行。

有没有我可以查看的React Native软件包来帮助实现我想做的事情,还是应该考虑写一些代码Java

提前致谢。

更新资料

我正在尝试实现这样的目标,但不确定是否可以将这样的代码直接添加到我的React Native应用程序中?

更新2

我发现了这个使用HeadlessJS的包react-native-invoke-app

HeadlessJS要求您在以下代码中使用此代码index.js

AppRegistry.registerHeadlessTask('SomeTaskName', () => require('SomeTaskName'));

但是Firebase Cloud Messaging已经需要您在同一位置提供这一行代码,我想它的作用与以上相同:

AppRegistry.registerHeadlessTask('RNFirebaseBackgroundMessage', () => backgroundMessaging);

react-native-invoke-app文档之后,我然后将调用放置在firebase.messaging().onMessage((message))回调中调用我的应用程序,如下所示:

firebase.messaging().onMessage((message) => {
    // Process your message as required
    invokeApp();
    console.log('You got message!', message);
  });
}
Run Code Online (Sandbox Code Playgroud)

但是,这并没有使我的应用程序成为前台。 …

react-native react-native-android firebase-cloud-messaging react-native-firebase

5
推荐指数
1
解决办法
141
查看次数

使用 setShowWhenLocked(true) 解锁后如何锁定 Android 设备;

我正在创建一个视频通话应用程序并具有以下代码,当应用程序收到推送通知时调用该代码 - 它解锁屏幕并显示“来电”用户界面:

public class MainActivity extends ReactActivity {

  @Override
  protected String getMainComponentName() {
    return "x";
  }

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1) {
      setShowWhenLocked(true);
      setTurnScreenOn(true);
    }
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN | WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
        | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
        | WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);
  }
}
Run Code Online (Sandbox Code Playgroud)

这在来电时工作正常 - 用户可以使用呈现的 UI 与应用程序交互。然而,问题是,如果应用程序在前台,然后手机被锁定,当按下手机侧面的解锁按钮时,会显示应用程序,而不是显示键盘锁/锁屏。如果应用程序在前台并且手机已锁定并按下解锁按钮,则它永久允许访问该应用程序。

我希望应用程序在它收到推送通知并且屏幕被锁定时出现,但我也希望用户能够完全锁定设备并且在按下锁定按钮后不让用户访问该应用程序。

我怎样才能做到这一点?

java android react-native

5
推荐指数
1
解决办法
692
查看次数

如何使用 Firebase 刷新令牌保持用户身份验证?

我正在构建一个 React Native 应用程序,它使用 Firebase 电话身份验证进行用户登录。身份验证工作正常,但令牌在一小时后过期。我读过我需要使用刷新令牌来刷新idToken,但 Firebase文档中没有任何地方解释如何执行此操作。它只解释了如何撤销刷新令牌,我什至找不到它。

我正在使用react-native-firebase包。

我的问题是:如何获取刷新令牌,如何使用它,我是否真的需要每小时调用一次 Firebase 来更新我的idToken?

我目前得到我idToken这样的:

const authenticate = async (credential) => {
  try {
    const { user } = await firebase.auth().signInWithCredential(credential);
    const accessToken = await user.getIdToken();
    return accessToken;
  } catch (error) {
    console.log(error);
  }
}
Run Code Online (Sandbox Code Playgroud)

然后我使用令牌并将其存储在本地,AsyncStorage并在每次启动应用程序时检查令牌是否存在。

提前致谢。

javascript firebase react-native firebase-authentication react-native-firebase

4
推荐指数
1
解决办法
3676
查看次数

无法在 IntelliJ 中键入单括号或圆括号

我有这个代码:

    (defn ^:dev/after-load mount-root []
      (re-frame/clear-subscription-cache!)
      (reagent/render [views/main-panel]
                      (.getElementById js/document "app")))
Run Code Online (Sandbox Code Playgroud)

在 IntelliJ 中,我想复制第三行,然后更改它。复制有效,但代码无法编译,因为我需要在代码块的末尾添加一个额外的单右括号:

    (defn ^:dev/after-load mount-root []
      (re-frame/clear-subscription-cache!)
      (reagent/render [views/main-panel]
      (reagent/render [views/second-panel] ;; duplicated line
                      (.getElementById js/document "app"))) ;; now missing closing parentheses
Run Code Online (Sandbox Code Playgroud)

在 IntelliJ 中,您无法在代码中添加单括号或圆括号,那么我如何复制该行并更新代码,以便它不会引发 linting 错误/编译?

clojure intellij-idea

4
推荐指数
1
解决办法
1381
查看次数

具有可调整大小的列和拖放列的 Ant Design Table 示例?

我正在尝试在Ant Design 的 Table 组件中实现可调整大小和拖放列。

我已经让它们独立工作,但不能让它们同时工作而没有错误或错误。我需要能够拖动列边框并水平调整其大小,并且还能够单击列标题并将其拖放。

我正在寻找与此表的功能类似的这些功能: https: //www.ag-grid.com/example.php

我尝试使用react-resizing来实现它以调整大小的列,并使用react-sortable-hocreact-drag-listview来实现拖放列顺序。

使用react-drag-listview,最新的问题是我必须在使用一项功能时禁用另一项功能,在 Firefox 中,这会导致错误:

未捕获的类型错误:target.parentNode

我找不到这两个功能与 Ant D 表一起使用的任何示例,但我确信一定可以使它们同时工作。

TIA

reactjs antd

4
推荐指数
1
解决办法
8905
查看次数

错误:JAVA_HOME 设置为无效目录:/usr/libexec/java_home (Mac OSX)

当我运行时,react-native run-android我收到错误ERROR: JAVA_HOME is set to an invalid directory: /usr/libexec/java_home

我将 Java 主路径添加到我的 bash 配置文件中,如下所示:

export JAVA_HOME=$(/usr/libexec/java_home)

当我粘贴此内容并在终端中按 Enter 时:

/usr/libexec/java_home,

我明白了:

/Library/Java/JavaVirtualMachines/jdk-12.0.1.jdk/Contents/Home

但是当我运行时react-native run-android,我仍然收到错误。

这让我非常生气,而且我不知道如何解决它。

任何想法都非常感激。

java-home react-native

3
推荐指数
1
解决办法
8220
查看次数

Clojure 对函数向量的迭代

我正在读一本关于 Clojure 的书,上面写着:

您可以使用映射做的另一件有趣的事情是向它传递函数集合。如果您想对不同的数字集合执行一组计算,则可以使用它,如下所示:

(def sum #(reduce + %))
(def avg #(/ (sum %) (count %)))
(defn stats
  [numbers]
  (map #(% numbers) [sum count avg]))

(stats [3 4 10])
; => (17 3 17/3)

(stats [80 1 44 13 6])
; => (144 5 144/5)
Run Code Online (Sandbox Code Playgroud)

在此示例中,stats 函数迭代函数向量,将每个函数应用于数字。

我觉得这很令人困惑,本书没有给出更多解释。

我知道%代表匿名函数中的参数,但我无法弄清楚它们在这个示例中代表什么值。是什么%

还有如何stats迭代countifcount嵌套在其中avg

clojure

1
推荐指数
1
解决办法
745
查看次数

启动连接到 lein 项目模板的 cljs nREPL

我使用以下命令创建了一个 ClojureScript 项目:

lein new re-frame my-project

然后我使用 Cursive 在 IntelliJ 中打开它。在终端中输入 后lein dev,它会提示我以下消息:

shadow-cljs - HTTP server available at http://localhost:8280
shadow-cljs - server version: 2.8.52 running at http://localhost:9630
shadow-cljs - nREPL server started on port 8777
shadow-cljs - watching build :app
[:app] Configuring build.
[:app] Compiling ...
[:app] Build completed. (203 files, 1 compiled, 0 warnings, 3.65s)
Run Code Online (Sandbox Code Playgroud)

我可以使用将我定向到 REPL 的链接打开服务器,但不能打开连接到浏览器的 nREPL。按照他们的文档,我输入shadow-cljs clj-repl到另一个终端,该终端打开一个 REPL,但没有连接到我的浏览器或项目。如果我输入(js/alert "hi m8")REPL,它会响应:

Syntax error compiling at (REPL:2:1).
No …
Run Code Online (Sandbox Code Playgroud)

clojure clojurescript cursive shadow-cljs

1
推荐指数
1
解决办法
685
查看次数

在试剂中动态渲染组件的正确方法是什么?

在 React 中动态渲染组件是其使用的基础。这很容易做到,如下所示:

  render() {
    return (
      <div className="blocks_loop">
        {this.props.blocks.map(block => (
          <div className="block" />
        ))}
      </div>
    )
  }
Run Code Online (Sandbox Code Playgroud)

在此示例中,您将获得尽可能多的 div blocks。我试图用试剂来实现同样的目的,我在这篇文章中记录了其中的一部分。有例子出来的人做喜欢有这样一个,但他们似乎都包括的使用lists,我不希望使用-它只是不适合我的目的。我只想要和我放入的物品一样多的组件。

更新

我现在有这段代码试图遵循下面的答案,这意味着为my-map. 没有呈现任何内容并引发错误react-dom.development.js:507 Warning: Functions are not valid as a React child.

(ns mapping-test.views
  (:require
   [re-frame.core :as re-frame]
   [mapping-test.subs :as subs]))

(defn main-panel []

  (def my-map {:a 1 :b 2 :c 3})

  (defn a-component []
    [:h1 "This is a component rendering"])

  (defn my-loop [my-map]
    (for [value my-map] …
Run Code Online (Sandbox Code Playgroud)

clojure clojurescript reagent

1
推荐指数
1
解决办法
845
查看次数

对象可能是“未定义”。ts(2532)

即使我已将其包装在未定义的检查中,我仍收到此 TypeScript 错误。我似乎无法摆脱它。message.payload第二行代码下面有红线。

(property) Message.payload?: Payload | undefined Object is possibly 'undefined'.ts(2532)

if (message && message.payload && message.payload.data) {
  setDependentPayloads((prev) => `${prev} ${(message.payload.data)}`);
}
Run Code Online (Sandbox Code Playgroud)

更新

这是编辑器中的错误:

在此输入图像描述

typescript reactjs

1
推荐指数
1
解决办法
1625
查看次数