我正在创建一个iOS应用程序,它使用swiftUI,但它通过HTTP请求JSON与Rails后端通信。我希望能够发送从后端的前端用户推送通知。
我在前端收集这个deviceToken如下:
class AppDelegate: NSObject, UIApplicationDelegate {
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
let deviceTokenString = deviceToken.map { String(format: "%02x", $0) }.joined()
print("deviceToken", deviceTokenString)
}
}
字符串
这给了我一个deviceTokenString,看起来像:
第一个月
我从this blog post得到了这个,它引用了这个stack-overflow question。
然后,我把这个标记带到我的Rails代码中,它看起来像这样(我试图使用Apnotic,但也许我应该使用其他东西)
module PushNotifier
class << self
def push(token)
notification = Apnotic::Notification.new(token)
notification.alert = 'Test notification from rails'
notification.topic = 'me.MyApp'
response = connection.push(notification)
puts response
end
def connection
Apnotic::Connection.new(
auth_method: :token,
cert_path: "config/keys/AuthKey.p8",
key_id: Rails.application.credentials.apple.p8_key_id,
team_id: Rails.application.credentials.apple.team_id
)
end
end
end
型
但我得到了这个#<Apnotic::Response:0x00000001069e1018 @headers={":status"=>"400", "apns-id"=>"272ebadf-9b2f-47f6-8ae0-5746422e7213"}, @body="{\"reason\":\"BadDeviceToken\"}">
个
因此400
与BadDeviceToken
我不确定是前端提供了一个坏的令牌,还是后端不知何故损坏了它。
可能是我的topic
错了?
可能是我提供的令牌不是来自前端的deviceToken
字符串的正确十六进制格式?
我认为我的p8密钥和我的凭据和证书都被正确地处理了。
有什么建议吗?
1条答案
按热度按时间siotufzp1#
好吧,我想明白了。我想也许我应该在这里发帖。
这个堆栈溢出的答案给了我一个想法:
What are the possible reasons to get APNs responses BadDeviceToken or Unregistered?
我意识到,也许我的Rails端试图在我应该进行开发的时候发送到“生产”服务器,至少目前是这样。我翻了翻那些催眠医生然后砰的一声:
我改了这一行:
字符串
至
型
我不喜欢API设计,但它解决了问题。