Forked from rolinger/gist:d6500d65128db95f004041c2b636753a
Last active
August 15, 2018 06:43
-
-
Save iyasilias/b1a1f9b0060dff633dd4157682c68adf to your computer and use it in GitHub Desktop.
PHP => FCM Push notification tutorial for Android and iOS
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Below is a full tutorial on how to setup and use Googles Firebase push notification API for both Android and iOS. It is based on this | |
earlier implementation of Googles GCM method: https://gist.github.com/prime31/5675017 - FCM is the new method and GCM will eventually be | |
retired. | |
## THE BELOW METHOD IS THE NEWER FCM METHOD: | |
Register your app in the FCM Console: https://console.firebase.google.com (add project) | |
1. Click on the newly added project, in the upper left menu is the "Overview" and Gear Settings. | |
2. Click on the GEAR settings icon, and then on "Project Settings" | |
3. In the main screen, click on "Cloud Messaging" | |
4. Here you will find both your "Server Key" and "SenderID" | |
5. The "Server Key" is what is used below as the API_ACCESS_KEY | |
6. The "SenderID" is what your app (on the client phone) will need to generate a 'registration_ID' | |
7. You now need to register the "senderID" in your developer play console of your app | |
8. Go to: https://play.google.com/apps/publish, login to manage your app on the playstore | |
9. Click on the specific app and in the left menu under "Development Tools" click on "Serivces & APIs" | |
10. Under the Firebase Cloud Messaging (FCM) section, click "Link Sender ID", add your "server key" and click "link". After it links, your "senderID" will appear in the linked section. | |
11. In your App, (I use https://ionicframework.com/docs/native/fcm/), make a call the FCM server, passing the senderID | |
12. The client App will receive the "registration_ID". - this is a unique ID that specifically registers the users phone | |
to receive messages on behalf of your app. | |
13. Your app will need to pass the 'registration_ID' to your server. In my case, my app passes it via an api call. But | |
your app could simply pass a silent url call to your server to capture the users 'registration_ID' | |
(ie: http://yourserver.com/passID.php?userID=jdoe®ID=$registration_ID). | |
14. Ideally, you will want to store that registration_ID locally on your server (mysql). | |
15. In the future, when you need to push a notification to that user, call up the stored registration_ID and pass it to | |
the script below: | |
`NOTE: Once your register your app in the FCM console and retrieve your Server Key and SenderID, it might take 12 to 24 hours | |
for the IDs to propagate to the FCM messaging servers. I experienced this, minutes after registering my code worked but phone | |
never received the messages...10 hours later...no changes to my code...phone suddenly started getting the messages. I assume | |
it was a propagation issue.` | |
## REGISTERING YOUR APPLE APNs KEY in GOOGLE'S FCM CONSOLE: | |
1. You will need to link the Apple version of your app to your FCM App project. On the Firebase project main page, click add "+ Add another App". Then "iOS App" | |
2. After it is linked, in the same section as #4 & #5 above, you will see a section for "iOS Apps" and you should see | |
your App name listed | |
3. Here you can add your APNs Auth Key ....OR....add APNs Certificates - it is easier and recommend to do the Auth Key method. | |
4. Login to your Apple Developer Account: https://developer.apple.com/ | |
5. Click on "Account" , then on "Certificates, IDs & Profiles" | |
6. Make certain your on the "ALL" section in the left hand menu, the click the (+) sign in the top right of the main screen | |
7. Under the "Production" section, select the "Apple Push Notification Authentication Key (Sandbox & Production) option. | |
8. Click on continue | |
9. You will be provided with an Auth Key AND a downloadable authkey file - you will need both. Download the file - but | |
do NOT change the name of the file | |
10. While here copy down your Team ID - click on "Account" again, then on "Membership" in the left hand menu | |
11. Copy your "Team ID" | |
12. Back in the FCM Console (#3), click on the "add/upload" button in the Apple APNs section next to your listed app. | |
13. KeyID = #9 Auth Key, File = "#9 downloaded file", App ID Prefix = "#11 Team ID" | |
14. Save/upload | |
`You iOS app is now registered with Googles FCM, Google FCM can now send/relay messages to iPhones/iPads | |
The only remaining step is to have your client iOS/iPhone App retrieve and send a proper registrationID to your server | |
side script (below). In my case, the same Cordova phonegap-plugin-push plugin extracts the Apple registrationID too.` | |
// | |
// PHP SERVER SIDE CODE BELOW | |
// | |
<?php | |
// API access key from Google FCM App Console | |
define( 'API_ACCESS_KEY', 'AAAAkPyMydI:A.............FWPt6AfWsrEFb6Ww' ); | |
// generated via the cordova phonegap-plugin-push using "senderID" (found in FCM App Console) | |
// this was generated from my phone and outputted via a console.log() in the function that calls the plugin | |
// my phone, using my FCM senderID, to generate the following registrationId | |
$singleID = 'eEvFbrtfRMA:APA91bFoT2XFPeM5bLQdsa8-HpVbOIllzgITD8gL9wohZBg9U.............mNYTUewd8pjBtoywd' ; | |
$registrationIDs = array( | |
'eEvFbrtfRMA:APA91bFoT2XFPeM5bLQdsa8-HpVbOIllzgITD8gL9wohZBg9U.............mNYTUewd8pjBtoywd', | |
'eEvFbrtfRMA:APA91bFoT2XFPeM5bLQdsa8-HpVbOIllzgITD8gL9wohZBg9U.............mNYTUewd8pjBtoywd' | |
'eEvFbrtfRMA:APA91bFoT2XFPeM5bLQdsa8-HpVbOIllzgITD8gL9wohZBg9U.............mNYTUewd8pjBtoywd' | |
) ; | |
// prep the bundle | |
// to see all the options for FCM to/notification payload: | |
// https://firebase.google.com/docs/cloud-messaging/http-server-ref#notification-payload-support | |
// 'vibrate' available in GCM, but not in FCM | |
$fcmMsg = array( | |
'body' => 'here is a message. message', | |
'title' => 'This is title #1', | |
'sound' => "default", | |
'color' => "#203E78" | |
); | |
// I haven't figured 'color' out yet. | |
// On one phone 'color' was the background color behind the actual app icon. (ie Samsung Galaxy S5) | |
// On another phone, it was the color of the app icon. (ie: LG K20 Plush) | |
// 'to' => $singleID ; // expecting a single ID | |
// 'registration_ids' => $registrationIDs ; // expects an array of ids | |
// 'priority' => 'high' ; // options are normal and high, if not set, defaults to high. | |
$fcmFields = array( | |
'to' => $singleID, | |
'priority' => 'high', | |
'notification' => $fcmMsg | |
); | |
$headers = array( | |
'Authorization: key=' . API_ACCESS_KEY, | |
'Content-Type: application/json' | |
); | |
$ch = curl_init(); | |
curl_setopt( $ch,CURLOPT_URL, 'https://fcm.googleapis.com/fcm/send' ); | |
curl_setopt( $ch,CURLOPT_POST, true ); | |
curl_setopt( $ch,CURLOPT_HTTPHEADER, $headers ); | |
curl_setopt( $ch,CURLOPT_RETURNTRANSFER, true ); | |
curl_setopt( $ch,CURLOPT_SSL_VERIFYPEER, false ); | |
curl_setopt( $ch,CURLOPT_POSTFIELDS, json_encode( $fcmFields ) ); | |
$result = curl_exec($ch ); | |
curl_close( $ch ); | |
echo $result . "\n\n"; | |
?> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment