پیامرسانی
این بخش شامل مستندات مربوط به اعلانهای پوش (Push Notifications) و پیامهای درونبرنامهای (In-App Messages) ارائهشده توسط ماژول اعلان متریکس است.
نمای کلی
ماژول اعلان متریکس قابلیتهای زیر را فراهم میکند:
- اعلانهای پوش — ارسال اعلان به کاربران از طریق Firebase Cloud Messaging (FCM)
- پیامهای درونبرنامهای — نمایش پیامها بهصورت مستقیم در داخل اپلیکیشن شما
- مدیریت اعلانها — کنترل ترجیحات و تنظیمات مربوط به اعلانها
راهاندازی Firebase
1. دانلود google-services.json
۱. برای شروع فایل google-services.json را از کنسول فایربیس دانلود کرده و در پروژه قرار دهید
app/ directory of your Android project۲. سپس نیاز به وارد کردن Push Credentials یا فایل service-account.json پروژه فایربیس در پنل متریکس میباشد
۳. اپدیت فایل build.gradle:
فایل build.gradle لایه پروژه:
buildscript {
dependencies {
classpath 'com.google.gms:google-services:4.4.2'
}
}فایل build.gradle در سطح اپلیکیشن (Application-level):
plugins {
id 'com.android.application'
id 'com.google.gms.google-services'
}
dependencies {
// Notification module (automatically includes Firebase messaging)
implementation 'ir.metrix.notification:metrix:2.8.1'
}پیکربندی Firebase BOM (اختیاری)
اگر نیاز دارید که وابستگیهای Firebase را بهطور جداگانه مدیریت کنید، از Firebase BOM با استثنائات مناسب استفاده کنید:
نکته: اگر میخواهید وابستگیهای Firebase را در پروژه خود داشته باشید، مقادیر firebase-iid و firebase-messaging را حذف کنید.
مثال:
dependencies {
implementation platform('com.google.firebase:firebase-bom:32.0.0') {
exclude group: 'com.google.firebase', module: 'firebase-messaging'
exclude group: 'com.google.firebase', module: 'firebase-iid'
}
// Notification module provides firebase-messaging
implementation 'ir.metrix.notification:metrix:2.8.1'
}راهاندازی اعلان پوش
افزودن وابستگی ماژول اعلان
implementation 'ir.metrix.notification:metrix:2.8.2'پیادهسازی سرویس پیامرسانی Firebase
سرویس پیامرسانی Firebase را به فایل AndroidManifest.xml خود اضافه کنید:
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<application>
<!-- Firebase Cloud Messaging Service -->
<service
android:name="ir.metrix.notification.receivers.MetrixFirebaseMessagingService"
android:exported="false">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>
</application>
</manifest>شناسایی کاربران برای اعلانهای پوش
اعلانهای پوش تنها برای کاربران شناسایی شده ارسال میشوند. هنگامی که کاربر وارد سیستم میشود، شناسهی کاربری سفارشی (custom user ID) را تنظیم کنید:
// هنگام ورود کاربر
MetrixAnalytics.User.setUserCustomId("user@example.com");
// هنگام خروج کاربر
MetrixAnalytics.User.deleteUserCustomId();مهم: برای دریافت اعلانها توسط کاربران، ویژگی
customUserIdباید تنظیم شود. اعلانها فقط به کاربر شناساییشده فعلی ارسال میشوند.
درخواست خودکار مجوز اعلان
بهطور پیشفرض، هنگامی که ماژول notification مقداردهی اولیه میشود، کانال اعلان پیشفرض را ایجاد کرده و درخواست مجوز اعلان سیستمی را نمایش میدهد (که در Android 13+ / API 33 برای نمایش اعلانهای پوش مورد نیاز است).
برای غیرفعال کردن این رفتار خودکار و کنترل زمان نمایش این درخواست، این metadata را در تگ <application> اضافه کنید:
<manifest>
...
<application>
...
<meta-data
android:name="metrix_auto_notification_permission"
android:value="false" />
</application>
</manifest>اگر این مورد وجود نداشته باشد، مقدار پیشفرض true است. هنگامی که غیرفعال باشد، SDK از ایجاد کانال اعلان پیشفرض نیز صرف نظر میکند، بنابراین کانال را ایجاد کرده و مجوز را بهصورت دستی در زمان دلخواه خود درخواست کنید:
مدیریت اعلان پوش
فعال/غیرفعال کردن اعلانها
کنترل کنید که آیا کاربر اعلانها را دریافت کند یا خیر:
// فعال کردن اعلانها (پیشفرض: فعال)
MetrixNotification.enableNotifications();
// غیرفعال کردن اعلانها
MetrixNotification.disableNotifications();
// بررسی وضعیت اعلان
boolean isEnabled = MetrixNotification.isNotificationEnable();ایجاد کانال اعلان پیشفرض
برای Android 8.0 (API 26) و بالاتر، یک کانال اعلان پیشفرض ایجاد کنید:
MetrixNotification.createNotificationDefaultChannel();تنظیم Notification Listener
ایونت های اعلان را با یک listener سفارشی مدیریت کنید:
MetrixNotification.setNotificationListener(new MetrixNotificationListener() {
@Override
public void onNotificationReceived(PushNotification notification) {
// مدیریت اعلان دریافتی
Log.d("Notification", "Received: " + notification.getTitle());
}
@Override
public void onNotificationClicked(PushNotification notification) {
// مدیریت کلیک بر روی اعلان
Log.d("Notification", "Clicked: " + notification.getTitle());
}
@Override
public void onNotificationDismissed(PushNotification notification) {
// مدیریت رد کردن اعلان
Log.d("Notification", "Dismissed: " + notification.getTitle());
}
});بررسی وضعیت مقداردهی اولیه
اطمینان حاصل کنید که ماژول اعلان مقداردهی اولیه شده است:
boolean isInitialized = MetrixNotification.isInitialized();
// یا از یک listenerبرای تکمیل مقداردهی اولیه استفاده کنید
MetrixNotification.setInitializationCompleteListener(() -> {
Log.d("Notification", "Notification module initialized");
});پیامهای درونبرنامهای
پیامهای درونبرنامهای، پیامهای lightweight هستند که مستقیماً در داخل اپلیکیشن شما نمایش داده میشوند و نیازی به اعلانهای پوش ندارند. این پیامها میتوانند سفارشیسازی شوند، بر اساس اقدامات کاربر فعال شوند و شامل عناصر تعاملی باشند.
بارگذاری خودکار پیامهای درونبرنامهای
بهطور پیشفرض، پیامهای درونبرنامهای بهطور خودکار هنگام باز شدن برنامه بارگذاری و نمایش داده میشوند.
بارگذاری دستی پیامهای درونبرنامهای
برای غیرفعال کردن بارگذاری خودکار و فعال کردن دستی بارگذاری پیامها:
1. غیرفعال کردن بارگذاری خودکار در Manifest
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<application>
<!-- غیرفعال کردن بارگذاری خودکار پیامهای درونبرنامهای -->
<meta-data
android:name="metrix_auto_load_in_app_messages"
android:value="false" />
</application>
</manifest>2. فراخوانی loadInAppMessages() در زمان نیاز
// بارگذاری پیامها در یک صفحه خاص
public class MyActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// بارگذاری پیامهای درونبرنامهای برای این صفحه
MetrixNotification.loadInAppMessages();
}
}کنترل نمایش پیام درونبرنامهای
توقف و از سرگیری پیامرسانی درونبرنامهای:
// توقف پیامرسانی درونبرنامهای (مفید در حین بازی یا تعاملات مهم)
MetrixNotification.pauseInAppMessages(true);
// از سرگیری پیامرسانی درونبرنامهای
MetrixNotification.pauseInAppMessages(false);
// بررسی اینکه آیا پیامرسانی درونبرنامهای متوقف شده است یا خیر
boolean isPaused = MetrixNotification.isInAppMessagingPaused();موارد استفاده برای کنترل دستی
توقف در طول تعاملات مهم:
public class GameActivity extends AppCompatActivity {
private void startGame() {
// توقف پیامها در حین بازی فعال
MetrixNotification.pauseInAppMessages(true);
}
private void gameOver() {
// از سرگیری پیامها پس از پایان بازی
MetrixNotification.pauseInAppMessages(false);
// بارگذاری پیامها برای نمایش اعلانهای پاداش
MetrixNotification.loadInAppMessages();
}
}بارگذاری پیامها در صفحههای خاص:
public class PromotionalScreen extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.promotional_screen);
// بارگذاری پیامهای درونبرنامهای فقط در صفحه تبلیغاتی
MetrixNotification.loadInAppMessages();
}
}مجوزهای اعلان
مجوزهای زمان اجرا در Android 13+
برای Android 13 (API 33) و بالاتر، مجوز POST_NOTIFICATIONS را درخواست کنید:
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
</manifest>درخواست در زمان اجرا:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
if (ContextCompat.checkSelfPermission(this,
Manifest.permission.POST_NOTIFICATIONS)
!= PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.POST_NOTIFICATIONS},
PERMISSION_REQUEST_CODE);
}
}پیکربندی
ماژول اعلان از گزینههای پیکربندی مختلفی برای سفارشیسازی پیشرفته پشتیبانی میکند:
| کلید پیکربندی | نوع | پیشفرض | توضیحات |
|---|---|---|---|
notif_enabled | Boolean | true | آیا اعلانها بهصورت سراسری فعال هستند یا خیر |
notif_build_max_attempts | Integer | 8 | حداکثر تلاش برای ساخت یک اعلان |
notif_max_sound_duration | Time | 5 seconds | حداکثر مدت زمان برای صداهای سفارشی اعلان |
registration_backoff_policy | BackoffPolicy | EXPONENTIAL | سیاست تکرار ثبت توکن FCM |
registration_backoff_delay | Time | 30 seconds | تأخیر بین تلاشهای مجدد ثبت توکن FCM |
عیبیابی
اعلانها دریافت نمیشوند
دلایل:
- فایل
google-services.jsonبه دایرکتوریapp/اضافه نشده است. - اطلاعات اعتباری Firebase در پنل Metrix پیکربندی نشده است.
- شناسهی کاربری (customUserId) تنظیم نشده است.
- اعلانها از طریق
disableNotifications()غیرفعال شدهاند.
راهحلها:
- بررسی کنید که
google-services.jsonدر دایرکتوریapp/قرار دارد. - اطلاعات اعتباری Firebase را در تنظیمات پنل Metrix بررسی کنید.
- شناسهی کاربری را تنظیم کنید:
MetrixAnalytics.User.setUserCustomId("userId") - وضعیت اعلان را بررسی کنید:
MetrixNotification.isNotificationEnable()
پیامهای درونبرنامهای ظاهر نمیشوند
دلایل:
- بارگذاری خودکار بدون فراخوانی
loadInAppMessages()غیرفعال شده است. - پیامرسانی از طریق
pauseInAppMessages(true)متوقف شده است. - ماژول اعلان مقداردهی اولیه نشده است.
راهحلها:
MetrixNotification.loadInAppMessages()را در صفحه مورد نظر فراخوانی کنید.- بررسی کنید که آیا متوقف شده است:
MetrixNotification.isInAppMessagingPaused() - مقداردهی اولیه را تأیید کنید:
MetrixNotification.isInitialized()
سرویس Firebase پیدا نمیشود
دلایل:
MetrixFirebaseMessagingServiceدر Manifest تعریف نشده است.- پلاگین
com.google.gms:google-servicesاعمال نشده است.
راهحلها:
- سرویس را به
AndroidManifest.xmlاضافه کنید (به بخش راهاندازی سرویس پیامرسانی Firebase مراجعه کنید). - پلاگین
com.google.gms.google-servicesرا درbuild.gradleاعمال کنید.
کمبود مجوزها
علائم: هشدارهای Logcat در مورد مجوز POST_NOTIFICATIONS
راهحل:
- مجوز را به Manifest اضافه کنید:
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" /> - برای Android 13+، مجوز را در زمان اجرا درخواست کنید.
بهترین شیوهها
1. همیشه شناسهی کاربری را برای کاربران شناسایی شده تنظیم کنید
// بلافاصله پس از احراز هویت کاربر تنظیم شود
if (user.isAuthenticated()) {
MetrixAnalytics.User.setUserCustomId(user.getId());
}2. اعلانها را بهدرستی مدیریت کنید
MetrixNotification.setNotificationListener(new MetrixNotificationListener() {
@Override
public void onNotificationClicked(PushNotification notification) {
// به صفحه مربوطه هدایت کنید
Intent intent = new Intent(context, NotificationDetailActivity.class);
intent.putExtra("notification_id", notification.getId());
startActivity(intent);
}
});3. به ترجیحات کاربر احترام بگذارید
// به کاربران اجازه دهید اعلانها را از تنظیمات برنامه غیرفعال کنند
private void onNotificationSettingsClick() {
boolean currentStatus = MetrixNotification.isNotificationEnable();
MetrixNotification.enableNotifications(); // یا disableNotifications()
updateSettingsUI();
}4. پیامها را در زمانهای مناسب بارگذاری کنید
// در لحظات حساس بارگذاری نکنید
private void onLoadingScreen() {
MetrixNotification.pauseInAppMessages(true);
}
private void onLoadingComplete() {
MetrixNotification.pauseInAppMessages(false);
MetrixNotification.loadInAppMessages();
}5. اعلانها را در محیط توسعه تست کنید
// اضافه کردن مدیریت اعلان پوش برای تست
if (BuildConfig.DEBUG) {
MetrixNotification.setNotificationListener(new MetrixNotificationListener() {
@Override
public void onNotificationReceived(PushNotification notification) {
Log.d("NotifTest", "Test notification: " + notification.getTitle());
}
});
}