پوشفا
Android SDK Android

دریافت، نمایش و کلیک Push با Android SDK

رفتار خودکار SDK برای دریافت و نمایش اعلان، Listener سفارشی و روش ادغام با FirebaseMessagingService موجود.

حالت عادی؛ بدون Service سفارشی

SDK سرویس Firebase خودش را از Manifest اضافه می‌کند و پیام‌های Data پوشفا را در Foreground و Background دریافت و نمایش می‌دهد. عنوان، متن، تصویر، آیکن، دو دکمه، لینک، مسیر داخلی، Additional Data، Silent، Collapse ID و گزارش Delivery/Click پشتیبانی می‌شوند. برای استفاده معمولی FirebaseMessagingService جداگانه نسازید.

ثبت token، Refresh token، نمایش اعلان و گزارش‌ها در مسیر عادی توسط SDK انجام می‌شوند.

مشاهده یا مدیریت سفارشی پیام

Listener پیش از نمایش خودکار اجرا می‌شود. false یعنی SDK نمایش استاندارد را ادامه دهد؛ true یعنی اپ پیام را کاملاً مدیریت کرده است.

displayNotification علاوه بر نمایش استاندارد، گزارش Delivery را نیز Queue می‌کند.
Pushfa.setNotificationListener { message ->
    analytics.trackPush(message.id, message.additionalData)

    // false: نمایش استاندارد SDK ادامه پیدا کند
    false
}

// نمایش سفارشی و سپس Renderer استاندارد پوشفا
Pushfa.setNotificationListener { message ->
    customLogic(message)
    Pushfa.displayNotification(applicationContext, message)
    true
}

اگر اپ از قبل FirebaseMessagingService دارد

Android نباید دو Service رقیب برای com.google.firebase.MESSAGING_EVENT داشته باشد. Service پوشفا را از Merged Manifest حذف و پیام/token را از Service خودتان به SDK تحویل دهید.

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools">
    <application>
        <service
            android:name="com.pushfa.sdk.PushfaFirebaseMessagingService"
            tools:node="remove" />
        <service
            android:name=".MyFirebaseMessagingService"
            android:exported="false">
            <intent-filter>
                <action android:name="com.google.firebase.MESSAGING_EVENT" />
            </intent-filter>
        </service>
    </application>
</manifest>

تحویل پیام و token از Service اختصاصی

class MyFirebaseMessagingService : FirebaseMessagingService() {
    override fun onNewToken(token: String) {
        super.onNewToken(token)
        Pushfa.handleNewToken(applicationContext, token)
    }

    override fun onMessageReceived(message: RemoteMessage) {
        super.onMessageReceived(message)
        val wasPushfaMessage = Pushfa.handleMessage(applicationContext, message)
        if (!wasPushfaMessage) {
            // پیام مربوط به سیستم دیگر را پردازش کنید.
        }
    }
}

لینک، Deep Link و مسیر داخلی

لینک کامل https یا Custom Scheme با ACTION_VIEW باز می‌شود. برای App Link و Scheme باید Intent Filter تعریف شده باشد. مسیر نسبی مانند /promotion در intent.data و Pushfa.EXTRA_TARGET_URL به Activity اصلی می‌رسد و باید در onCreate و onNewIntent خوانده شود.

private fun handlePushfaRoute(intent: Intent) {
    val target = intent.getStringExtra(Pushfa.EXTRA_TARGET_URL)
        ?: intent.data?.toString()
    val actionId = intent.getStringExtra(Pushfa.EXTRA_ACTION_ID)
    val notificationId = intent.getStringExtra(Pushfa.EXTRA_NOTIFICATION_ID)

    when (target) {
        "/promotion" -> openPromotionScreen()
        "/profile" -> openProfileScreen()
    }
}