Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

'No APNS token specified' error getting token on iOS #221

Open
ebiscardi opened this issue Jun 27, 2023 · 21 comments
Open

'No APNS token specified' error getting token on iOS #221

ebiscardi opened this issue Jun 27, 2023 · 21 comments

Comments

@ebiscardi
Copy link

ebiscardi commented Jun 27, 2023

I have an issue using this plugin on iOS. I receive this error when trying to get Firebase token:

No APNS token specified before fetching FCM Token

I put GoogleService-Info.plist and app.entitlements in app/App_Resources/iOS as described in the documentation
I tried both with xcode 14.3.1 and 15.0-beta

these are the dependencies in package.json:

@nativescript/ios: 8.5.2
@nativescript/types: 8.5.0
@nativescript/core: 8.5.5
@nativescript/firebase-core: 3.1.0
@nativescript/firebase-messaging: 3.1.0

And this is the function called when the application is started:

async function firebaseInitialization() {
    console.log("firebaseInitialization: start firebase registering");
    const defaultApp = await firebase().initializeApp();
    console.log("firebase initialized");
    console.log("request for permission");
    const enabled = await requestUserPermission()
    try {
        if (enabled) {
            firebase().messaging().showNotificationsWhenInForeground = true         
            console.log("trying to get current token")
            const token = await firebase().messaging().getToken()
            console.log("current token: " + token)
            //rest of the code
            ...
        }
    } catch (e) {
        console.log("ERROR: " + e) //<-- the error is catched here
    }
}


async function requestUserPermission() {
    const authStatus = await firebase()
        .messaging()
        .requestPermission({
            ios: {
                alert: true,
            },
        });
    const enabled = authStatus === AuthorizationStatus.AUTHORIZED || authStatus === AuthorizationStatus.PROVISIONAL;
    if (enabled) {
        console.log('Push notification authorized')
        const didRegister = await firebase().messaging()
                .registerDeviceForRemoteMessages();
        return true
    } else {
        console.log('Push notification NOT authorized')
        return false
    }
}

This is the console output:

firbaseInitialization: start firebase registering
firebase initialized
request for permission
Push notification authorized
trying to get current token
ERROR: Error: No APNS token specified before fetching FCM Token

I seem to have done everything that is requested in the documentation. Any idea?

EDIT:
I tried to wrap the registerDeviceForRemoteMessages call in a try-catch statement. No exception is thrown, but after that, the registration status, checked with firebase().messaging().isDeviceRegisteredForRemoteMessages, is false

@manijak
Copy link

manijak commented Jul 25, 2023

Interesting. Having similar issue with FCM Messaging on iOS as well.

My entitlements file contains the correct aps entitlement:

<key>aps-environment</key>
<string>development</string>
await firebase().messaging().registerDeviceForRemoteMessages()
            .then((resolved) => {
                console.log("FCM Register Device Result: ", resolved);
               },(error) => {
                    console.warn("FCM Register Device ERROR: ", error);
                });

Keep getting error on the registerDeviceFroRemoteMessages call.
Error in application:didFailToRegisterForRemoteNotificationsWithError: no valid “aps-environment” entitlement string found for application

After taking a look at the .entitlements file under platforms/ios, the aps entitlement is now missing. So it seems that our custom entitlements are not being merged.

@wschroers
Copy link

What is the name of the entitlements file located at "App_Resources\iOS"? Make sure it is "app.entitlements".
I'm not sure but I think this might have changed were it used to be "the-name-of-the-app.entitlements" instead of just "app.entitlements".

@manijak
Copy link

manijak commented Jul 26, 2023

Correct. I had to rename it to app.entitlements 👍 now its merging during build and the device is being registered with fcm.

@kefahB
Copy link
Contributor

kefahB commented Jul 27, 2023

Getting same error when updating the plugin to the latest .. I had already app.entitilments !

@kefahB
Copy link
Contributor

kefahB commented Jul 27, 2023

Try to accept the licence agreement changes .. make a fresh install .. that worked for me

@kefahB
Copy link
Contributor

kefahB commented Aug 1, 2023

it seems that you need to add this to you Info.plist :

<key>FirebaseAppDelegateProxyEnabled</key>
    <false/>

@dlcole
Copy link
Contributor

dlcole commented Aug 10, 2023

I'm migrating my project to use the new firebase plugins and am receiving this same error message. I've included all the items listed above. This was working with the older plugin, so I have the APNS key defined in the firebase console. The specific error message is

Error: The operation couldn’t be completed. No APNS token specified before fetching FCM Token

@kefahB
Copy link
Contributor

kefahB commented Aug 10, 2023

@dlcole ns clean && ns run ?? for me it was FirebaseAppDelegateProxyEnabled that fixed the issue

@dlcole
Copy link
Contributor

dlcole commented Aug 10, 2023

@kefahB I tried that and noticed this error:

error: Provisioning profile "iOS Team Provisioning Profile: tech.govia.rrr" doesn't include the UIBackgroundModes entitlement. (in target 'rrr' from project 'rrr')

I'll generate a new provisioning profile and see if that does the trick.

@kefahB
Copy link
Contributor

kefahB commented Aug 10, 2023

@dlcole this is another issue now, you should generate a new provision profile with the UIBackgroubdModes then install it

@dlcole
Copy link
Contributor

dlcole commented Aug 11, 2023

@kefahB Well, still no luck. I edited my ID to check the capabilities. I have Associated Domains and Push Notifications checked. I didn't see anything else pertinent.

While chasing this issue I had earlier added these lines to my app.entitlesments file:

  <key>UIBackgroundModes</key>
  <array>
    <string>remote-notification</string>
  </array>

I commented-out these lines, cleaned and ran, and still received the same APNS error message. Any suggestions for next steps?

@kefahB
Copy link
Contributor

kefahB commented Aug 11, 2023

It is a known issue on Xcode, open your project with Xcode and toggle 2 times Automatic configuration and build even if Xcode show an error msg about the profile

@dlcole
Copy link
Contributor

dlcole commented Aug 11, 2023

@kefahB - OK, I'm game, just trying to understand what you're suggesting. I don't see "Automatic configuration" as an option anywhere. I did toggle "Background processing" several times, built, and ran on an iOS emulator from Xcode and received the same APNS error. I'm running Xcode 14.3.

@dlcole
Copy link
Contributor

dlcole commented Aug 14, 2023

Upon further testing I have found that adding

    <key>FirebaseAppDelegateProxyEnabled</key>
    <false/>

to info.plist is sufficient to bypass the APNS error on iOS devices, but not iOS emulators.

BUT, I have also found that this changes causes a hang in the login process. In particular,

let idp = await firebase().ui().show({ providers: [new PhoneProvider()] });

yields this sequence:

  1. Welcome screen presented, with "Sign in with phone" button as only visible option - tap button
  2. Enter phone number screen presented - enter number and tap Verify
  3. Verifying you’re not a robot… screen appears briefly
  4. about:blank screen appears, empty screen with Done (upper-left) and refresh (upper-right) as only options, and tapping Done cancels the login with an error, The interaction was cancelled by the user.
  5. When I attempt to display the error message with an alert, the app crashes, even within a try/catch block
  6. When I attempt to log in again, ui().show crashed with the error message, Error: Cannot read properties of undefined (reading 'presentViewControllerAnimatedCompletion')

Might some type of Firebase AppDelegate be required for phone authentication? I'll open a separate issue for tracking.

@kefahB
Copy link
Contributor

kefahB commented Aug 14, 2023

You may try to edit the delegate to set manually the apns token
´´´ts

applicationDidRegisterForRemoteNotificationsWithDeviceToken(application: UIApplication,
didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
fierbase().messaging().apnsToken = deviceToken; // maybe setApnsToken()
}

´´´

@dlcole
Copy link
Contributor

dlcole commented Aug 14, 2023

@kefahB - I closed issue 231, finding that simply invoking getAPNSToken() prior to getToken() is sufficient to avoid the error documented in this issue, without having to modify info.plist. Much thanks for your help and timely responses!

@lano-vargas
Copy link

Same issue here but on Simulator, Should this works on Simulator at all?

@dlcole
Copy link
Contributor

dlcole commented Oct 5, 2023

You'll always see this error on a simulator.

@lano-vargas
Copy link

lano-vargas commented Oct 5, 2023

Ok... I've found out that it actually the messaging doesn't work on Simulator.

FCM messages can be sent to real Android/iOS devices and Android emulators. iOS simulators however do not handle cloud messages.

It state here : https://docs.nativescript.org/plugins/firebase-messaging.html#intro

@viren-almabay
Copy link

This issue can occur if you are not having the provision profile you created from Apple Developer account. You need have those installed in the system you're working.

@lid3rs
Copy link

lid3rs commented Jul 11, 2024

Guys, I need help related to this question. No matter what I do, regadless of wha i select https://developer.apple.com/account/resources/identifiers/list i just can't get rid of "Provisioning profile "xxx" doesn't include the UIBackgroundModes entitlement.". BUT, there is physically no such item "Background Modes" or alike. `i killed the entire day on this, please help! PLEASE!

Screenshot 2024-07-11 at 22 28 11

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

8 participants