ruby-on-rails SwiftUI iOS推送通知APN与Rails JSON后端集成

evrscar2  于 2023-08-08  发布在  Ruby
关注(0)|答案(1)|浏览(139)

我正在创建一个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\"}">
因此400BadDeviceToken
我不确定是前端提供了一个坏的令牌,还是后端不知何故损坏了它。
可能是我的topic错了?
可能是我提供的令牌不是来自前端的deviceToken字符串的正确十六进制格式?
我认为我的p8密钥和我的凭据和证书都被正确地处理了。
有什么建议吗?

siotufzp

siotufzp1#

好吧,我想明白了。我想也许我应该在这里发帖。
这个堆栈溢出的答案给了我一个想法:
What are the possible reasons to get APNs responses BadDeviceToken or Unregistered?
我意识到,也许我的Rails端试图在我应该进行开发的时候发送到“生产”服务器,至少目前是这样。我翻了翻那些催眠医生然后砰的一声:
我改了这一行:

Apnotic::Connection.new(

字符串

Apnotic::Connection.development(


我不喜欢API设计,但它解决了问题。

相关问题