Apple returns TopicDisallowed (HTTP 400, "Pushing to this topic is not allowed") when the topic — i.e. your app's bundle ID — is not one that the credential Pushwoosh is using is allowed to push to. It is an identity problem, not an environment problem.
What to check, in order
- Bundle ID mismatch. The Bundle ID saved in your Pushwoosh iOS platform configuration must exactly match the bundle identifier of the build you are testing (case-sensitive, no trailing whitespace, and not the extension's or a sibling target's ID).
- The credential does not cover that bundle ID. An APNs authentication key (.p8) works for every app under its Team ID — but only if the correct Team ID is entered in Pushwoosh. A legacy .p12 certificate is issued for one specific App ID, so a certificate from a different app will always produce
TopicDisallowed. Re-upload the credential that belongs to this app. - Wrong Pushwoosh application. Confirm you are sending from the Pushwoosh project whose iOS configuration matches the app on the device — sending to a device registered under a different application code produces the same error.
- Push Notifications capability. Make sure the App ID in the Apple Developer portal has the Push Notifications capability enabled and that the provisioning profile was regenerated after enabling it.
Not the same as a gateway mismatch
If your app build and the Pushwoosh Gateway setting (Sandbox vs Production) disagree, Apple returns BadDeviceToken — "the token matches the environment" — or BadCertificateEnvironment (403) for certificate-based setups, and tokens tend to disappear from the device record. Fix that separately:
- Sandbox — builds run from Xcode with a development provisioning profile.
- Production — TestFlight, Ad Hoc, Enterprise and App Store builds.
Set the gateway in your Pushwoosh iOS platform configuration (you may need to click Edit or Reconfigure) so it matches how the build is signed.
Comments
0 comments
Please sign in to leave a comment.