2017-04-25

【Android Studio】從 GCM 移植到 FCM

參考資料 ----
Migrate a GCM Client App for Android to Firebase Cloud Messaging
Set Up a Firebase Cloud Messaging Client App on Android
Firebase Quickstart Samples for Android


Google 推出 FCM 後,一直鼓勵開發者自 GCM 移轉至 FCM,也致力簡化步驟,減少開發者在移植過程中所花費的功夫與時間。


登入 Firebase Console(主控台)


點擊 "匯入 GOOGLE 專案"



點選您要匯入 FCMGCM 專案
→ "新增 FIREBASE" 鈕



點選 "將 Firebase 加入您的 Android 應用程式"



輸入您的 app 的完整的 package 名
→  註冊應用程式



FCM 主控台會自動為您產生一個 google-services.json 檔,將它下載並存放於您的 app 專案的目錄下





 修改 build.gradle


專案層級的 build.gradle
  1.  
  2. buildscript {
  3. ...
  4. ...
  5.  
  6. dependencies {
  7. classpath 'com.android.tools.build:gradle:2.3.3'
  8. classpath 'com.google.gms:google-services:3.0.0'
  9. }
  10. }
  11.  
  12. ...
  13. ...
  14.  


應用程式階層 build.gradle
  1.  
  2. ...
  3. ...
  4.  
  5. dependencies {
  6. ...
  7. ...
  8. implementation 'com.google.firebase:firebase-core:10.2.1'
  9. implementation 'com.google.firebase:firebase-messaging:10.2.1'
  10. }
  11. // 寫在最末列
  12. apply plugin: 'com.google.gms.google-services'
  13.  



修改 AndroidMainfest.xml,移除之前與 GCM 有關的所有設定,因為這些工作,FCM
都包辦了。

  1.  
  2. <!-- 移除(或註解) 下述設定 -->
  3. <!-- <permission
  4. android:name="com.example.permission.C2D_MESSAGE"
  5. android:protectionLevel="signature" />
  6. <uses-permission android:name="com.example.permission.C2D_MESSAGE" />
  7. -->
  8. <!-- App receives GCM messages. -->
  9. <!--
  10. <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
  11. -->
  12.  
  13. <uses-permission android:name="android.permission.INTERNET" />
  14. <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
  15.  
  16. ...
  17. ...
  18.  
  19. <application
  20. ...
  21. ... >
  22.  
  23. <!-- 收到通知時, 到狀態列要顯示的 icon -->
  24. <meta-data
  25. android:name="com.google.firebase.messaging.default_notification_icon"
  26. android:resource="@drawable/ic_oracle" />
  27. <!-- 收到通知的背景色 -->
  28. <meta-data
  29. android:name="com.google.firebase.messaging.default_notification_color"
  30. android:resource="@color/black" />
  31.  
  32. ...
  33. ...
  34.  
  35. <!-- 移除(或註解) 下述設定 -->
  36. <!-- 接收 GCM 的 receiver -->
  37. <!--
  38. <receiver
  39. android:name="com.google.android.gcm.GCMBroadcastReceiver"
  40. android:permission="com.google.android.c2dm.permission.SEND" >
  41. <intent-filter>
  42. <action android:name="com.google.android.c2dm.intent.RECEIVE" />
  43. <action android:name="com.google.android.c2dm.intent.REGISTRATION" />
  44.  
  45. <category android:name="com.example" />
  46. </intent-filter>
  47. </receiver>
  48. -->
  49. <!-- GCM service -->
  50. <!--
  51. <service android:name="com.example.GCMIntentService" />
  52. -->
  53.  



原本的 GCMIntentService、ServerUtilities.java (參考 【Android】使用 GCM(Google Cloud Messaging) 這篇筆記)都可以移除,不需要了。



在實體機第一次執行 APP 後,關閉 APP,版本為 Oreo(8.0)(含) 以上的實體機,還要在 "自啟動管理" 開啟 APP 的自啟動選項,才能收到通知。

再回到 FCM console
Notification
新增訊息



輸入要推播的訊息內容






過一會兒後,裝置就會收到通知了。







點擊已發送的記錄,還可以看到發送統計。



相關筆記 ----
【Android】使用 GCM(Google Cloud Messaging)
【Android Studio】GCM client 端設定 - 速成篇