我正在尝试从我的应用程序接收推送通知 token ,但我从未收到 token 。我尝试使用一些警报进行调试,我可以看到在接受通知时我得到了“granted”返回。我只测试过 iOS。
我在运行
"expo": "^32.0.0",
"react-native": "https://github.com/expo/react-native/archive/sdk-32.0.0.tar.gz",
我尝试使用来自 https://docs.expo.io/versions/latest/guides/push-notifications/ 的指南
因为它不起作用,我尝试了他们从 API 引用中提供的小吃:https://docs.expo.io/versions/v32.0.0/sdk/notifications/
小吃:https://snack.expo.io/@documentation/pushnotifications
这是我当前的代码:
static registerForPushNotificationsAsync = async kid => {
if (Constants.isDevice) {
const { status: existingStatus } = await Permissions.getAsync(
Permissions.NOTIFICATIONS
);
let finalStatus = existingStatus;
if (existingStatus !== "granted") {
const { status } = await Permissions.askAsync(
Permissions.NOTIFICATIONS
);
finalStatus = status;
}
if (finalStatus !== "granted") {
alert("Failed to get push token for push notification!");
return;
}
let token = await Notifications.getExpoPushTokenAsync();
alert("finalstatus " + finalStatus);
alert("existing status " + existingStatus);
alert(token);
// POST the token to your backend server from where you can retrieve it to send push notifications.
return await fetch(`${Api.APIEndpoint}/app/notification`, {
method: "POST",
headers: {
Accept: "application/json",
"Content-Type": "application/json"
},
body: JSON.stringify({
token: token,
kid: kid
})
});
} else {
alert("Must use physical device for Push Notifications");
}
};
前两个警报按预期触发(并在我接受时返回“granted”),但 alert(token) 似乎是空的。
我还注意到有人要求我提供两个权限。首先它会请求使用通知的权限,然后它会请求访问照片。我不需要照片的权限,我很好奇为什么会这样要求。
据我阅读文档的理解,只有 Android 设备才需要 FCM?我也需要它在 Android 上工作,但我想先让它在一个平台上工作,然后再继续。
我使用 Testflight 在我的 iPhone 上安装了该应用程序。 token 是否仅在应用获得应用商店批准后“出现”?
也许我在文档中遗漏了其他内容。
任何帮助或指出正确的方向将不胜感激。
最佳答案
我终于明白了!
将解决方案留在这里,以防其他人遇到同样的问题。
显然我有一个旧版本的 expo-cli,尽管我尝试使用 npm install -g expo-cli 多次更新它。该命令似乎运行良好,但 expo-cli 仍然是相同的版本。
我尝试使用 npm 卸载,但似乎没有效果。 expo-cli 仍然可用。我想可能是因为我在开始使用 nvm 之前安装了它。
然后我决定手动删除它。我在 mac 上运行,不知道是否有更正确的卸载方法。但这似乎有效!我删除了/usr/bin/expo 和/usr/bin/expo-cli。然后我运行了 npm install -g expo-cli
然后我更新了应用程序的推送证书:
expo build:ios --clear-push-cert
我在我的测试设备上使用 testflight 安装了该应用程序,现在我确实得到了预期的 token !
唯一我仍然好奇的是为什么它要求获得访问照片的权限。
我希望这可以帮助其他遇到同样问题的人。
感谢那些花时间阅读我的问题的人。
关于iOS - Expo Notifications.getExpoPushTokenAsync() 未获取 token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55187642/
似乎无法为此找到有效的答案。我正在阅读Rails教程的第10章第10.1.2节,但似乎无法使邮件程序预览正常工作。我发现处理错误的所有答案都与教程的不同部分相关,我假设我犯的错误正盯着我的脸。我已经完成并将教程中的代码复制/粘贴到相关文件中,但到目前为止,我还看不出我输入的内容与教程中的内容有什么区别。到目前为止,建议是在函数定义中添加或删除参数user,但这并没有解决问题。触发错误的url是http://localhost:3000/rails/mailers/user_mailer/account_activation.http://localhost:3000/rails/mai
有没有办法在这个简单的get方法中添加超时选项?我正在使用法拉第3.3。Faraday.get(url)四处寻找,我只能先发起连接后应用超时选项,然后应用超时选项。或者有什么简单的方法?这就是我现在正在做的:conn=Faraday.newresponse=conn.getdo|req|req.urlurlreq.options.timeout=2#2secondsend 最佳答案 试试这个:conn=Faraday.newdo|conn|conn.options.timeout=20endresponse=conn.get(url
这里有一个很好的答案解释了如何在Ruby中下载文件而不将其加载到内存中:https://stackoverflow.com/a/29743394/4852737require'open-uri'download=open('http://example.com/image.png')IO.copy_stream(download,'~/image.png')我如何验证下载文件的IO.copy_stream调用是否真的成功——这意味着下载的文件与我打算下载的文件完全相同,而不是下载一半的损坏文件?documentation说IO.copy_stream返回它复制的字节数,但是当我还没有下
我有一个存储主机名的Ruby数组server_names。如果我打印出来,它看起来像这样:["hostname.abc.com","hostname2.abc.com","hostname3.abc.com"]相当标准。我想要做的是获取这些服务器的IP(可能将它们存储在另一个变量中)。看起来IPSocket类可以做到这一点,但我不确定如何使用IPSocket类遍历它。如果它只是尝试像这样打印出IP:server_names.eachdo|name|IPSocket::getaddress(name)pnameend它提示我没有提供服务器名称。这是语法问题还是我没有正确使用类?输出:ge
我想获取模块中定义的所有常量的值:moduleLettersA='apple'.freezeB='boy'.freezeendconstants给了我常量的名字:Letters.constants(false)#=>[:A,:B]如何获取它们的值的数组,即["apple","boy"]? 最佳答案 为了做到这一点,请使用mapLetters.constants(false).map&Letters.method(:const_get)这将返回["a","b"]第二种方式:Letters.constants(false).map{|c
我安装了ruby版本管理器,并将RVM安装的ruby实现设置为默认值,这样'哪个ruby'显示'~/.rvm/ruby-1.8.6-p383/bin/ruby'但是当我在emacs中打开inf-ruby缓冲区时,它使用安装在/usr/bin中的ruby。有没有办法让emacs像shell一样尊重ruby的路径?谢谢! 最佳答案 我创建了一个emacs扩展来将rvm集成到emacs中。如果您有兴趣,可以在这里获取:http://github.com/senny/rvm.el
我正在尝试解析一个文本文件,该文件每行包含可变数量的单词和数字,如下所示:foo4.500bar3.001.33foobar如何读取由空格而不是换行符分隔的文件?有什么方法可以设置File("file.txt").foreach方法以使用空格而不是换行符作为分隔符? 最佳答案 接受的答案将slurp文件,这可能是大文本文件的问题。更好的解决方案是IO.foreach.它是惯用的,将按字符流式传输文件:File.foreach(filename,""){|string|putsstring}包含“thisisanexample”结果的
假设我有这个范围:("aaaaa".."zzzzz")如何在不事先/每次生成整个项目的情况下从范围中获取第N个项目? 最佳答案 一种快速简便的方法:("aaaaa".."zzzzz").first(42).last#==>"aaabp"如果出于某种原因你不得不一遍又一遍地这样做,或者如果你需要避免为前N个元素构建中间数组,你可以这样写:moduleEnumerabledefskip(n)returnto_enum:skip,nunlessblock_given?each_with_indexdo|item,index|yieldit
rails中是否有任何规定允许站点的所有AJAXPOST请求在没有authenticity_token的情况下通过?我有一个调用Controller方法的JqueryPOSTajax调用,但我没有在其中放置任何真实性代码,但调用成功。我的ApplicationController确实有'request_forgery_protection'并且我已经改变了config.action_controller.consider_all_requests_local在我的environments/development.rb中为false我还搜索了我的代码以确保我没有重载ajaxSend来发送
我目前正在使用以下方法获取页面的源代码:Net::HTTP.get(URI.parse(page.url))我还想获取HTTP状态,而无需发出第二个请求。有没有办法用另一种方法做到这一点?我一直在查看文档,但似乎找不到我要找的东西。 最佳答案 在我看来,除非您需要一些真正的低级访问或控制,否则最好使用Ruby的内置Open::URI模块:require'open-uri'io=open('http://www.example.org/')#=>#body=io.read[0,50]#=>"["200","OK"]io.base_ur