欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

一文詳解Android?FCM接入

 更新時間:2023年03月19日 16:54:59   作者:ChenYhong  
這篇文章主要為大家介紹了Android?FCM接入詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

發(fā)送通知

消息推送在現(xiàn)在的App中已經(jīng)十分常見,我們經(jīng)常會收到不同App的各種消息。消息推送的實現(xiàn),國內(nèi)與海外發(fā)行的App需要考慮不同的方案。國內(nèi)發(fā)行的App,常見的有可以聚合各手機廠商推送功能的極光、個推等,海外發(fā)行的App肯定是直接使用Firebase Cloud Message(FCM)。

下面介紹下如何接入FCM與發(fā)送通知。

FCM的SDK不包含創(chuàng)建和發(fā)送通知的功能,這部分需要我們自己實現(xiàn)。

在 Android 13+ 上請求運行時通知權(quán)限

Android 13 引入了用于顯示通知的新運行時權(quán)限。這會影響在 Android 13 或更高版本上運行的所有使用 FCM 通知的應(yīng)用。需要動態(tài)申請POST_NOTIFICATIONS權(quán)限后才能推送通知,代碼如下:

class ExampleActivity : AppCompatActivity() {
    private val requestPermissionCode = this.hashCode()
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU && 
                ActivityCompat.checkSelfPermission(this, Manifest.permission.POST_NOTIFICATIONS) != PackageManager.PERMISSION_GRANTED) {
                // 申請通知權(quán)限
                ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.POST_NOTIFICATIONS), requestPermissionCode)
            }
    }
    override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults)
            if (requestCode == requestPermissionCode) {
                // 處理回調(diào)結(jié)果
            }
    }
}

創(chuàng)建通知渠道

從 Android 8.0(API 級別 26)開始,必須為所有通知分配渠道,否則通知將不會顯示。通過將通知歸類到不同的渠道中,用戶可以停用您應(yīng)用的特定通知渠道(而非停用您的所有通知),還可以控制每個渠道的視覺和聽覺選項。

創(chuàng)建通知渠道代碼如下:

class ExampleActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        val notificationManager = NotificationManagerCompat.from(this)
        if (Build.VERSION.SDK_INT &gt;= Build.VERSION_CODES.O) {
            val applicationInfo = if (Build.VERSION.SDK_INT &gt;= Build.VERSION_CODES.TIRAMISU) {
                packageManager.getApplicationInfo(packageName, PackageManager.ApplicationInfoFlags.of(0))
            } else {
                packageManager.getApplicationInfo(packageName, 0)
            }
            val appLabel = getText(applicationInfo.labelRes)
            val exampleNotificationChannel = NotificationChannel("example_notification_channel", "$appLabel Notification Channel", NotificationManager.IMPORTANCE_DEFAULT).apply {
                description = "The description of this notification channel"
            }
            notificationManager.createNotificationChannel(minigameChannel)
        }
    }
}

創(chuàng)建并發(fā)送通知

創(chuàng)建與發(fā)送通知,代碼如下:

class ExampleActivity : AppCompatActivity() {
    private var notificationId = 0
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate()
        val notificationManager = NotificationManagerCompat.from(this)
        ...
        if (notificationManager.areNotificationsEnabled()) {
            val notification = NotificationCompat.Builder(this, "example_notification_channel")
                //設(shè)置小圖標(biāo)
                .setSmallIcon(R.drawable.notification)
                // 設(shè)置通知標(biāo)題
                .setContentTitle("title")
                // 設(shè)置通知內(nèi)容
                .setContentText("content")
                // 設(shè)置是否自動取消
                .setAutoCancel(true)
                // 設(shè)置通知聲音
                .setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION))
                // 設(shè)置點擊的事件
                .setContentIntent(PendingIntent.getActivity(this, requestCode, packageManager.getLaunchIntentForPackage(packageName)?.apply { putExtra("routes", "From notification") }, PendingIntent.FLAG_IMMUTABLE))
                .build()
            // notificationId可以記錄下來
            // 可以通過notificationId對通知進行相應(yīng)的操作
            notificationManager.notify(notificationId, notification)
        }
    }
}

*注意,smallIcon必須設(shè)置,否則會導(dǎo)致崩潰。

FCM

Firebase Cloud Message (FCM) 是一種跨平臺消息傳遞解決方案,可讓您免費可靠地發(fā)送消息。

官方接入文檔

集成FCM

在項目下的build.gradle中添加如下代碼:

buildscript {
    repositories {
        google()
        mavenCentral()
    }
    dependencies {
        ...
        classpath("com.google.gms:google-services:4.3.14")
    }
}

在app module下的build.gradle中添加代碼,如下:

dependencies {
    // 使用Firebase Andorid bom(官方推薦)
    implementation platform('com.google.firebase:firebase-bom:31.1.0') 
    implementation 'com.google.firebase:firebase-messaging' 
    // 不使用bom
    implementation 'com.google.firebase:firebase-messaging:23.1.1'
}

在Firebase后臺獲取項目的google-services.json文件,放到app目錄下

要接收FCM的消息推送,需要自定義一個Service繼承FirebaseMessagingService,如下:

class ExampleFCMService : FirebaseMessagingService() {
    override fun onNewToken(token: String) {
        super.onNewToken(token)
        // FCM生成的令牌,可以用于標(biāo)識用戶的身份
    }
    override fun onMessageReceived(message: RemoteMessage) {
        super.onMessageReceived(message)
        // 接收到推送消息時回調(diào)此方法
    }

在AndroidManifest中注冊Service,如下:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
    <application>
        <service
            android:name="com.minigame.fcmnotificationsdk.MinigameFCMService"
            android:exported="false">
            <intent-filter>
                <action android:name="com.google.firebase.MESSAGING_EVENT" />
            </intent-filter>
        </service>
    </application>
</manifest>

通知圖標(biāo)的樣式

當(dāng)App處于不活躍狀態(tài)時,如果收到通知,F(xiàn)CM會使用默認(rèn)的圖標(biāo)與顏色來展示通知,如果需要更改的話,可以在AndroidManifest中通過meta-data進行配置,代碼如下:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
    <application>
        <!--修改默認(rèn)圖標(biāo)-->
        <meta-data
            android:name="com.google.firebase.messaging.default_notification_icon"
            android:resource="@drawable/notification" />
        <!--修改默認(rèn)顏色-->
        <meta-data
            android:name="com.google.firebase.messaging.default_notification_color"
            android:resource="@color/color_blue_0083ff" />
    </application>
</manifest>

修改前:

修改后:

避免自動初始化

如果有特殊的需求,不希望FCM自動初始化,可以通過在AndroidManifest中配置meta-data來實現(xiàn),代碼如下:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
    <application>
        <meta-data
            android:name="firebase_messaging_auto_init_enabled"
            android:value="false" />
        <!--如果同時引入了谷歌分析,需要配置此參數(shù)-->
        <meta-data
            android:name="firebase_analytics_collection_enabled"
            android:value="false" />
    </application>
</manifest>

需要重新啟動FCM自動初始化時,更改FirebaseMessagingisAutoInitEnabled的屬性,代碼如下:

FirebaseMessaging.getInstance().isAutoInitEnabled = true
// 如果同時禁止了Google Analytics,需要配置如下代碼
FirebaseAnalytics.getInstance(context).setAnalyticsCollectionEnabled(true)

調(diào)用此代碼后,下次App啟動時FCM會自動初始化。

測試消息推送

在Firebase后臺中,選擇Messageing,并點擊制作首個宣傳活動,如圖:

選擇Firebase 通知消息,如圖:

輸入標(biāo)題和內(nèi)容后,點擊發(fā)送測試消息,如圖:

輸入在FirebaseMessagingService的onNewToken方法中獲取到的token,并點擊測試,如圖:

示例

已整合到demo中。

ExampleDemo github

ExampleDemo gitee

效果如圖:

以上就是一文詳解Android FCM接入的詳細(xì)內(nèi)容,更多關(guān)于Android FCM接入的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Android仿高德首頁三段式滑動效果的示例代碼

    Android仿高德首頁三段式滑動效果的示例代碼

    很多app都會使用三段式滑動,比如說高德的首頁和某寶等物流信息都是使用的三段式滑動方式。本文將介紹如何實現(xiàn)這一效果,感興趣的可以學(xué)習(xí)一下
    2022-01-01
  • Android實現(xiàn)換膚的兩種思路分析

    Android實現(xiàn)換膚的兩種思路分析

    這篇文章主要介紹了Android實現(xiàn)換膚的兩種思路分析,較為詳細(xì)的分析了Android實現(xiàn)換膚的具體方法,需要的朋友可以參考下
    2015-12-12
  • kotlin代碼中!!操作符的清楚方法

    kotlin代碼中!!操作符的清楚方法

    這篇文章主要給大家介紹了關(guān)于kotlin代碼中!!操作符的清楚方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-06-06
  • android讀取assets文件示例

    android讀取assets文件示例

    這篇文章主要介紹了android讀取assets文件示例,需要的朋友可以參考下
    2014-02-02
  • Android打開WebView黑屏閃爍問題排查

    Android打開WebView黑屏閃爍問題排查

    這篇文章主要介紹了Android打開WebView黑屏閃爍問題排查,文章通過詳細(xì)的代碼示例和圖文介紹WebView黑屏閃爍的問題,感興趣的小伙伴可以跟著小編一起來學(xué)習(xí)
    2023-05-05
  • android 簡單圖片動畫播放的實例代碼

    android 簡單圖片動畫播放的實例代碼

    android 簡單圖片動畫播放的實例代碼,需要的朋友可以參考一下
    2013-06-06
  • Android仿簡書長按文章生成圖片效果

    Android仿簡書長按文章生成圖片效果

    使用簡書APP的同學(xué)都知道,簡書有這樣一個功能;文章頁長按內(nèi)容時底部會出現(xiàn)一個 生成圖片分享 的按鈕,點擊之后就可以將當(dāng)前的文章生成一張長圖片;這張圖片可以保存到本地或分享給好友,同時還可為圖片設(shè)置成為白和黑兩種風(fēng)格,很有藝術(shù)范
    2017-03-03
  • Android Studio使用ViewPager+Fragment實現(xiàn)滑動菜單Tab效果

    Android Studio使用ViewPager+Fragment實現(xiàn)滑動菜單Tab效果

    這篇文章主要為大家詳細(xì)介紹了Android Studio使用ViewPager+Fragment實現(xiàn)滑動菜單Tab效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-09-09
  • 詳解Android 檢測權(quán)限的三種寫法

    詳解Android 檢測權(quán)限的三種寫法

    這篇文章主要介紹了詳解Android 檢測權(quán)限的三種寫法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-10-10
  • 簡單了解Android性能優(yōu)化方向及相關(guān)工具

    簡單了解Android性能優(yōu)化方向及相關(guān)工具

    這篇文章主要介紹了簡單了解Android性能優(yōu)化方向及相關(guān)工具,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-08-08

最新評論