如何使用 expo 通过 React Native 收听 Mercure 服务器?

问题描述

由于 API 平台,我目前有一个使用 React Native 制作的移动应用程序以及一个使用 Symfony 制作的 API。

这两个应用程序相互通信良好。

为了在应用上创建通知系统,我添加并配置了 Mercure 服务器。

但是,自添加 Mercure 以来,API 和应用之间似乎存在通信问题。

我想澄清一下,我通过 reactjs 中的 Web 项目测试了完全相同的配置,并且没有问题。

因此,我怀疑 Mercure 和应用程序之间存在访问问题。 (我使用 expo 在本地测试我的应用程序)

这是我的 symfony .env 文件

MERCURE_URL=http://127.0.0.1:3000/.well-kNown/mercure
MERCURE_PUBLIC_URL=http://127.0.0.1:3000/.well-kNown/mercure
MERCURE_PUBLISH_URL=http://127.0.0.1:3000/.well-kNown/mercure
MERCURE_JWT_SECRET=mykeyp
MERCURE_PUBLISHER_JWT_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJtZXJjdXJlIjp7InB1Ymxpc2giOlsiKiJdfX0.Gvmkhs_Nx9S7yNyNs_TUghfcruiNrNKQBA0D36cGQSA
MERCURE_SUBSCRIBER_JWT_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJtZXJjdXJlIjp7InB1Ymxpc2giOlsiKiJdfX0.Mzezd1YtkgCmlEDQg4qwNCFql1JXCXk1Vg-tB8UHgSk

这是用于启动 Mercure 服务器的命令

SERVER_NAME=:3000 MERCURE_PUBLISHER_JWT_KEY="mykeyp" MERCURE_SUBSCRIBER_JWT_KEY="mykeys" ./mercure/mercure run -config mercure/Caddyfile.dev CORS_ALLOWED_ORIGINS=https://localhost:8000

我正在使用 ngrok 通过我的移动应用联系我的 API。我还尝试在端口 3000 上运行 ngrok 以通过该应用程序联系 Mercure,但仍然出现此错误:401 UnAuthorized。

这是我的js代码

const uri = encodeURIComponent(`${api_address}/api/users/3`);
        const eventSource = new RNEventSource(`${mercure_address}/.well-kNown/mercure?topic=${uri}`);
        eventSource.addEventListener('message',(event) => {
            let data = JSON.parse(event.data);
            console.log(data)
        }
)

我还指定在端口 8000 上启动 Symfony,在端口 3000 上启动 Mercure。

提前致谢

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)