kreait / firebase-php

Unofficial Firebase Admin SDK for PHP
https://firebase-php.readthedocs.io/
MIT License
2.18k stars 422 forks source link

Convert APNs tokens to Firebase registration tokens #664

Open halaei opened 2 years ago

halaei commented 2 years ago

Describe the feature you would like to see

I just wondering if you find it fit to add batchImport method to this library. The API converts APNs tokens to Firebase tokens. I hope it will be a handy feature for iOS app developers, since the iOS devices give us APNs tokens instead of Firebase messaging tokens, which need to be converted in server side.

The API reference: https://developers.google.com/instance-id/reference/server#create_registration_tokens_for_apns_tokens

Using the Instance ID service's batchImport method, you can bulk import existing iOS APNs tokens to Google Cloud Messaging or Firebase Cloud Messaging, mapping them to valid registration tokens. Call the Instance ID service at this endpoint, providing a list of APNs tokens in the JSON body: https://iid.googleapis.com/iid/v1:batchImport The response body contains an array of Instance ID registration tokens ready to be used for sending FCM or GCM messages to the corresponding APNs device token.

github-actions[bot] commented 1 year ago

There hasn't been any activity on this issue recently, and in order to prioritize active issues, it will be marked as stale. Please make sure to update to the latest version and check if that solves the issue. Let me know if that works for you by leaving a 👍. Because this issue is marked as stale, it will be closed and locked in 7 days if no further activity occurs. Thank you for your contributions!

ni3k commented 1 year ago

I already have an implementation for this method, I could add it to the package if it is still needed/desired

romk1n commented 3 months ago

That would be great.

williamdes commented 4 days ago

I already have an implementation for this method, I could add it to the package if it is still needed/desired

That would help

Here is my lines to get it working


use GuzzleHttp\RequestOptions;
use Kreait\Firebase\Factory;

        $factory = new Factory();
        $factory = $factory->withServiceAccount(config('firebase.projects.app.credentials'));
        $googleApiClient = $factory->createApiClient([
            'base_uri' => 'https://iid.googleapis.com',
            'headers' => [
                'access_token_auth' => 'true',
                'User-Agent' => 'Custom UA',
            ],
        ]);

        $request = [
            RequestOptions::JSON => [
                'application' => $appId,
                'sandbox' => $sandboxMode,
                'apns_tokens' => [
                    $apnsToken,
                ],
            ],
        ];

        Context::merge([
            'request' => $request,
        ]);

        $response = $googleApiClient->post('/iid/v1:batchImport', $request);
ni3k commented 3 days ago

Hi, the insance id api will be deprecated at the end of this month so I think it's safe to close this issue, afaik the new api does not support converting apns tokens to firebase anymore

williamdes commented 3 days ago

Hi, the insance id api will be deprecated at the end of this month so I think it's safe to close this issue, afaik the new api does not support converting apns tokens to firebase anymore

Please cite your sources, all the Google docs I checked and topics indicated this API will not be deprecated

jeromegamez commented 3 days ago

The Instance ID API is deprecated. If you need to access unique app installation identifiers, use the Firebase installations API. See also Firebase installations and Instance ID.

https://developers.google.com/instance-id/reference/server

But I don't see right now that/how it impacts Admin SDKs. For the time being I think we're safe, as far as I can see, this mainly affects Client SDKs.

it seems the new concept of "Firebase Installation Identifier" is equivalent to FCM Registration Tokens, and it provides "just" a method to delete FIDs.

https://firebase.google.com/docs/reference/admin/node/firebase-admin.installations.installations

in the context of Admin SDKs (not this one, yet), deleting FIDs has a caveat:

When you delete an Firebase installation ID with a server API call, Firebase services start the process to delete the data tied to that installation ID, stop accepting new data for that ID over the course of 1-2 days, and then notify the client app that the ID was deleted. Until Firebase notifies the client app, some of

the app's services might still target the ID—for example, a Firebase installation might continue to receive FCM notifications for a few hours.

If you want to delete the current Firebase installation ID and immediately use Firebase services with a new, unrelated ID, use the client API to handle the deletion.

https://firebase.google.com/docs/projects/manage-installations

So, deleting FIDs seems to be best handled on-device.

jeromegamez commented 3 days ago

As for the feature to convert APNS tokens to Firebase Registration IDs, this is something I cannot test, so I would have to implement it blindly. It's possible, but I would need people testing this on their projects for me.

ni3k commented 3 days ago

Hi, the insance id api will be deprecated at the end of this month so I think it's safe to close this issue, afaik the new api does not support converting apns tokens to firebase anymore

Please cite your sources, all the Google docs I checked and topics indicated this API will not be deprecated

The Instance ID API is deprecated. If you need to access unique app installation identifiers, use the Firebase installations API. See also Firebase installations and Instance ID.

https://developers.google.com/instance-id/reference/server

williamdes commented 3 days ago

Okay, well here is my source: https://firebase.google.com/support/faq?hl=fr#fcm-23-deprecation

https://iid.googleapis.com/iid/* The endpoints will continue to work but they won't support authentication using static server keys after 6/21/2024.

At work, the endpoint works fine with the new auth

williamdes commented 3 days ago

As for the feature to convert APNS tokens to Firebase Registration IDs, this is something I cannot test, so I would have to implement it blindly. It's possible, but I would need people testing this on their projects for me.

For sure, batch import as coded in my example can be a starting point. For sure I will do my best to try new implementations

jeromegamez commented 3 days ago

Indeed, this SDK doesn't use static server keys, so you should be fine 💪🏻

williamdes commented 3 days ago

Could batch import be added? it seems like the SDK already has part of the logic of https://github.com/kreait/firebase-php/issues/664#issuecomment-2186873926

By the way, is there some config to set the user agent globally?