我遇到了一个非常奇怪的问题。我正在expo管理工作流程中使用react native开发一个expo应用程序,问题如下:
我想执行以下行:await Permissions.askAsync(Permissions.NOTIFICATIONS);
。在开发模式下完全没有问题,但是当我将其发布到商店时出现了一个错误,仅在iOS中。所以我在博览会上用“生产模式”进行了测试。
当用户第一次启动应用程序时,我想运行上述命令(在 iOS 中)。此行应打开一个对话框,请求用户允许推送通知。该行是异步的(应该是)。如果我运行以下代码:
console.log("1111")
await Permissions.askAsync(Permissions.NOTIFICATIONS);
console.log("2222")
它应该打印 1111,然后等待用户响应,然后打印 2222。错误是有时它不会这样做。它只是打印1111,然后打印2222,所以用户的响应没有被使用。我无法以任何方式获取它,因为 expo 不会等待 askAsync
返回值,它只是立即返回而无需用户实际响应。它只是继续前进到下一行并打印 2222。我试图找到错误。
我用 expo 打开了一个全新的应用程序,然后将上面的代码粘贴到我的新应用程序中。代码突然按预期工作了。所以我意识到我的代码有问题。我尝试将所有包从旧项目移动到新项目,仍然有效。然后我将 app.json
文件从旧项目移动到新项目,它不再起作用了。所以我知道问题出在 app.json
中。我隔离了问题,发现问题出在 app.json
文件中的 slug
上。当我更换子弹时,问题有时会发生,有时不会。例如,如果我将 slug
值放入 learnmath
中,就会发生问题,并且如果我将 slug
值更改为 client111
问题不会发生,上面的代码将按预期工作。
expo app.json 文件中的 slug 的作用是什么?我想不通!
蛞蝓是如何与这些联系起来的?
此问题仅发生在 iOS 中。
最佳答案
所以它在一个全新的应用程序上运行的原因是因为您之前没有向操作系统请求该权限。您不能在应用程序中多次请求相同的权限(这可能会让用户感到非常烦人)。
一旦用户授予权限,后续调用将返回“granted”,尽管它不会每次都提示用户。
至于 slug,它用于区分 Expo 客户端中的不同“应用程序”。因此,Expo 客户端应用程序已存储您已授予 learnmath 通知权限,因此当您将其更改为 client111 时,Expo 客户端会想:“哦,这一定是一个新项目,我们尚未获得许可”
关于react-native - 世博会名称的作用是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65544661/