জুলাই 2019 হিসাবে কাজ করা
অ্যান্ড্রয়েড সংকলনএসডিকি ভার্সন 28, বিল্ডটুলস ভার্সন 28.0.3 এবং ফায়ারবেস-বার্তাপ্রেরণ: 19.0.1
অন্যান্য স্ট্যাকওভারফ্লো প্রশ্ন এবং উত্তরগুলির অনেকগুলি গবেষণার পরে এবং অগণিত পুরানো সমাধানগুলির চেষ্টা করার পরে, এই 3 টি পরিস্থিতিতে এই সমাধান বিজ্ঞপ্তিগুলি প্রদর্শন করতে সক্ষম হয়েছিল:
- অ্যাপটি অগ্রভাগে রয়েছে:
নোটিফিকেশনটি আমার মাইফায়ারবেসমেসেজিং সার্ভিস ক্লাসে onMessageReceed পদ্ধতি দ্বারা প্রাপ্ত হয়েছে
- অ্যাপ্লিকেশনটি হত্যা করা হয়েছে (এটি পটভূমিতে চলছে না):
বিজ্ঞপ্তিটি এফসিএম দ্বারা স্বয়ংক্রিয়ভাবে বিজ্ঞপ্তি ট্রেতে প্রেরণ করা হয়। ব্যবহারকারী বিজ্ঞপ্তিটি স্পর্শ করলে অ্যাপ্লিকেশনটি অ্যানড্রইডের ক্রিয়াকলাপটিকে কল করে ম্যানিফেস্টে অ্যানড্রয়েড। আপনি onCreate () পদ্ধতিতে getIntent ()। GetExtras () ব্যবহার করে বিজ্ঞপ্তির ডেটা অংশটি পেতে পারেন।
- অ্যাপটি ব্যাকগ্রাউন্ডে রয়েছে:
বিজ্ঞপ্তিটি এফসিএম দ্বারা স্বয়ংক্রিয়ভাবে বিজ্ঞপ্তি ট্রেতে প্রেরণ করা হয়। ব্যবহারকারী নোটিফিকেশন স্পর্শ করলে অ্যাপ্লিকেশনটিকে ম্যানিফেস্টে অ্যানড্রয়েড.ইনটিটি.এই.এইচএইচআরএর ক্রিয়াকলাপটি চালু করে অগ্রভাগে আনা হয়। যেহেতু আমার অ্যাপ্লিকেশনটিতে সেই ক্রিয়াকলাপে লঞ্চমোড = "সিঙ্গলটপ" রয়েছে, তাই অনক্রিট () পদ্ধতিটি বলা হয় না কারণ ইতিমধ্যে একই শ্রেণীর একটি ক্রিয়াকলাপ তৈরি করা হয়েছে, পরিবর্তে সেই শ্রেণীর অন্নইভেন্ট () পদ্ধতিটি কল করা হয় এবং আপনি সেই অংশটির ডেটা অংশ পান Intent.getExtras () ব্যবহার করে সেখানে বিজ্ঞপ্তি।
পদক্ষেপ: 1- আপনি যদি আপনার অ্যাপ্লিকেশনটির মূল ক্রিয়াকলাপটি এভাবে সংজ্ঞায়িত করেন:
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:largeHeap="true"
android:screenOrientation="portrait"
android:launchMode="singleTop">
<intent-filter>
<action android:name=".MainActivity" />
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
2- আপনার মেইনঅ্যাক্টিভিটি.ক্লাসের অনক্রিট () পদ্ধতিতে এই লাইনগুলি যুক্ত করুন
Intent i = getIntent();
Bundle extras = i.getExtras();
if (extras != null) {
for (String key : extras.keySet()) {
Object value = extras.get(key);
Log.d(Application.APPTAG, "Extras received at onCreate: Key: " + key + " Value: " + value);
}
String title = extras.getString("title");
String message = extras.getString("body");
if (message!=null && message.length()>0) {
getIntent().removeExtra("body");
showNotificationInADialog(title, message);
}
}
এবং একই মেইনএ্যাকটিভিটি.ক্লাসে এই পদ্ধতিগুলি:
@Override
public void onNewIntent(Intent intent){
//called when a new intent for this class is created.
// The main case is when the app was in background, a notification arrives to the tray, and the user touches the notification
super.onNewIntent(intent);
Log.d(Application.APPTAG, "onNewIntent - starting");
Bundle extras = intent.getExtras();
if (extras != null) {
for (String key : extras.keySet()) {
Object value = extras.get(key);
Log.d(Application.APPTAG, "Extras received at onNewIntent: Key: " + key + " Value: " + value);
}
String title = extras.getString("title");
String message = extras.getString("body");
if (message!=null && message.length()>0) {
getIntent().removeExtra("body");
showNotificationInADialog(title, message);
}
}
}
private void showNotificationInADialog(String title, String message) {
// show a dialog with the provided title and message
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle(title);
builder.setMessage(message);
builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
dialog.cancel();
}
});
AlertDialog alert = builder.create();
alert.show();
}
3- মাইফায়ারবেস ক্লাসটি এভাবে তৈরি করুন:
package com.yourcompany.app;
import android.content.Intent;
import android.util.Log;
import com.google.firebase.messaging.FirebaseMessagingService;
import com.google.firebase.messaging.RemoteMessage;
public class MyFirebaseMessagingService extends FirebaseMessagingService {
public MyFirebaseMessagingService() {
super();
}
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
Log.d(Application.APPTAG, "myFirebaseMessagingService - onMessageReceived - message: " + remoteMessage);
Intent dialogIntent = new Intent(this, NotificationActivity.class);
dialogIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
dialogIntent.putExtra("msg", remoteMessage);
startActivity(dialogIntent);
}
}
4- নতুন ক্লাস নোটিফিকেশনঅ্যাক্টিভিটি.ক্লাস তৈরি করুন:
package com.yourcompany.app;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.util.Log;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.view.ContextThemeWrapper;
import com.google.firebase.messaging.RemoteMessage;
public class NotificationActivity extends AppCompatActivity {
private Activity context;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
context = this;
Bundle extras = getIntent().getExtras();
Log.d(Application.APPTAG, "NotificationActivity - onCreate - extras: " + extras);
if (extras == null) {
context.finish();
return;
}
RemoteMessage msg = (RemoteMessage) extras.get("msg");
if (msg == null) {
context.finish();
return;
}
RemoteMessage.Notification notification = msg.getNotification();
if (notification == null) {
context.finish();
return;
}
String dialogMessage;
try {
dialogMessage = notification.getBody();
} catch (Exception e){
context.finish();
return;
}
String dialogTitle = notification.getTitle();
if (dialogTitle == null || dialogTitle.length() == 0) {
dialogTitle = "";
}
AlertDialog.Builder builder = new AlertDialog.Builder(new ContextThemeWrapper(context, R.style.myDialog));
builder.setTitle(dialogTitle);
builder.setMessage(dialogMessage);
builder.setPositiveButton(getResources().getString(R.string.accept), new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
dialog.cancel();
}
});
AlertDialog alert = builder.create();
alert.show();
}
}
5- আপনার ট্যাগগুলির মধ্যে আপনার অ্যাপ্লিকেশন ম্যানিফেস্টে এই লাইনগুলি যুক্ত করুন
<service
android:name=".MyFirebaseMessagingService"
android:exported="false">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>
<meta-data android:name="com.google.firebase.messaging.default_notification_channel_id" android:value="@string/default_notification_channel_id"/>
<activity android:name=".NotificationActivity"
android:theme="@style/myDialog"> </activity>
<meta-data
android:name="com.google.firebase.messaging.default_notification_icon"
android:resource="@drawable/notification_icon"/>
<meta-data
android:name="com.google.firebase.messaging.default_notification_color"
android:resource="@color/color_accent" />
Your- আপনার অ্যাপ্লিকেশন.জবা অনক্রিট () পদ্ধতিতে বা মেইনএকটিভিটি.ক্লাস অনক্রিট () পদ্ধতিতে এই লাইনগুলি যুক্ত করুন:
// notifications channel creation
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
// Create channel to show notifications.
String channelId = getResources().getString("default_channel_id");
String channelName = getResources().getString("General announcements");
NotificationManager notificationManager = getSystemService(NotificationManager.class);
notificationManager.createNotificationChannel(new NotificationChannel(channelId,
channelName, NotificationManager.IMPORTANCE_LOW));
}
সম্পন্ন.
3 টি উল্লিখিত দৃশ্যে এটির জন্য ভাল কাজ করার জন্য আপনাকে ফায়ারবেস ওয়েব কনসোল থেকে নিম্নলিখিত উপায়ে বিজ্ঞপ্তিটি পাঠাতে হবে:
বিজ্ঞপ্তি বিভাগে: বিজ্ঞপ্তি শিরোনাম = বিজ্ঞপ্তি সংলাপে প্রদর্শিত শিরোনাম (alচ্ছিক) বিজ্ঞপ্তি পাঠ্য = ব্যবহারকারীর কাছে প্রদর্শিত বার্তা (প্রয়োজনীয়) তারপরে লক্ষ্য বিভাগে: অ্যাপ = আপনার অ্যান্ড্রয়েড অ্যাপ্লিকেশন এবং অতিরিক্ত বিকল্প বিভাগে: অ্যান্ড্রয়েড বিজ্ঞপ্তি চ্যানেল = ডিফল্ট_চ্যানেল_আইড কাস্টম ডেটা কী: শিরোনাম মান: (বিজ্ঞপ্তি বিভাগের শিরোনাম ক্ষেত্রের তুলনায় এখানে একই পাঠ্য) কী: দেহের মান: (বিজ্ঞপ্তি বিভাগের বার্তা ক্ষেত্রের তুলনায় এখানে একই পাঠ্য) কী: ক্লিক_অ্যাকশন মান: .আরঅ্যাক্টিভিটি সাউন্ড = অক্ষম
মেয়াদ শেষ হয় = 4 সপ্তাহ
গুগল প্লে দিয়ে আপনি এপিউলে 28 এর মাধ্যমে এমুলেটরটিতে এটি ডিবাগ করতে পারেন।
শুভ কোডিং!
Not getting messages here? See why this may be: goo.gl/39bRNJ
। সমাধানটি, নীচের উত্তরগুলির মতো, বার্তাগুলিতে নোটিফিকেশন এবং ডেটা