অ্যান্ড্রয়েড SDK বেসিক ইন্টিগ্রেশন গাইড
এই বিভাগে আপনার অ্যান্ড্রয়েড অ্যাপ্লিকেশনে পুশউশ SDK কীভাবে ইন্টিগ্রেট করবেন সে সম্পর্কে তথ্য রয়েছে।
পূর্বশর্ত
Anchor link toআপনার অ্যাপে পুশউশ অ্যান্ড্রয়েড SDK ইন্টিগ্রেট করার জন্য, আপনার নিম্নলিখিত জিনিসগুলির প্রয়োজন হবে:
ইন্টিগ্রেশন ধাপ
Anchor link to১. ফায়ারবেস ক্লাউড মেসেজিং সেট আপ করুন
Anchor link toপ্রথমে, আপনার অ্যান্ড্রয়েড প্রজেক্টটি ফায়ারবেসের সাথে সংযুক্ত করুন:
- অ্যান্ড্রয়েড স্টুডিওতে আপনার প্রজেক্ট খুলুন
- Tools > Firebase > Cloud Messaging-এ নেভিগেট করুন এবং “Set up Firebase Cloud Messaging”-এ ক্লিক করুন
- উইজার্ডের নির্দেশাবলী অনুসরণ করুন। চূড়ান্ত ধাপে, উইজার্ড আপনার
build.gradleফাইলগুলিতে প্রয়োজনীয় ডিপেন্ডেন্সি যোগ করবে
২. পুশউশ SDK যোগ করুন
Anchor link toআপনার অ্যাপ্লিকেশনের build.gradle-এ পুশউশ লাইব্রেরি ডিপেন্ডেন্সি যোগ করুন:
implementation 'com.pushwoosh:pushwoosh-firebase:6.+'”+” চিহ্নটিকে পুশউশ অ্যান্ড্রয়েড SDK-এর বর্তমান সংস্করণ দিয়ে প্রতিস্থাপন করুন
৩. AndroidManifest.xml-এ পুশউশ মেটাডেটা যোগ করুন
Anchor link toআপনার AndroidManifest.xml ফাইলটি খুলুন এবং <application> ট্যাগের ভিতরে নিম্নলিখিত মেটাডেটা যোগ করুন:
<meta-data android:name="com.pushwoosh.appid" android:value="__YOUR_APP_CODE__" /><meta-data android:name="com.pushwoosh.senderid" android:value="@string/fcm_sender_id" /><meta-data android:name="com.pushwoosh.apitoken" android:value="__YOUR_DEVICE_API_TOKEN__" />যেখানে:
com.pushwoosh.appidহলো আপনার পুশউশ অ্যাপ্লিকেশন কোডcom.pushwoosh.apitokenহলো আপনার পুশউশ ডিভাইস API টোকেন
গুরুত্বপূর্ণ: আপনার পুশউশ কন্ট্রোল প্যানেলে সঠিক অ্যাপে টোকেনটিকে অ্যাক্সেস দিতে ভুলবেন না। আরও জানুন
com.pushwoosh.senderid সেট করতে, আপনার প্রজেক্টের res/values/strings.xml ফাইলে fcm_sender_id যোগ করুন:
<resources> <string name="fcm_sender_id">__YOUR_FCM_SENDER_ID__</string></resources>৪. ইনিশিয়ালাইজেশন কোড
Anchor link toপুশ নোটিফিকেশনের জন্য রেজিস্টার করতে আপনার ইনিশিয়ালাইজেশন লজিকে এই কোডটি যোগ করুন:
Pushwoosh.getInstance().registerForPushNotifications()৫. প্রজেক্টটি চালান
Anchor link to১. প্রজেক্টটি বিল্ড এবং রান করুন। ২. পুশউশ কন্ট্রোল প্যানেলে যান এবং একটি পুশ নোটিফিকেশন পাঠান। ৩. আপনার অ্যাপে নোটিফিকেশনটি দেখতে পাওয়া উচিত।
বর্ধিত ইন্টিগ্রেশন
Anchor link toএই পর্যায়ে, আপনি ইতিমধ্যে SDK ইন্টিগ্রেট করেছেন এবং পুশ নোটিফিকেশন পাঠাতে ও গ্রহণ করতে পারেন। এখন, চলুন মূল কার্যকারিতা অন্বেষণ করা যাক
পুশ নোটিফিকেশন
Anchor link toপুশউশ SDK-তে, পুশ নোটিফিকেশন পরিচালনা করার জন্য দুটি কলব্যাক ডিজাইন করা হয়েছে:
onMessageReceived: এই মেথডটি কল করা হয় যখন একটি পুশ নোটিফিকেশন পাওয়া যায়।onMessageOpened: এই মেথডটি কল করা হয় যখন ব্যবহারকারী নোটিফিকেশনের সাথে ইন্টারঅ্যাক্ট করে (খোলে)
এই কলব্যাকগুলি ডেভেলপারদের তাদের অ্যাপ্লিকেশনের মধ্যে পুশ নোটিফিকেশন গ্রহণ এবং ব্যবহারকারীর ইন্টারঅ্যাকশন পরিচালনা করতে সক্ষম করে:
<meta-data android:name="com.pushwoosh.notification_service_extension" android:value="com.your.package.YourNotificationServiceExtension" />import android.util.Logimport com.pushwoosh.notification.NotificationServiceExtensionimport com.pushwoosh.notification.PushMessage
class YourNotificationServiceExtension : NotificationServiceExtension() {
override fun onMessageReceived(data: PushMessage): Boolean { Log.d("Pushwoosh", "onMessageReceived: ${data.toJson()}") return false }
override fun onMessageOpened(message: PushMessage) { Log.d("Pushwoosh", "onMessageOpened: ${message.toJson()}") }
}import android.util.Log;import com.pushwoosh.notification.NotificationServiceExtension;import com.pushwoosh.notification.PushMessage;
public class YourNotificationServiceExtensionJava extends NotificationServiceExtension {
@Override public boolean onMessageReceived(PushMessage data) { Log.d("Pushwoosh", "onMessageReceived: " + data.toJson()); return false; }
@Override public void onMessageOpened(PushMessage message) { Log.d("Pushwoosh", "onMessageOpened: " + message.toJson()); }}ব্যবহারকারী কনফিগারেশন
Anchor link toস্বতন্ত্র ব্যবহারকারীর আচরণ এবং পছন্দের উপর ফোকাস করে, আপনি ব্যক্তিগতকৃত সামগ্রী সরবরাহ করতে পারেন, যা ব্যবহারকারীর সন্তুষ্টি এবং আনুগত্য বৃদ্ধি করে
import com.pushwoosh.Pushwooshimport com.pushwoosh.tags.TagsBundleimport java.util.Date
class Registration {
public void afterUserLogin(User user) { Pushwoosh pushwoosh = Pushwoosh.getInstance()
// Set user ID if (user.getUserId() != null) { pushwoosh.setUserId(user.getUserId()) }
// Set user email if (user.getEmail() != null) { pushwoosh.setEmail(user.getEmail()) }
// Setting additional user information as tags for Pushwoosh if (user.getUserDetails() != null) { val details = user.getUserDetails() val tagsBuilder = TagsBundle.Builder()
if (details.getAge() != null) { tagsBuilder.putInt("age", details.getAge()) }
if (details.getUserName() != null) { tagsBuilder.putString("name", details.getUserName()) }
if (details.lastLoginDate() != null) { tagsBuilder.putDate("last_login", details.getLastLoginDate()) }
// Build and send tags val tags = tagsBuilder.build() if (!tags.isEmpty()) { pushwoosh.setTags(tags) } } }}import com.pushwoosh.Pushwoosh;import com.pushwoosh.tags.TagsBundle;import java.util.Date;
public class Registration {
public void afterUserLogin(User user) { Pushwoosh pushwoosh = Pushwoosh.getInstance();
// Set user ID if (user.getUserId() != null) { pushwoosh.setUserId(user.getUserId()); }
// Set user email if (user.getEmail() != null) { pushwoosh.setEmail(user.getEmail()); }
// Set user SMS number if (user.getSmsNumber() != null) { pushwoosh.registerSMSNumber(user.getSmsNumber()); }
// Set user WhatsApp number if (user.getWhatsAppNumber() != null) { pushwoosh.registerWhatsappNumber(user.getWhatsAppNumber()); }
// Setting additional user information as tags for Pushwoosh if (user.getUserDetails() != null) { UserDetails details = user.getUserDetails(); TagsBundle.Builder tagsBuilder = new TagsBundle.Builder();
if (details.getAge() != null) { tagsBuilder.putInt("age", details.getAge()); }
if (details.getUserName() != null) { tagsBuilder.putString("name", details.getUserName()); }
if (details.getLastLoginDate() != null) { tagsBuilder.putDate("last_login", details.getLastLoginDate()); }
// Build and send tags TagsBundle tags = tagsBuilder.build(); if (!tags.isEmpty()) { pushwoosh.setTags(tags); } } }}ট্যাগ
Anchor link toট্যাগ হলো ব্যবহারকারী বা ডিভাইসে নির্ধারিত কী-ভ্যালু পেয়ার, যা পছন্দ বা আচরণের মতো অ্যাট্রিবিউটের উপর ভিত্তি করে সেগমেন্টেশন করতে দেয়, যা টার্গেটেড মেসেজিং সক্ষম করে।
import com.pushwoosh.Pushwooshimport com.pushwoosh.tags.TagsBundleimport java.util.List
class UpdateUser { public void afterUserUpdateProfile(User user) { val pushwoosh = Pushwoosh.getInstance() val tagsBuilder = TagsBundle.Builder()
// Set list of favorite categories if (user.favoriteCategories != null && user.favoriteCategories.isNotEmpty()) { tagsBuilder.putList("favorite_categories", user.getFavoriteCategories()) }
// Set payment information tagsBuilder.putBoolean("is_subscribed", user.isSubscribed()) tagsBuilder.putString("payment_status", user.getPaymentStatus()) tagsBuilder.putString("billing_address", user.getBillingAddress())
// Build and send tags pushwoosh.setTags(tagsBuilder.build()) }}import com.pushwoosh.Pushwoosh;import com.pushwoosh.tags.TagsBundle;import java.util.List;
public class UpdateUser { public void afterUserUpdateProfile(User user) { Pushwoosh pushwoosh = Pushwoosh.getInstance(); TagsBundle.Builder tagsBuilder = TagsBundle.Builder();
// Set list of favorite categories if (user.getFavoriteCategories() != null && !user.getFavoriteCategories().isEmpty()) { tagsBuilder.putList("favorite_categories", user.getFavoriteCategories()); }
// Set payment information tagsBuilder.putBoolean("is_subscribed", user.isSubscribed()); tagsBuilder.putString("payment_status", user.getPaymentStatus()); tagsBuilder.putString("billing_address", user.getBillingAddress());
// Build and send tags pushwoosh.setTags(tagsBuilder.build()); }}ইভেন্ট
Anchor link toইভেন্ট হলো অ্যাপের মধ্যে নির্দিষ্ট ব্যবহারকারীর ক্রিয়া বা ঘটনা যা আচরণ বিশ্লেষণ করতে এবং সংশ্লিষ্ট বার্তা বা ক্রিয়া ট্রিগার করতে ট্র্যাক করা যেতে পারে
import com.pushwoosh.Pushwooshimport com.pushwoosh.inapp.InAppManagerimport com.pushwoosh.tags.TagsBundleimport java.util.Date
class Registration {
public void afterUserLogin(User user) { if (user.getUserName() != null && user.getLastLoginDate() != null) { val attributes = TagsBundle.Builder() .putString("name", user.getUserName()) .putDate("last_login", user.getLastLoginDate()) .build()
InAppManager.getInstance().postEvent("login", attributes) } }
public void afterUserPurchase(User user, Product product) { Pushwoosh pushwoosh = Pushwoosh.getInstance()
// Track purchase event val purchaseAttributes = TagsBundle.Builder() .putString("product_id", product.getId()) .putString("product_name", product.getName()) .putDouble("price", product.getPrice()) .putInt("quantity", product.getQuantity()) .build()
InAppManager.getInstance().postEvent("purchase", purchaseAttributes)
// Set user tags val tagsBuilder = TagsBundle.Builder() tagsBuilder.putDate("last_purchase_date", Date()) val lifetimeSpend = getCurrentLifetimeSpend() + product.getPrice() tagsBuilder.putDouble("lifetime_spend", getCurrentLifetimeSpend()) pushwoosh.setTags(tagsBuilder.build()) }}import com.pushwoosh.Pushwoosh;import com.pushwoosh.tags.TagsBundle;import java.util.Date;
public class Registration {
public void afterUserLogin(User user) { if (user.getUserName() != null && user.getLastLoginDate() != null) { TagsBundle attributes = new TagsBundle.Builder() .putString("name", user.getUserName()) .putDate("last_login", user.getLastLoginDate()) .build();
Pushwoosh.getInstance().postEvent("login", attributes); } }
public void afterUserPurchase(User user, Product product) { Pushwoosh pushwoosh = Pushwoosh.getInstance();
// Track purchase event TagsBundle purchaseAttributes = new TagsBundle.Builder() .putString("product_id", product.getId()) .putString("product_name", product.getName()) .putDouble("price", product.getPrice()) .putInt("quantity", product.getQuantity()) .build();
Pushwoosh.getInstance().postEvent("purchase", purchaseAttributes);
// Set user tags TagsBundle.Builder tagsBuilder = new TagsBundle.Builder(); tagsBuilder.putDate("last_purchase_date", new Date()); double lifetimeSpend = getCurrentLifetimeSpend() + product.getPrice(); tagsBuilder.putDouble("lifetime_spend", getCurrentLifetimeSpend()); pushwoosh.setTags(tagsBuilder.build()); }}রিচ মিডিয়া
Anchor link toরিচ মিডিয়া বলতে ইন্টারেক্টিভ এবং মাল্টিমিডিয়া সামগ্রী, যেমন ছবি, ভিডিও বা HTML বোঝায়, যা ব্যবহারকারীর সম্পৃক্ততা বাড়াতে নোটিফিকেশন এবং ইন-অ্যাপ মেসেজে ব্যবহৃত হয়
মোডাল রিচ মিডিয়া বৈশিষ্ট্যটি সক্ষম করতে, আপনাকে আপনার অ্যাপ্লিকেশনের AndroidManifest.xml ফাইলে নিম্নলিখিত মেটাডেটা এন্ট্রি যোগ করে এটি কনফিগার করতে হবে:
<meta-data android:name="com.pushwoosh.rich_media_type" android:value="Modal" />import android.util.Logimport com.pushwoosh.richmedia.RichMediaimport com.pushwoosh.richmedia.RichMediaManagerimport com.pushwoosh.richmedia.RichMediaPresentingDelegateimport com.pushwoosh.inapp.view.config.ModalRichmediaConfigimport com.pushwoosh.inapp.view.config.enums.*
class MainActivity : AppCompatActivity(), RichMediaPresentingDelegate {
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) RichMediaManager.setDelegate(this)
// Configure the modal rich media val config = ModalRichmediaConfig() .setViewPosition(ModalRichMediaViewPosition.BOTTOM) .setPresentAnimationType(ModalRichMediaPresentAnimationType.SLIDE_UP) .setDismissAnimationType(ModalRichMediaDismissAnimationType.SLIDE_DOWN)
// Apply the configuration RichMediaManager.setDefaultRichMediaConfig(config) }
override fun shouldPresent(richMedia: RichMedia): Boolean { Log.d("Pushwoosh", "Rich media will be presented with: ${richMedia.content}") return true }
override fun onPresent(richMedia: RichMedia) { Log.d("Pushwoosh", "Rich media has been presented: ${richMedia.content}") }
override fun onClose(richMedia: RichMedia) { Log.d("Pushwoosh", "Rich media has been closed: ${richMedia.content}") }
override fun onError(richMedia: RichMedia, pushwooshException: PushwooshException) { Log.e("Pushwoosh", "Failed to present rich media: ${richMedia.content}. Error: ${pushwooshException.message}") }}import android.util.Log;import com.pushwoosh.richmedia.RichMedia;import com.pushwoosh.richmedia.RichMediaManager;import com.pushwoosh.richmedia.RichMediaPresentingDelegate;import com.pushwoosh.inapp.view.config.ModalRichmediaConfig;import com.pushwoosh.inapp.view.config.enums.*;
public class MainActivity extends AppCompatActivity implements RichMediaPresentingDelegate {
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); RichMediaManager.setDelegate(this);
// Configure the modal rich media ModalRichmediaConfig config = new ModalRichmediaConfig() .setViewPosition(ModalRichMediaViewPosition.BOTTOM) .setPresentAnimationType(ModalRichMediaPresentAnimationType.SLIDE_UP) .setDismissAnimationType(ModalRichMediaDismissAnimationType.SLIDE_DOWN);
// Apply the configuration RichMediaManager.setDefaultRichMediaConfig(config); }
@Override public boolean shouldPresent(RichMedia richMedia) { Log.d("Pushwoosh", "Rich media will be presented with: " + richMedia.getContent()); return true; }
@Override public void onPresent(RichMedia richMedia) { Log.d("Pushwoosh", "Rich media has been presented: " + richMedia.getContent()); }
@Override public void onClose(RichMedia richMedia) { Log.d("Pushwoosh", "Rich media has been closed: " + richMedia.getContent()); }
@Override public void onError(RichMedia richMedia, PushwooshException pushwooshException) { Log.e("Pushwoosh", "Failed to present rich media: " + richMedia.getContent() + ". Error: " + pushwooshException.getMessage()); }}সমস্যা সমাধান
Anchor link toইন্টিগ্রেশন প্রক্রিয়ার সময় যদি আপনি কোনো সমস্যার সম্মুখীন হন, তাহলে অনুগ্রহ করে সাপোর্ট এবং কমিউনিটি বিভাগটি দেখুন।