I am creating an iOS app that uses swiftUI for the app but it talks to a Rails Backend via HTTP requests to JSON. I would like to be able to send push notifications from the backend to users of the frontend.
I gather this deviceToken on the frontend like so:
class AppDelegate: NSObject, UIApplicationDelegate {
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
let deviceTokenString = deviceToken.map { String(format: "%02x", $0) }.joined()
print("deviceToken", deviceTokenString)
}
}
Which gives me a deviceTokenString that looks something like:
token = "9cfa2410a3f8326529db2e6e34dbcd3cc6664c7ee3675a08a34bd42429892068"
I got this from this blog post which references this stack-overflow question.
I then take that token over to my Rails code which looks like this (I'm trying to use Apnotic but maybe I should be using something else)
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
but I am getting this:
#<Apnotic::Response:0x00000001069e1018 @headers={":status"=>"400", "apns-id"=>"272ebadf-9b2f-47f6-8ae0-5746422e7213"}, @body="{\"reason\":\"BadDeviceToken\"}">
so a 400
with BadDeviceToken
I'm not sure if the frontend is providing a bad token or somehow the backend is mangling it.
It could be that my topic
is wrong?
Could it be that the token I am providing is not in the correct hex format of the deviceToken
string from the frontend?
I think my p8 key and my credentials and certificates are all handled correctly.
Any advice about what could be going on?