Thông báo đẩy trong nền tảng Android


266

Tôi đang tìm cách viết một ứng dụng nhận thông báo đẩy từ máy chủ. Tôi tìm thấy một vài phương pháp để làm điều này.

  1. SMS - Chặn SMS đến và bắt đầu kéo từ máy chủ
  2. Thăm dò ý kiến ​​máy chủ

Mỗi người có những hạn chế riêng. SMS- không đảm bảo về thời gian đến. Thăm dò ý kiến ​​có thể làm cạn kiệt pin.

Bạn có một đề nghị tốt hơn xin vui lòng? Cảm ơn rất nhiều.


4
Bạn cũng có thể xem Bản trình bày Google I / O 2010 về nhà phát triển
đẩy.android.com/ideo/index.html#v=PLM4LajwDVc

Tôi nghĩ bạn có thể xem bài đăng này: stackoverflow.com/questions/17629942/ Khăn Với Worklight bạn có thể nhận được thông qua các kênh khác nhau bao gồm cả GCM.
Neeraj Krishna

1
Bản trình bày Google I / O 2010 có sẵn tại youtube.com/watch?v=PLM4LajwDVc
elcuco

"Thăm dò ý kiến ​​có thể làm cạn kiệt pin." Bạn có thể bỏ phiếu thăm dò ý kiến ​​với AlertManager, vì vậy pin không bị cạn kiệt. Đó là giải pháp đơn giản và miễn phí (không cần phải trả tiền, như với GCM).
Deepscorn

có vấn đề tương tự stackoverflow.com/questions353812304/áng
albert

Câu trả lời:


203

Câu trả lời chính thức của Google là Khung nhắn tin đám mây trên thiết bị Android (không dùng nữa) Google Cloud Messaging (không dùng nữa) Nhắn tin trên đám mây

Nó sẽ hoạt động trên Android> = 2.2 (trên điện thoại có Play Store).


Hiện đang ở giai đoạn thử nghiệm, nhưng bạn có thể đăng ký với hy vọng được kích hoạt.
lợ

3
Nói chung, bạn có thể được kích hoạt rất nhanh và nó đang được sử dụng cho những thứ như GMail vì vậy được biết là hoạt động trong sản xuất. Thật không may, mã mẫu của họ để liên lạc với khía cạnh phía máy chủ của C2DM là thiếu. Tôi đã viết một hướng dẫn cho khía cạnh đó ở đây blog.boxedice.com/2010/10/07/ từ
davidmytton

6
Vấn đề là bạn cần một tài khoản Google cho người dùng của mình: đó là, tôi nghĩ, đó là một hạn chế.
kaffein

33
Lưu ý rằng Android Cloud to Device Messaging Framework đã không được chấp nhận. Khung mới được gọi là Google Cloud Messaging và có thể được tìm thấy tại đây: developer.android.com/guide/google/gcm/index.html
Ryan Berger

Vào ngày 10 tháng 4 năm 2018, Google không dùng GCM. API máy chủ và máy khách GCM đã bị xóa vào ngày 29 tháng 5 năm 2019. Di chuyển các ứng dụng GCM sang Firebase Cloud Messaging (FCM), kế thừa cơ sở hạ tầng GCM đáng tin cậy và có thể mở rộng, cùng với nhiều tính năng mới. Xem hướng dẫn di chuyển để tìm hiểu thêm.
paiego

29

( đăng chéo từ một câu trả lời tôi đã đưa ra cho một câu hỏi tương tự - Android có hỗ trợ thông báo đẩy gần thời gian thực không? )

Gần đây tôi đã bắt đầu chơi với MQTT http://mqtt.org cho Android như một cách thực hiện loại việc này (nghĩa là thông báo đẩy không phải là SMS mà là dữ liệu được điều khiển, gửi tin nhắn gần như ngay lập tức, không bỏ phiếu, v.v.)

Tôi có một bài đăng blog với thông tin cơ bản về điều này trong trường hợp nó hữu ích

http://dalelane.co.uk/blog/?p=938

(Lưu ý: MQTT là một công nghệ của IBM và tôi nên chỉ ra rằng tôi làm việc cho IBM.)


Xin chào Dale, tôi đã đọc bài đăng trên blog của bạn về MQTT và nó dường như phù hợp với hóa đơn cho thông báo gần như ngay lập tức trên điện thoại di động. Nhưng tôi đã không thể tìm thấy bất kỳ thông tin nào về cách nó thực sự làm điều đó. Nó có giữ một ổ cắm mở mọi lúc không? Làm thế nào để thông báo cho máy chủ nếu địa chỉ IP của nó đã thay đổi? Sẽ đánh giá cao nếu bạn có thể làm sáng tỏ điều này. Chúc mừng Naren
Naren

2
Nó giữ một kết nối mở. Trong một bài đăng tiếp theo ( dalelane.co.uk/blog/?p=1009 ) tôi đã nói nhiều hơn về ý nghĩa của việc giữ kết nối mở - bạn có thấy điều đó không? Nếu kết nối bị hỏng, cả máy chủ và máy khách đều có thể được thông báo. Sau đó, đó là quyết định của lớp ứng dụng để quyết định cách trả lời (ví dụ: kết nối lại). Có nhiều thông tin hơn trong các tài liệu được đề cập trong bài đăng (ví dụ: IA92: www-01.ibm.com/support/docview.wss?rs=171&uid=swg24006006 pdf trên trang đó và Javadoc trong zip trên trang đó)
dalelane

18

Sự hiểu biết / kinh nghiệm của tôi với thông báo đẩy Android là:

  1. C2DM GCM - Nếu nền tảng Android mục tiêu của bạn là 2.2+, thì hãy dùng nó. Chỉ cần một lần nắm bắt, người dùng thiết bị phải luôn đăng nhập bằng Tài khoản Google để nhận tin nhắn.

  2. MQTT - Cách tiếp cận dựa trên Pub / Sub, cần kết nối hoạt động từ thiết bị, có thể gây hao pin nếu không được triển khai hợp lý.

  3. Phó tế - Có thể không tốt trong một thời gian dài do sự hỗ trợ của cộng đồng hạn chế.

Chỉnh sửa : Đã thêm vào ngày 25 tháng 11 năm 2013

GCM - Google nói ...

Đối với các thiết bị trước 3.0, điều này yêu cầu người dùng thiết lập tài khoản Google của họ trên thiết bị di động. Tài khoản Google không phải là một yêu cầu đối với các thiết bị chạy Android 4.0.4 trở lên. *


Mặc dù tài khoản Google không bắt buộc phải có 4.0.4 trở lên nhưng có vẻ như bạn phải cài đặt ứng dụng Google Play. Tôi tự hỏi làm thế nào bạn cài đặt mà không cần có tài khoản Google.
1,

1
@Jan: Ứng dụng Google play được cài đặt kèm theo thiết bị. Người dùng không cần cài đặt.
Dexter

@Dexter, không phải tất cả các thiết bị Android đều được cài đặt Google Play theo mặc định. Hầu hết mọi người đều cài đặt nó theo mặc định, đặc biệt là các thiết bị được mua từ các nhà cung cấp điện thoại có uy tín, nhưng các thiết bị có hệ điều hành Android được flash cho họ có thể không phải lúc nào cũng có Google Play. (Ví dụ: rất nhiều trình giả lập Android, chẳng hạn như các thiết bị Genymotion mới, không có Google Play theo mặc định.)
Spencer D

Vậy ... MQTT có phải là tùy chọn tốt nhất cho các thiết bị Android chưa cài đặt Google Play không?
Yeung

17

Khung tin nhắn trên nền tảng đám mây của Android

Quan trọng: C2DM đã chính thức bị từ chối kể từ ngày 26 tháng 6 năm 2012. Điều này có nghĩa là C2DM đã ngừng chấp nhận người dùng mới và yêu cầu hạn ngạch. Không có tính năng mới sẽ được thêm vào C2DM. Tuy nhiên, các ứng dụng sử dụng C2DM sẽ tiếp tục hoạt động. Các nhà phát triển C2DM hiện tại được khuyến khích chuyển sang phiên bản mới của C2DM, được gọi là Google Cloud Messaging cho Android (GCM). Xem tài liệu Di chuyển từ C2DM sang GCM để biết thêm thông tin. Các nhà phát triển phải sử dụng GCM để phát triển mới.

Vui lòng kiểm tra liên kết sau:

http://developer.android.com/guide/google/gcm/index.html


17

Ở đây tôi đã viết một vài bước cho Cách lấy RegID và Thông báo bắt đầu từ đầu

  1. Tạo / Đăng ký ứng dụng trên Google Cloud
  2. Thiết lập SDK đám mây với sự phát triển
  3. Cấu hình dự án cho GCM
  4. Nhận ID đăng ký thiết bị
  5. Gửi thông báo đẩy
  6. Nhận thông báo đẩy

Bạn có thể tìm thấy hướng dẫn đầy đủ trong liên kết URL bên dưới

Bắt đầu với Thông báo đẩy Android: Nhắn tin trên Google Cloud (GCM) mới nhất - hướng dẫn từng bước hoàn chỉnh

nhập mô tả hình ảnh ở đây

Mã snip để nhận ID đăng ký (Mã thông báo thiết bị cho thông báo đẩy).

Cấu hình dự án cho GCM


Cập nhật tệp AndroidManifest

Để kích hoạt GCM trong dự án của chúng tôi, chúng tôi cần thêm một số quyền trong tệp kê khai của chúng tôi Truy cập AndroidManifest.xml và thêm mã bên dưới Thêm quyền

<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" />

Thêm khai báo GCM Broadcast

thêm khai báo GCM Broadcast Receiver trong thẻ ứng dụng của bạn

<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/>

Thêm khai báo GCM Servie

<application
     <service android:name=".GcmIntentService" />
<application/>

Nhận ID đăng ký (Mã thông báo thiết bị cho thông báo đẩy)

Bây giờ Chuyển đến Hoạt động Khởi động / Splash của bạn

Thêm hằng và biến lớp

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;

Cập nhật các phương thức OnCreate và OnResume

@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);
}

Lưu ý : vui lòng lưu trữ REGISTRATION_KEY, điều quan trọng là gửi Tin nhắn PN đến GCM, điều này sẽ là duy nhất cho tất cả các thiết bị, bằng cách này chỉ GCM sẽ gửi Thông báo đẩy.

Nhận thông báo đẩy

Thêm lớp máy thu phát GCM

Như chúng ta đã khai báo GcmBroadcastReceiver.java, trong tệp Manifest của chúng tôi, vì vậy hãy tạo mã lớp người nhận cập nhật lớp này theo cách này

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();
    }
}

Thêm lớp dịch vụ GCM

Như chúng ta đã khai báo GcmBroadcastReceiver.java, trong tệp Manifest của chúng tôi, vì vậy hãy tạo mã lớp người nhận cập nhật lớp này theo cách này

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());
     }
}

@Rohit bạn đã kiểm tra liên kết có hướng dẫn đầy đủ. cũng xin vui lòng cho tôi biết những gì còn thiếu tôi sẽ cập nhật câu trả lời.
swiftBoy

11

Có một nỗ lực mã nguồn mở mới để phát triển thư viện Java cho các thông báo đẩy trên Android dựa trên máy chủ web Meteor. Bạn có thể kiểm tra nó tại Blog Dự án Deacon , nơi bạn sẽ tìm thấy các liên kết đến Thiên thạch và kho lưu trữ GitHub của dự án. Chúng tôi cần các nhà phát triển, vì vậy xin vui lòng truyền bá!


9

Bạn có thể sử dụng Xtify ( http://developer.xtify.com ) - họ có dịch vụ web thông báo đẩy hoạt động với SDK của họ. nó miễn phí và cho đến nay, nó hoạt động rất tốt với tôi.


3
Tôi đã nhận được phản hồi từ VP của họ nói rằng không có kế hoạch nào tính phí cho dịch vụ đẩy. Đây là một SDK tuyệt vời.
Crowe T. Robot

8

hoặc là....

3) Giữ kết nối với máy chủ, gửi tin nhắn cứ sau vài phút và máy chủ có thể đẩy tin nhắn ngay lập tức. Đây là cách Gmail, Google Talk, v.v.


5
Tôi nghĩ rằng điều này sẽ, đáng buồn, sẽ tạo ra một lượng lớn pin tiêu hao. NẾU bạn đi theo con đường này, hãy đảm bảo giới hạn thời gian bạn làm việc này.
haseman

Không, thực tế là không, vì các kết nối TCP / IP nhàn rỗi hầu như không mất điện trên modem di động.
Isaac Waller

Trên thực tế, nó sẽ mất rất nhiều thời gian, vì vậy bạn đã đúng. Gửi những người giữ bí mật với khoảng thời gian dài cũng giúp ích rất nhiều.
Isaac Waller

"Khoảng thời gian dài" trong vấn đề này là gì? Tôi biết gmail đẩy hoạt động như thế này nhưng tôi không biết họ sử dụng khoảng thời gian chờ nào.
tobsen

Tôi đã tìm thấy hình ảnh này về hiệu suất của pin Pull vs Push: labs.ericsson.com/files/battery.jpg Tôi đã lấy nó từ API của Push tại đây: labs.ericsson.com/apis/mobile-java-push/documentation
Menda

6

Tôi khuyên bạn nên sử dụng GCM - Google Cloud Messaging cho Android Nó miễn phí và để sử dụng đơn giản, việc này rất dễ dàng.

Tuy nhiên, nó yêu cầu duy trì một máy chủ bên thứ 3 để gửi thông báo thay cho bạn. Nếu bạn muốn tránh rằng có một số giải pháp công nghiệp rất tốt cho dịch vụ thông báo đẩy Android:

  • Urban Airship - miễn phí tối đa 1 triệu thông báo mỗi tháng, sau đó bạn sẽ bị tính phí trên 1000 thông báo
  • PushApps - miễn phí cho 1 triệu thông báo mỗi tháng và thông báo không giới hạn cho 19,99 mỗi tháng
  • PushWoosh - miễn phí cho các thiết bị 1M, gói cao cấp từ 39 EURO

Diclaimer - Tôi làm việc trong PushApps và cũng sử dụng sản phẩm của họ trong các ứng dụng của tôi trong hơn một năm nay.


6

Kể từ ngày 18/05/2016 Firebase là nền tảng hợp nhất của Google dành cho các nhà phát triển di động bao gồm thông báo đẩy.


4

Tôi sợ bạn đã tìm thấy cả hai phương pháp có thể. Google, ít nhất là ban đầu, sẽ triển khai api GChat mà bạn có thể sử dụng để triển khai đẩy / kéo. Đáng buồn thay, thư viện đó đã bị cắt bởi Android 1.0.


1
Họ đã hứa sẽ mang nó trở lại sau khi các vấn đề bảo mật được giải quyết ... nếu điều đó xảy ra.
Jeremy Logan

3

Tôi không biết nếu điều này vẫn còn hữu ích. Tôi đã đạt được một cái gì đó như thế này với một thư viện java tại http://www.pushlets.com/

Althoug thực hiện nó trong một dịch vụ sẽ không ngăn Android tắt nó để giết chết chủ đề người nghe.



2

C2DM: người dùng ứng dụng của bạn phải có tài khoản gmail.

MQTT: khi kết nối của bạn đạt tới 1024, nó sẽ ngừng hoạt động do sử dụng "mô hình chọn" của linux.

Có một dịch vụ đẩy miễn phí và api cho Android, bạn có thể dùng thử: http://push-notification.org


2

Phương pháp miễn phí và dễ dàng:

Nếu cơ sở người dùng mục tiêu của bạn không lớn (dưới 1000) và bạn muốn bắt đầu một dịch vụ miễn phí, thì Airbop là dịch vụ tốt nhất và thuận tiện nhất.

Trang web Airbop Nó sử dụng dịch vụ Google Cloud Messaging thông qua API và cung cấp hiệu suất tốt. tôi đã sử dụng nó cho hai dự án của mình và thật dễ dàng thực hiện nó.

Các dịch vụ như và Urbanship là tuyệt vời nhưng cung cấp toàn bộ ngăn xếp triển khai và không chỉ là điều thông báo đẩy.

Nếu chỉ có dịch vụ đẩy là mục tiêu của bạn, Airbop sẽ hoạt động tốt.

Tôi chưa sử dụng Pushwoosh , nhưng cũng là một lựa chọn tuyệt vời. Nó cho phép đẩy tới 1.000.000 thiết bị miễn phí


1

Tôi sẽ đề nghị sử dụng cả SMS và HTTP. Nếu người dùng chưa đăng nhập, hãy gửi SMS cho điện thoại của họ để thông báo cho họ biết có tin nhắn đang chờ.

Đó là cách dịch vụ của Labs Labs này hoạt động: https://labs.ericsson.com/apis/mobile-java-push/

Nếu bạn tự thực hiện việc này, phần khó khăn là xóa SMS đến mà người dùng không thấy. Hoặc có thể nó ổn nếu họ thấy nó trong trường hợp của bạn.

Có vẻ như điều này hoạt động: Xóa SMS bằng BroadCastReceiver - Android

Có, viết mã như thế này có thể nguy hiểm và bạn có khả năng hủy hoại cuộc sống của ai đó vì ứng dụng của bạn đã xóa một SMS mà nó không nên có.


1
lol: "Vâng, viết mã như thế này có thể nguy hiểm và bạn có khả năng hủy hoại cuộc sống của ai đó vì ứng dụng của bạn đã xóa một SMS mà nó không nên có." nâng cao cho điều đó. cười lớn.
Kumar Ravi

Liên kết đến Mobile Java Push đã chết và bản thân dịch vụ dường như không được dùng nữa.
naXa

1

Bạn có thể sử dụng Google Cloud Messaging hoặc GCM , nó miễn phí và dễ sử dụng. Ngoài ra, bạn có thể sử dụng các máy chủ đẩy của bên thứ ba như PushWoosh , giúp bạn linh hoạt hơn



1

Firebase Cloud Messaging (FCM) là phiên bản mới của GCM. FCM là một giải pháp nhắn tin đa nền tảng cho phép bạn gửi tin nhắn một cách an toàn và miễn phí. Kế thừa cơ sở hạ tầng trung tâm của GCM để gửi tin nhắn đáng tin cậy trên Android, iOS, Web (javascript), Unity và C ++.

Kể từ ngày 10 tháng 4 năm 2018, Google đã từ chối GCM. API máy chủ và máy khách GCM không được dùng nữa và sẽ bị xóa vào ngày 11 tháng 4 năm 2019. Google khuyên bạn nên chuyển các ứng dụng GCM sang Firebase Cloud Messaging (FCM), kế thừa cơ sở hạ tầng GCM đáng tin cậy và có thể mở rộng.

Nguồn


0

Bạn có thể sử dụng Pizer

Đây là một dịch vụ được lưu trữ giúp dễ dàng thêm dữ liệu và chức năng thời gian thực vào các ứng dụng web và di động.
Pizer cung cấp các thư viện để tích hợp vào tất cả các thời gian chạy chính và khung.

PHP, Ruby, Python, Java, .NET, Go and Nodetrên máy chủ
JavaScript, Objective-C (iOS) and Java (Android)trên máy khách.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.