Location extension Push Issue

I wanted to integrate location push extension to my app I followed the documentations and applied for the entitlement.

I followed these steps:

  1. I added com.apple.developer.location.push to my app entitlement as follows
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>aps-environment</key>
    <string>production</string>
    <key>com.apple.developer.location.push</key>
    <true/>
</dict>
</plist>
  1. I got the location push token and formatted it to string
  locationManager.startMonitoringLocationPushes(completion: { data, error in
        if let error = error { 
              print(error)
              return 
         }
        guard let data = data else { return }
        let token = data.reduce("", {$0 + String(format: "%02X", $1)})
        print(token)
})
  1. I exported the APNS push certificate after enabling additional capabilities from the app store connect and keychain. then converted to pem format

openssl x509 -in aps_development.cer -inform der -out PushCert.pem openssl pkcs12 -nocerts -out PushChatKey.pem -in PushChatKey.p12

  1. Tried to send push using command line
TOPIC="com.myapp.location-query"
CERTIFICATE_FILE_NAME="./test.p12:1234"
CERTIFICATE_KEY_FILE_NAME="./new2k.pem"
APNS_HOST_NAME="api.sandbox.push.apple.com"
DEVICE_TOKEN="FE979AB7DAC975DD19E2F977EDB9BCD13C870AFD97D8D20955039666AA5DXXXX"

 curl -v \
  -d '{}' \
  --header "apns-topic: $TOPIC" \
  --header "apns-push-type: location" \
  --http2 \
  --cert $CERTIFICATE_FILE_NAME \
  --cert-type P12 \
  --http2  https://$APNS_HOST_NAME/3/device/$DEVICE_TOKEN

and the response is

*   Trying 17.188.138.70:443...
* Connected to api.sandbox.push.apple.com (17.188.138.70) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
*  CAfile: /etc/ssl/cert.pem
*  CApath: none
* TLSv1.2 (OUT), TLS handshake, Client hello (1):
* TLSv1.2 (IN), TLS handshake, Server hello (2):
* TLSv1.2 (IN), TLS handshake, Certificate (11):
* TLSv1.2 (IN), TLS handshake, Server key exchange (12):
* TLSv1.2 (IN), TLS handshake, Request CERT (13):
* TLSv1.2 (IN), TLS handshake, Server finished (14):
* TLSv1.2 (OUT), TLS handshake, Certificate (11):
* TLSv1.2 (OUT), TLS handshake, Client key exchange (16):
* TLSv1.2 (OUT), TLS handshake, CERT verify (15):
* TLSv1.2 (OUT), TLS change cipher, Change cipher spec (1):
* TLSv1.2 (OUT), TLS handshake, Finished (20):
* TLSv1.2 (IN), TLS change cipher, Change cipher spec (1):
* TLSv1.2 (IN), TLS handshake, Finished (20):
* SSL connection using TLSv1.2 / ECDHE-RSA-AES256-GCM-SHA384
* ALPN, server accepted to use h2
* Server certificate:
*  subject: CN=api.development.push.apple.com; OU=management:idms.group.533599; O=Apple Inc.; ST=California; C=US
*  start date: Dec 10 00:29:46 2021 GMT
*  expire date: Jan  9 00:29:45 2023 GMT
*  subjectAltName: host "api.sandbox.push.apple.com" matched cert's "api.sandbox.push.apple.com"
*  issuer: CN=Apple Public Server RSA CA 12 - G1; O=Apple Inc.; ST=California; C=US
*  SSL certificate verify ok.
* Using HTTP2, server supports multi-use
* Connection state changed (HTTP/2 confirmed)
* Copying HTTP/2 data in stream buffer to connection buffer after upgrade: len=0
* Using Stream ID: 1 (easy handle 0x11c80ce00)
> POST /3/device/FE979AB7DAC975DD19E2F977EDB9BCD13C870AFD97D8D20955039666AA5DXXXX HTTP/2
> Host: api.sandbox.push.apple.com
> user-agent: curl/7.77.0
> accept: */*
> apns-topic: com.myapp.location-query
> apns-push-type: location
> content-length: 2
> content-type: application/x-www-form-urlencoded
>
* Connection state changed (MAX_CONCURRENT_STREAMS == 1000)!
* We are completely uploaded and fine
< HTTP/2 400
< apns-id: CA7EC88D-E839-318B-D9DC-DCB533F50808
<
* Connection #0 to host api.sandbox.push.apple.com left intact
{"reason":"TopicDisallowed"}%

But I always get TopicDisallowed response

Did I miss something?

Post not yet marked as solved Up vote post of alihilal Down vote post of alihilal
53 views

Replies

TOPIC="com.myapp.location-query"

You are sending a location query to an app with a bundle id "com.myapp"

Unless that is indeed your app's bundle id, you will not be able to send any pushes to it.

  • yes, my app bundle id is like this com.xxxxx I added .location-query suffix to it I am I missing something here or what is the possible reasons to get this error?

Add a Comment

yes, my app bundle id is like this com.xxxxx I added .location-query suffix to it I am I missing something here or what is the possible reasons to get this error?