এখানে আমি স্ক্র্যাচ থেকে শুরু করে রেজিড এবং বিজ্ঞপ্তি পেতে কীভাবে কয়েকটি পদক্ষেপ লিখেছি
- গুগল ক্লাউডে অ্যাপ্লিকেশন তৈরি / নিবন্ধ করুন
- উন্নয়নের সাথে ক্লাউড এসডিকে সেটআপ করুন
- GCM এর জন্য প্রকল্পটি কনফিগার করুন
- ডিভাইস নিবন্ধকরণ আইডি পান
- পুশ বিজ্ঞপ্তি প্রেরণ করুন
- পুশ বিজ্ঞপ্তিগুলি গ্রহণ করুন
আপনি নীচের ইউআরএল লিঙ্কে সম্পূর্ণ টিউটোরিয়াল খুঁজে পেতে পারেন
অ্যান্ড্রয়েড পুশ বিজ্ঞপ্তি দিয়ে শুরু করা: সর্বশেষ গুগল ক্লাউড মেসেজিং (জিসিএম) - ধাপে ধাপে সম্পূর্ণ টিউটোরিয়াল
নিবন্ধকরণ আইডি পেতে কোড স্নিপ (পুশ নোটিফিকেশনের জন্য ডিভাইস টোকন)।
GCM এর জন্য প্রকল্পটি কনফিগার করুন
অ্যান্ড্রয়েডমেনিস্ট ফাইলটি আপডেট করুন
আমাদের প্রকল্পে জিসিএম সক্ষম করার জন্য আমাদের আমাদের ম্যানিফেস্ট ফাইলটিতে কয়েকটি অনুমতি যুক্ত করতে হবে AndroidManifest.xML এ যান এবং কোডের নীচে যুক্ত করুন অনুমতি যুক্ত করুন
<uses-permission android:name="android.permission.INTERNET”/>
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name=“.permission.RECEIVE" />
<uses-permission android:name=“<your_package_name_here>.permission.C2D_MESSAGE" />
<permission android:name=“<your_package_name_here>.permission.C2D_MESSAGE"
android:protectionLevel="signature" />
জিসিএম ব্রডকাস্ট রিসিভারের ঘোষণা যোগ করুন
আপনার অ্যাপ্লিকেশন ট্যাগটিতে জিসিএম ব্রডকাস্ট রিসিভার ঘোষণা যুক্ত করুন
<application
<receiver
android:name=".GcmBroadcastReceiver"
android:permission="com.google.android.c2dm.permission.SEND" ]]>
<intent-filter]]>
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
<category android:name="" />
</intent-filter]]>
</receiver]]>
<application/>
জিসিএম সার্ভি ঘোষণা ঘোষণা করুন
<application
<service android:name=".GcmIntentService" />
<application/>
নিবন্ধকরণ আইডি (পুশ বিজ্ঞপ্তির জন্য ডিভাইস টোকন) পান
এখন আপনার লঞ্চ / স্প্ল্যাশ কার্যকলাপে যান
কনস্ট্যান্ট এবং ক্লাস ভেরিয়েবল যুক্ত করুন
private final static int PLAY_SERVICES_RESOLUTION_REQUEST = 9000;
public static final String EXTRA_MESSAGE = "message";
public static final String PROPERTY_REG_ID = "registration_id";
private static final String PROPERTY_APP_VERSION = "appVersion";
private final static String TAG = "LaunchActivity";
protected String SENDER_ID = "Your_sender_id";
private GoogleCloudMessaging gcm =null;
private String regid = null;
private Context context= null;
অনক্রিয়েট এবং অনরেসুম পদ্ধতিগুলি আপডেট করুন
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_launch);
context = getApplicationContext();
if (checkPlayServices())
{
gcm = GoogleCloudMessaging.getInstance(this);
regid = getRegistrationId(context);
if (regid.isEmpty())
{
registerInBackground();
}
else
{
Log.d(TAG, "No valid Google Play Services APK found.");
}
}
}
@Override protected void onResume()
{
super.onResume(); checkPlayServices();
}
# Implement GCM Required methods (Add below methods in LaunchActivity)
private boolean checkPlayServices() {
int resultCode = GooglePlayServicesUtil.isGooglePlayServicesAvailable(this);
if (resultCode != ConnectionResult.SUCCESS) {
if (GooglePlayServicesUtil.isUserRecoverableError(resultCode)) {
GooglePlayServicesUtil.getErrorDialog(resultCode, this,
PLAY_SERVICES_RESOLUTION_REQUEST).show();
} else {
Log.d(TAG, "This device is not supported - Google Play Services.");
finish();
}
return false;
}
return true;
}
private String getRegistrationId(Context context)
{
final SharedPreferences prefs = getGCMPreferences(context);
String registrationId = prefs.getString(PROPERTY_REG_ID, "");
if (registrationId.isEmpty()) {
Log.d(TAG, "Registration ID not found.");
return "";
}
int registeredVersion = prefs.getInt(PROPERTY_APP_VERSION, Integer.MIN_VALUE);
int currentVersion = getAppVersion(context);
if (registeredVersion != currentVersion) {
Log.d(TAG, "App version changed.");
return "";
}
return registrationId;
}
private SharedPreferences getGCMPreferences(Context context)
{
return getSharedPreferences(LaunchActivity.class.getSimpleName(),
Context.MODE_PRIVATE);
}
private static int getAppVersion(Context context)
{
try
{
PackageInfo packageInfo = context.getPackageManager()
.getPackageInfo(context.getPackageName(), 0);
return packageInfo.versionCode;
}
catch (NameNotFoundException e)
{
throw new RuntimeException("Could not get package name: " + e);
}
}
private void registerInBackground()
{ new AsyncTask() {
Override
protected Object doInBackground(Object... params)
{
String msg = "";
try
{
if (gcm == null)
{
gcm = GoogleCloudMessaging.getInstance(context);
}
regid = gcm.register(SENDER_ID); Log.d(TAG, "########################################");
Log.d(TAG, "Current Device's Registration ID is: "+msg);
}
catch (IOException ex)
{
msg = "Error :" + ex.getMessage();
}
return null;
} protected void onPostExecute(Object result)
{ //to do here };
}.execute(null, null, null);
}
দ্রষ্টব্য : দয়া করে REGISTRATION_KEY সঞ্চয় করুন, জিসিএমকে পিএন বার্তা প্রেরণের জন্য গুরুত্বপূর্ণ এটিও রাখুন এটি সমস্ত ডিভাইসের পক্ষে অনন্য হবে, এটি কেবলমাত্র জিসিএম ব্যবহার করে পুশ নোটিফিকেশন প্রেরণ করবে।
পুশ বিজ্ঞপ্তিগুলি গ্রহণ করুন
জিসিএম ব্রডকাস্ট রিসিভার ক্লাস যুক্ত করুন
যেহেতু আমরা ইতিমধ্যে আমাদের ম্যানিফেস্ট ফাইলে "জিসিএমড্রোডকাস্টরিসিভার.জভা" ঘোষণা করেছি, সুতরাং এই ক্লাস আপডেট রিসিভার ক্লাস কোডটি এভাবে তৈরি করি
public class GcmBroadcastReceiver extends WakefulBroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent)
{ ComponentName comp = new ComponentName(context.getPackageName(),
GcmIntentService.class.getName()); startWakefulService(context, (intent.setComponent(comp)));
setResultCode(Activity.RESULT_OK);
Toast.makeText(context, “wow!! received new push notification", Toast.LENGTH_LONG).show();
}
}
জিসিএম পরিষেবা ক্লাস যুক্ত করুন
যেহেতু আমরা ইতিমধ্যে আমাদের ম্যানিফেস্ট ফাইলে "জিসিএমড্রোডকাস্টরিসিভার.জভা" ঘোষণা করেছি, সুতরাং এই ক্লাস আপডেট রিসিভার ক্লাস কোডটি এভাবে তৈরি করি
public class GcmIntentService extends IntentService
{ public static final int NOTIFICATION_ID = 1; private NotificationManager mNotificationManager; private final static String TAG = "GcmIntentService"; public GcmIntentService() {
super("GcmIntentService");
} @Override
protected void onHandleIntent(Intent intent) {
Bundle extras = intent.getExtras();
Log.d(TAG, "Notification Data Json :" + extras.getString("message"));
GoogleCloudMessaging gcm = GoogleCloudMessaging.getInstance(this);
String messageType = gcm.getMessageType(intent); if (!extras.isEmpty()) { if (GoogleCloudMessaging.MESSAGE_TYPE_SEND_ERROR
.equals(messageType)) {
sendNotification("Send error: " + extras.toString());
} else if (GoogleCloudMessaging.MESSAGE_TYPE_DELETED
.equals(messageType)) {
sendNotification("Deleted messages on server: "
+ extras.toString()); // If it's a regular GCM message, do some work.
} else if (GoogleCloudMessaging.MESSAGE_TYPE_MESSAGE
.equals(messageType)) {
// This loop represents the service doing some work.
for (int i = 0; i < 5; i++) {
Log.d(TAG," Working... " + (i + 1) + "/5 @ "
+ SystemClock.elapsedRealtime()); try {
Thread.sleep(5000);
} catch (InterruptedException e) {
}
}
Log.i(TAG, "Completed work @ " + SystemClock.elapsedRealtime());
sendNotification(extras.getString("message"));
}
} // Release the wake lock provided by the WakefulBroadcastReceiver.
GcmBroadcastReceiver.completeWakefulIntent(intent);
} // Put the message into a notification and post it.
// This is just one simple example of what you might choose to do with
// a GCM message.
private void sendNotification(String msg) { mNotificationManager = (NotificationManager) this
.getSystemService(Context.NOTIFICATION_SERVICE);
PendingIntent contentIntent = PendingIntent.getActivity(this, 0, new Intent(this, LaunchActivity.class), 0);
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder( this)
.setSmallIcon(R.drawable.icon)
.setContentTitle("Ocutag Snap")
.setStyle(new NotificationCompat.BigTextStyle().bigText(msg))
.setContentText(msg)
.setDefaults(Notification.DEFAULT_SOUND | Notification.DEFAULT_VIBRATE);
mBuilder.setContentIntent(contentIntent); mNotificationManager.notify(NOTIFICATION_ID, mBuilder.build());
}
}