বিষয়বস্তুতে যান

Pushwoosh Android SDK সম্পর্কিত প্রায়শই জিজ্ঞাসিত প্রশ্নাবলী

Android পুশ টোকেন এবং HWID দেখতে কেমন?

Anchor link to

Android ডিভাইসের পুশ টোকেন দৈর্ঘ্যে ভিন্ন (২৫৫ অক্ষরের কম) এবং APA91b দিয়ে শুরু হয়, উদাহরণস্বরূপ:

APA91bFoi3lMMre9G3XzR1LrF4ZT82_15MsMdEICogXSLB8-MrdkRuRQFwNI5u8Dh0cI90ABD3BOKnxkEla8cGdisbDHl5cVIkZah5QUhSAxzx4Roa7b4xy9tvx9iNSYw-eXBYYd8k1XKf8Q_Qq1X9-x-U-Y79vdPq

টোকেনগুলিতে প্রায়শই APA91b এর আগে একটি কোলন-দ্বারা-বিভক্ত উপসর্গ থাকে, উদাহরণস্বরূপ: eQnyCE6ULAQ:APA91bGrh4ya3b_owo9tshZNVAGhZdGMGb3sA5HbM...

Pushwoosh HWID হিসাবে UUID ব্যবহার করে, অর্থাৎ এলোমেলোভাবে তৈরি ৩২টি আলফানিউমেরিক্যাল অক্ষরের স্ট্রিং: 123e4567-e89b-12d3-a456-426655440000

আমি কীভাবে আমার Android ডিভাইসের পুশ টোকেন পেতে পারি?

Anchor link to

আপনি কনসোল লগে আপনার Android ডিভাইসের পুশ টোকেন পেতে পারেন। Android Studio-তে logcat টুল ব্যবহার করুন।

%USERPROFILE%\AppData\Local\Android\sdk\tools\monitor.bat-এ monitor.bat খুলুন, আপনার ডিভাইসটি পিসিতে সংযুক্ত করুন এবং Android সেটিংসে USB ডিবাগিংয়ের অনুমতি দিন। আপনার ডিভাইসে আপনার অ্যাপ্লিকেশনটি চালান। /registerDevice সনাক্ত করুন, পরে Test Devices-এ ব্যবহার করার জন্য আপনার ডিভাইসের পুশ টোকেনটি খুঁজুন।

Android Studio-তে পুশ টোকেন রেজিস্ট্রেশন তথ্য সহ logcat আউটপুট দেখানো স্ক্রিনশট

কোন অনুমতিগুলো প্রয়োজনীয় এবং কোনগুলো ঐচ্ছিক?

Anchor link to

একটি Android ডিভাইসে ইনস্টল করা হলে, অ্যাপ্লিকেশনটি Pushwoosh SDK-এর সাথে সম্পর্কিত নিম্নলিখিত অনুমতিগুলির জন্য জিজ্ঞাসা করবে:

<!-- FCM connects to Firebase Services. -->
<uses-permission android:name="android.permission.INTERNET"/>
<!-- Keeps the processor from sleeping when a message is received. -->
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<!-- This permission is used to determine whether the device can access the network. -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<!-- This app has permission to register and receive data message. -->
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />

আমাদের SDK ছবি, ডিভাইসের পরিচিতি ইত্যাদি অ্যাক্সেস করার অনুমতি চায় না।

আমি কীভাবে একটি UserID সেট করব?

Anchor link to

আপনি একটি ব্যবহারকারী শনাক্তকারী (UserID) সেট করতে পারেন, যা একটি Facebook ID, ব্যবহারকারীর নাম, ইমেল বা অন্য কোনো অনন্য ব্যবহারকারী আইডি হতে পারে। এটি আপনাকে একই ব্যবহারকারীর সাথে যুক্ত একাধিক ডিভাইস জুড়ে ডেটা এবং ইভেন্টগুলি মেলাতে দেয়। UserID সেট করতে, setUserId পদ্ধতিটি কল করুন।

উদাহরণ

Pushwoosh.getInstance().setUserId("testUser");

Android গ্রাহকদের মোট সংখ্যা কতটা সঠিক?

Anchor link to

Pushwoosh FCM থেকে “NotRegistered” প্রতিক্রিয়া পাওয়ার পরে ডাটাবেস থেকে আনসাবস্ক্রাইব করা Android ডিভাইসগুলি পরিষ্কার করে, যা একটি নির্দিষ্ট ডিভাইসে পৌঁছানোর দ্বিতীয় প্রচেষ্টার পরে ফেরত দেওয়া হতে পারে। এর মানে হল যে আপনাকে একটি আনসাবস্ক্রাইব করা ডিভাইসে ২টি পুশ পাঠাতে হবে যাতে এটি ডাটাবেস থেকে সরানো হয়।

FCM ডকুমেন্টেশনে বর্ণিত সবচেয়ে সাধারণ পরিস্থিতিটি নিম্নরূপ:

  1. আপনার গ্রাহক অ্যাপটি আনইনস্টল করে।
  2. Pushwoosh FCM সার্ভারে একটি বার্তা পাঠায়।
  3. FCM সার্ভার বার্তাটি আপনার ব্যবহারকারীর ডিভাইসে পাঠায়।
  4. ডিভাইসে থাকা FCM ক্লায়েন্ট বার্তাটি গ্রহণ করে এবং সনাক্ত করে যে আপনার অ্যাপ্লিকেশনটি আনইনস্টল করা হয়েছে; সনাক্তকরণের বিবরণ অ্যাপটি যে প্ল্যাটফর্মে চলছে তার উপর নির্ভর করে।
  5. ডিভাইসে থাকা FCM ক্লায়েন্ট FCM সার্ভারকে জানায় যে অ্যাপটি আনইনস্টল করা হয়েছে।
  6. FCM সার্ভার রেজিস্ট্রেশন আইডিটি মুছে ফেলার জন্য চিহ্নিত করে।
  7. Pushwoosh FCM-এ আরেকটি বার্তা পাঠায়।
  8. FCM একটি NotRegistered বার্তা ফেরত দেয়।
  9. Pushwoosh আপনার ব্যবহারকারী বেস থেকে পুশ টোকেনটি সরিয়ে দেয়।

FCM থেকে রেজিস্ট্রেশন আইডি সম্পূর্ণরূপে মুছে ফেলতে কিছুটা সময় লাগতে পারে। তাই উপরের ৭ নং ধাপে পাঠানো একটি বার্তা একটি বৈধ বার্তা আইডি হিসাবে প্রতিক্রিয়া পেতে পারে, যদিও বার্তাটি ক্লায়েন্ট অ্যাপে বিতরণ করা হবে না।

আমি কি Android-এ পাঠানো পুশগুলিতে HTML ট্যাগ ব্যবহার করতে পারি?

Anchor link to

হ্যাঁ, Android-এ আপনি একটি পুশের চেহারা পরিবর্তন করতে নিম্নলিখিত HTML ট্যাগগুলি ব্যবহার করতে পারেন:

<span style="color: green;"><b><i><span style="text-decoration: underline;">Hello world!
Hello hi hey</span></i></b></span>

এই HTML ট্যাগগুলি Message ইনপুট ফিল্ডে রাখুন, এবং API অনুরোধেও ব্যবহার করুন। কিছু Android ডিভাইস এই HTML ট্যাগগুলি সঠিকভাবে প্রক্রিয়া করতে ব্যর্থ হতে পারে, তবে বেশিরভাগ ডিভাইস বিন্যাস সঠিকভাবে প্রদর্শন করে।

Android Lollipop (এবং পরবর্তী সংস্করণগুলিতে) একটি নোটিফিকেশন আইকন কীভাবে সেট করবেন?

Anchor link to

Android Lollipop-এ আইকনগুলি শুধুমাত্র সাদা রঙে পরিবর্তন করা হয়েছিল। অতএব, যদি আপনি আপনার AndroidManifest.xml ফাইলে targetSdkVersion >= 21 নির্বাচন করেন, তাহলে Android শুধুমাত্র আইকনের আলফা-চ্যানেল ব্যবহার করবে।
এই আচরণের বিষয়ে আরও জানতে Android ডকুমেন্টেশন দেখুন।

সিস্টেম অ্যাকশন আইকন এবং প্রধান নোটিফিকেশন আইকনের সমস্ত নন-আলফা চ্যানেল উপেক্ষা করে। ধরে নিন এই আইকনগুলি শুধুমাত্র আলফা-ভিত্তিক হবে। সিস্টেম নোটিফিকেশন আইকনগুলি সাদা রঙে এবং অ্যাকশন আইকনগুলি গাঢ় ধূসর রঙে আঁকে। এটি Pushwoosh SDK-এর নিয়ন্ত্রণের বাইরে

১. Android নির্দেশিকা অনুযায়ী নোটিফিকেশন আইকন তৈরি করুন। ডকুমেন্টেশন অনুযায়ী, সিস্টেম সমস্ত রঙ উপেক্ষা করবে।

২. আইকনটির নাম pw_notification.png দিন এবং এটি res/drawable ফোল্ডারে রাখুন। Pushwoosh SDK এই আইকনটিকে নোটিফিকেশনের জন্য ডিফল্ট হিসাবে ব্যবহার করবে।

৩. বিকল্পভাবে, আপনি রিমোট API ব্যবহার করতে পারেন এবং "android_icon" প্যারামিটারের মান আইকন চিত্রে (ফাইলের এক্সটেনশন ছাড়া) সেট করতে পারেন।

অন্যান্য FCM পরিষেবাগুলির সাথে Pushwoosh SDK ব্যবহার করা

Anchor link to

আপনি Pushwoosh-কে অন্যান্য SDK-এর পাশাপাশি ব্যবহার করতে পারেন যা পুশ মেসেজিংয়ের জন্য FCM ব্যবহার করে। এটি করার জন্য, পরিষেবাগুলির মধ্যে ইভেন্টগুলি বিতরণ করার জন্য একটি রাউটার পরিষেবা তৈরি করুন। প্রথমে, প্রধান Pushwoosh মডিউলের পাশাপাশি pushwoosh-firebase নির্ভরতা যোগ করুন:

build.gradle
implementation 'com.pushwoosh:pushwoosh-firebase:6.0.3'

রাউটিং ক্লাস তৈরি করুন:

import com.pushwoosh.firebase.PushwooshFcmHelper;
class FirebaseMessagingRouterService : FirebaseMessagingService() {
override fun onNewToken(token: String?) {
super.onNewToken(token)
PushwooshFcmHelper.onTokenRefresh(token)
sendTokenToAnotherService(token)
}
override fun onMessageReceived(remoteMessage: RemoteMessage) {
if (PushwooshFcmHelper.isPushwooshMessage(remoteMessage)) {
//this is a Pushwoosh push, SDK will handle it automatically
PushwooshFcmHelper.onMessageReceived(this, remoteMessage)
} else {
//this is not a Pushwoosh push, you should handle it by yourself
dispatchNonPushwooshMessage(remoteMessage);
}
}
private fun dispatchNonPushwooshMessage(remoteMessage: RemoteMessage) {
// Implement your push handling logics here
}
}

আপনার AndroidManifest.xml-এ রাউটারগুলি নিবন্ধন করুন:

AndroidManifest.xml
<service
android:name=".FirebaseMessagingRouterService">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT"/>
</intent-filter>
</service>

LeakCanary বা AppMetrica লাইব্রেরির সাথে Pushwoosh ব্যবহার করা

Anchor link to

যখন আপনি LeakCanary, AppMetrica বা অন্যান্য অ্যানালিটিক্স টুল সংহত করেন, তখন এই লাইব্রেরিগুলি একটি নতুন প্রক্রিয়া শুরু করে, অ্যাপের নতুন ইনস্ট্যান্স তৈরি করে। যেহেতু আপনি অন্য প্রক্রিয়ায় পুশ নোটিফিকেশন শুনতে পারবেন না, এর ফলে java.lang.NullPointerException থ্রো হয়।

যদি আপনি Application.onCreate() এর ভিতরে registerForPushNotifications কল করেন, তাহলে আপনার পরীক্ষা করা উচিত যে আপনি অ্যাপ্লিকেশনের প্রধান প্রক্রিয়ায় আছেন কিনা। এই পরীক্ষাটি করার জন্য নিম্নলিখিত কোডটি ব্যবহার করুন:

List<ActivityManager.RunningAppProcessInfo> runningAppProcesses = ((ActivityManager) getSystemService(Context.ACTIVITY_SERVICE)).getRunningAppProcesses();
if (runningAppProcesses != null && runningAppProcesses.size() != 0) {
for (ActivityManager.RunningAppProcessInfo runningAppProcessInfo : runningAppProcesses) {
boolean isCurrentProcess = runningAppProcessInfo.pid == android.os.Process.myPid();
boolean isMainProcessName = getPackageName().equals(runningAppProcessInfo.processName);
if (isCurrentProcess && isMainProcessName) {
Pushwoosh.getInstance().registerForPushNotifications(...);
break;
}
}
}

স্থানীয়ভাবে একটি ডিভাইস থেকে নির্দিষ্ট প্রাপ্ত নোটিফিকেশন মুছে ফেলা

Anchor link to

যদি আপনি আপনার অ্যাপ্লিকেশনের ভিতরে একটি নির্দিষ্ট ক্রিয়া সম্পাদন করার সময় একটি অপ্রাসঙ্গিক পুশ সরাতে চান, তাহলে আপনি নিম্নলিখিত পদ্ধতিটি ব্যবহার করতে পারেন:

MainActivity.java
public class MainActivity extends AppCompatActivity {
List<NotificationCreatedEvent> savedPushes = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Pushwoosh.getInstance().registerForPushNotifications();
PushwooshNotificationSettings.setMultiNotificationMode(true);
findViewById(R.id.clear_button).setOnClickListener( v -> {
cancelPushes();
});
EventBus.subscribe(NotificationCreatedEvent.class, event -> {
try {
if (event.getMessage().getCustomData() == null)
return;
//cancel pushes only with a specific flag
if (new JSONObject(event.getMessage().getCustomData()).getBoolean("cancel")) {
savedPushes.add(event);
}
} catch (JSONException e) {
}
});
}
private void cancelPushes() {
NotificationManager manager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
if (manager == null) {
return;
}
for (NotificationCreatedEvent event : savedPushes) {
manager.cancel(event.getMessageTag(), event.getMessageId());
}
}
}

আমাদের সাথে আপনার মতামত শেয়ার করুন

Anchor link to

আপনার মতামত আমাদের একটি উন্নত অভিজ্ঞতা তৈরি করতে সাহায্য করে। SDK ইন্টিগ্রেশন প্রক্রিয়ার সময় যদি আপনি কোনো অসুবিধার সম্মুখীন হন, তাহলে এই ফর্মের মাধ্যমে আমাদের সাথে আপনার চিন্তাভাবনা শেয়ার করুন।