{"id":74,"date":"2020-03-16T14:29:01","date_gmt":"2020-03-16T06:29:01","guid":{"rendered":"https:\/\/badgameshow.com\/fly\/?p=74"},"modified":"2023-02-03T10:00:06","modified_gmt":"2023-02-03T02:00:06","slug":"%f0%9f%93%a2%e3%80%90firebase%e3%80%91android-firebase-cloud-messaging-%e9%9b%b2%e7%ab%af%e6%8e%a8%e6%92%ad-fcm-%e7%af%84%e4%be%8b%f0%9f%94%a5","status":"publish","type":"post","link":"https:\/\/badgameshow.com\/fly\/%f0%9f%93%a2%e3%80%90firebase%e3%80%91android-firebase-cloud-messaging-%e9%9b%b2%e7%ab%af%e6%8e%a8%e6%92%ad-fcm-%e7%af%84%e4%be%8b%f0%9f%94%a5\/","title":{"rendered":"\ud83d\udce2\u3010Firebase\u3011Android Firebase Cloud Messaging \u96f2\u7aef\u63a8\u64ad FCM \u7bc4\u4f8b\ud83d\udd25"},"content":{"rendered":"<h1>\ud83d\udce2\u3010Firebase\u3011Android Firebase Cloud Messaging \u96f2\u7aef\u63a8\u64ad FCM \u7bc4\u4f8b\ud83d\udd25<\/h1>\n<h4>Firebase Cloud Messaging (FCM) \u662f Google \u5efa\u7acb\u7684\u8de8\u5e73\u53f0\u6d88\u606f\u6280\u8853\uff0c\u53ef\u4ee5\u7528\u65bc\u624b\u6a5f\u7a0b\u5f0f\uff08iOS \u548c Android\uff09\u4e4b\u9593\u7684\u4ea4\u4e92\u3002\u9019\u9805\u6280\u8853\u53ef\u4ee5\u8b93\u958b\u767c\u8005\u9054\u6210\u4e00\u500b\u76ee\u6a19\uff1a\u5728\u624b\u6a5f\u7a0b\u5f0f\u4e0a\u50b3\u9001\u548c\u63a5\u6536\u6d88\u606f\u3002\u5b83\u53ef\u4ee5\u55ae\u5411\u50b3\u9001\uff08\u53ea\u91dd\u5c0d\u7d42\u7aef\u7528\u6236\u65bc\u6307\u5b9a\u6642\u9593\u63a5\u6536\u6307\u5b9a\u6d88\u606f\uff09\u548c\u96d9\u5411\u50b3\u9001\uff08\u8207\u7d42\u7aef\u7528\u6236\u4e92\u76f8\u5c0d\u8a71\uff09\u5169\u7a2e\u5f62\u5f0f\u3002<\/h4>\n<hr \/>\n<h4>\u6587\u7ae0\u76ee\u9304<\/h4>\n<ol>\n<li><a href=\"#a\">FCM Firebase \u8207\u5c08\u6848\u9023\u7d50<\/a><\/li>\n<li><a href=\"#b\">FCM SDK \u8207 google-services.json \u5c0e\u5165\u9032\u5c08\u6848<\/a><\/li>\n<li><a href=\"#c\">FCM \u7e7c\u627f FirebaseMessagingService \u4e26\u8986\u5beb onMessageReceived \u65b9\u6cd5<\/a><\/li>\n<li><a href=\"#d\">FCM Manifest \u589e\u52a0\u6b0a\u9650\u8207 Service<\/a><\/li>\n<li><a href=\"#e\">FCM \u53d6\u5f97\u4f7f\u7528\u8005\u7684 Token<\/a><\/li>\n<li><a href=\"#f\">FCM Notification \u8207 Data<\/a><\/li>\n<li><a href=\"#g\">FCM Postman \u6e2c\u8a66<\/a><\/li>\n<\/ol>\n<hr \/>\n<p><a id=\"a\"><\/a><\/p>\n<h4>1.FCM Firebase\u8207\u5c08\u6848\u9023\u7d50<\/h4>\n<p><a class=\"wp-editor-md-post-content-link\" href=\"https:\/\/badgameshow.com\/fly\/wp-content\/uploads\/2020\/03\/FCM1.png\"><img decoding=\"async\" src=\"https:\/\/badgameshow.com\/fly\/wp-content\/uploads\/2020\/03\/FCM1.png\" alt=\"\" \/><\/a><\/p>\n<p><a id=\"b\"><\/a><\/p>\n<h4>2.FCM SDK \u8207 google-services.json \u5c0e\u5165\u9032\u5c08\u6848<\/h4>\n<p><a class=\"wp-editor-md-post-content-link\" href=\"https:\/\/badgameshow.com\/fly\/wp-content\/uploads\/2020\/03\/FCM2.png\"><img decoding=\"async\" src=\"https:\/\/badgameshow.com\/fly\/wp-content\/uploads\/2020\/03\/FCM2.png\" alt=\"\" \/><\/a><\/p>\n<p><a id=\"c\"><\/a><\/p>\n<h4>3.\u7e7c\u627f FirebaseMessagingService \u4e26\u8986\u5beb onMessageReceived \u65b9\u6cd5<\/h4>\n<\/h4>\n<pre><code class=\"language-Kotlin line-numbers\">class MyMessagingService : FirebaseMessagingService() {\n\n    override fun onMessageReceived(remoteMessage: RemoteMessage) {\n\n        \/\/\u559a\u9192\u624b\u6a5f\n        wakeUpPhone()\n\n        \/\/O\u4ee5\u4e0a\u9700\u8981\u6dfb\u52a0channel\n        val notificationManager =\n            getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager\n        if (Build.VERSION.SDK_INT &gt;= Build.VERSION_CODES.O) {\n            val channel = NotificationChannel(\"msg\", \"\u6d88\u606f\", NotificationManager.IMPORTANCE_HIGH)\n            notificationManager.createNotificationChannel(channel)\n        }\n\n        \/\/\u9ede\u64ca\u8df3\u8f49\u756b\u9762\n        val pendingIntent = PendingIntent.getActivity(this,\n            0,\n            Intent(this, MainActivity::class.java).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP),\n            PendingIntent.FLAG_IMMUTABLE)\n\n        \/\/\u901a\u77e5\u6b04\n        val notification = NotificationCompat.Builder(this, \"msg\")\n            .setContentTitle(remoteMessage.data[\"title\"]) \/\/Data\u6536\u5230\n            .setContentText(remoteMessage.data[\"msg\"]) \/\/Data\u6536\u5230\n            .setWhen(System.currentTimeMillis())\n            .setSmallIcon(R.drawable.icon)\n            .setLargeIcon(BitmapFactory.decodeResource(resources, R.drawable.icon))\n            .setAutoCancel(true)\n            .setContentIntent(pendingIntent)\n            .build()\n\n        notificationManager.notify(Random.nextInt(5), notification)\n    }\n\n    private fun wakeUpPhone() {\n        val powerManager = getSystemService(Context.POWER_SERVICE) as PowerManager\n        powerManager.newWakeLock(\n            PowerManager.ACQUIRE_CAUSES_WAKEUP or PowerManager.SCREEN_BRIGHT_WAKE_LOCK,\n            \"app:bright\")\n            .apply {\n                \/\/\u958b\u555f\u87a2\u5e55(10\u5206\u9418)\n                acquire(10 * 60 * 1000L)\n                \/\/\u91cb\u653e\u8cc7\u6e90\n                release()\n            }\n    }\n\n    override fun onNewToken(token: String) {\n        super.onNewToken(token)\n        Log.e(\"onNewToken\", token)\n    }\n\n}\n<\/code><\/pre>\n<p><a id=\"d\"><\/a><\/p>\n<h4>4.Manifest \u589e\u52a0\u6b0a\u9650\u8207 Service<\/h4>\n<pre><code class=\"language-XML line-numbers\">&lt;!-- \u559a\u9192\u624b\u6a5f--&gt;\n&lt;uses-permission android:name=\"android.permission.WAKE_LOCK\"\/&gt;\n&lt;!-- Android13\u4ee5\u4e0a--&gt;\n&lt;uses-permission android:name=\"android.permission.POST_NOTIFICATIONS\"\/&gt;\n\n&lt;service android:name=\".MyMessagingService\"\n    android:exported=\"false\"&gt;\n    &lt;intent-filter&gt;\n        &lt;action android:name=\"com.google.firebase.MESSAGING_EVENT\"\/&gt;\n    &lt;\/intent-filter&gt;\n&lt;\/service&gt;\n<\/code><\/pre>\n<p><a id=\"e\"><\/a><\/p>\n<h4>5.\u53d6\u5f97\u4f7f\u7528\u8005\u7684 Token<\/h4>\n<pre><code class=\"language-Kotlin line-numbers\">FirebaseMessaging.getInstance().token.addOnCompleteListener { task -&gt;\n    if(task.isSuccessful) {\n        Log.e(\"FCM Token\", task.result)\n    }\n}\n<\/code><\/pre>\n<p><a id=\"f\"><\/a><\/p>\n<h4>6.Notification \u8207 Data<\/h4>\n<pre><code class=\"language-Kotlin line-numbers\">App\u72c0\u614b         Notification               Data\n\u524d\u666f            onMessageReceived          onMessageReceived\n\u80cc\u666f            \u8abf\u7528\u7cfb\u7d71\u672c\u8eab                onMessageReceived\n<\/code><\/pre>\n<p><a id=\"g\"><\/a><\/p>\n<h4>7.Postman \u6e2c\u8a66<\/h4>\n<p>https:\/\/fcm.googleapis.com\/fcm\/send<\/p>\n<p><a class=\"wp-editor-md-post-content-link\" href=\"https:\/\/badgameshow.com\/fly\/wp-content\/uploads\/2020\/03\/FCM3.png\"><img decoding=\"async\" src=\"https:\/\/badgameshow.com\/fly\/wp-content\/uploads\/2020\/03\/FCM3.png\" alt=\"\" \/><\/a><\/p>\n<h5>\u6dfb\u52a0 Headers<\/h5>\n<h5>server_key : \u5c08\u6848\u8a2d\u5b9a > \u96f2\u7aef\u901a\u8a0a<\/h5>\n<p><a class=\"wp-editor-md-post-content-link\" href=\"https:\/\/badgameshow.com\/fly\/wp-content\/uploads\/2020\/03\/\u87a2\u5e55\u64f7\u53d6\u756b\u9762-2022-12-20-170639-1.png\"><img decoding=\"async\" src=\"https:\/\/badgameshow.com\/fly\/wp-content\/uploads\/2020\/03\/\u87a2\u5e55\u64f7\u53d6\u756b\u9762-2022-12-20-170639-1.png\" alt=\"\" \/><\/a><\/p>\n<h5>\u6dfb\u52a0 Body (raw JSON)<\/h5>\n<h5>notification<\/h5>\n<pre><code class=\"language-Json line-numbers\">{\n    \"to\": \"device token\",\n    \"notification\": {\n        \"title\": \"\u6a19\u984c\",\n        \"body\": \"\u5167\u5bb9\"\n    }\n}\n<\/code><\/pre>\n<h5>data<\/h5>\n<pre><code class=\"language-Json line-numbers\">{\n    \"to\": \"device token\",\n    \"data\": {\n        \"title\": \"\u6a19\u984c\",\n        \"body\": \"\u5167\u5bb9\"\n    }\n}\n<\/code><\/pre>\n\n<div style=\"font-size: 0px; height: 0px; line-height: 0px; margin: 0; padding: 0; clear: both;\"><\/div>","protected":false},"excerpt":{"rendered":"<p>\ud83d\udce2\u3010Firebase\u3011Android Firebase Cloud Messaging \u96f2\u7aef\u63a8\u64ad FCM \u7bc4\u4f8b &hellip; <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"pgc_sgb_lightbox_settings":"","footnotes":""},"categories":[34],"tags":[13,40,15],"class_list":["post-74","post","type-post","status-publish","format-standard","hentry","category-firebase","tag-android","tag-firebase","tag-kotlin"],"_links":{"self":[{"href":"https:\/\/badgameshow.com\/fly\/wp-json\/wp\/v2\/posts\/74","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/badgameshow.com\/fly\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/badgameshow.com\/fly\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/badgameshow.com\/fly\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/badgameshow.com\/fly\/wp-json\/wp\/v2\/comments?post=74"}],"version-history":[{"count":32,"href":"https:\/\/badgameshow.com\/fly\/wp-json\/wp\/v2\/posts\/74\/revisions"}],"predecessor-version":[{"id":1831,"href":"https:\/\/badgameshow.com\/fly\/wp-json\/wp\/v2\/posts\/74\/revisions\/1831"}],"wp:attachment":[{"href":"https:\/\/badgameshow.com\/fly\/wp-json\/wp\/v2\/media?parent=74"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/badgameshow.com\/fly\/wp-json\/wp\/v2\/categories?post=74"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/badgameshow.com\/fly\/wp-json\/wp\/v2\/tags?post=74"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}