กดการแจ้งเตือนในแพลตฟอร์ม Android


266

ฉันต้องการเขียนแอพที่ได้รับการแจ้งเตือนแบบพุชจากเซิร์ฟเวอร์ ฉันพบวิธีการสองสามอย่างในการทำเช่นนี้

  1. SMS - สกัดกั้น SMS ที่เข้ามาและเริ่มดึงจากเซิร์ฟเวอร์
  2. สำรวจเซิร์ฟเวอร์

แต่ละคนมีข้อ จำกัด ของตัวเอง SMS- ไม่มีการรับประกันในเวลาที่มาถึง โพลอาจทำให้แบตเตอรี่หมด

คุณมีข้อเสนอแนะที่ดีกว่าโปรด? ขอบคุณมาก ๆ.


4
คุณยังสามารถดูการนำเสนอของ Google I / O 2010 เกี่ยวกับ Push Notification developer.android.com/videos/index.html#v=PLM4LajwDVc
vokilam

ฉันคิดว่าคุณสามารถดูโพสต์นี้: stackoverflow.com/questions/17629942/…ด้วย Worklight คุณสามารถรับการพุชผ่านช่องทางต่างๆรวมถึง GCM
Neeraj Krishna

1
งานนำเสนอของ Google I / O 2010 มีให้ที่youtube.com/watch?v=PLM4LajwDVc
elcuco

"โพลอาจทำให้แบตเตอรี่หมด" คุณสามารถ shedule แบบสำรวจความคิดเห็นด้วย AlarmManager ดังนั้นแบตเตอรี่ไม่หนัก มันง่ายและฟรี (ไม่จำเป็นต้องจ่ายเงินเช่นเดียวกับโซลูชั่น GCM)
Deepscorn

มีปัญหาเดียวกันstackoverflow.com/questions/35812304/…
อัลเบิ

คำตอบ:


203

คำตอบอย่างเป็นทางการของ Google คือกรอบการส่งข้อความ ของAndroid Cloud to Device (เลิกใช้งาน) Google Cloud Messaging (เลิกใช้งาน) Firebase Cloud Messaging

มันจะทำงานบน Android> = 2.2 (บนโทรศัพท์ที่มี Play Store)


ตอนนี้อยู่ในรุ่นเบต้า แต่คุณสามารถสมัครใช้งานโดยหวังว่าจะได้รับการเปิดใช้งาน
brack

3
โดยทั่วไปคุณสามารถเปิดใช้งานได้อย่างรวดเร็วและมันถูกใช้สำหรับสิ่งต่าง ๆ เช่น GMail ดังนั้นจึงเป็นที่รู้จักในการผลิต น่าเสียดายที่โค้ดตัวอย่างสำหรับการสื่อสารกับฝั่งเซิร์ฟเวอร์ของ C2DM ขาดไป ฉันเขียนบทช่วยสอนสำหรับเรื่องนั้นไว้ที่นี่blog.boxedice.com/2010/10/07/…
DavidM

6
ปัญหาคือคุณต้องมีบัญชี Google สำหรับผู้ใช้ของคุณซึ่งก็คือข้อ จำกัด
kaffein

33
โปรดทราบว่า Android Cloud to Device Messaging Framework เลิกใช้แล้ว เฟรมเวิร์กใหม่นี้เรียกว่า Google Cloud Messaging และสามารถพบได้ที่นี่: developer.android.com/guide/google/gcm/index.html
Ryan Berger

ในวันที่ 10 เมษายน 2018 Google เลิกใช้ GCM GCM เซิร์ฟเวอร์และไคลเอนต์ API ถูกลบออกเมื่อวันที่ 29 พฤษภาคม 2019 ย้ายแอป GCM ไปยัง Firebase Cloud Messaging (FCM) ซึ่งสืบทอดโครงสร้างพื้นฐาน GCM ที่เชื่อถือได้และปรับขนาดได้รวมถึงคุณสมบัติใหม่มากมาย ดูคู่มือการโยกย้ายเพื่อเรียนรู้เพิ่มเติม
paiego

29

(การข้ามโพสต์จากคำตอบที่ฉันให้กับคำถามที่คล้ายกัน - Android รองรับการแจ้งเตือนแบบพุชตามเวลาจริงหรือไม่ )

ฉันเพิ่งเริ่มเล่นกับ MQTT http://mqtt.orgสำหรับ Android เป็นวิธีในการทำสิ่งนี้ (เช่นการแจ้งเตือนแบบพุชที่ไม่ใช่ SMS แต่เป็นข้อมูลที่ขับเคลื่อนการส่งข้อความเกือบทันทีไม่โพลเป็นต้น)

ฉันมีโพสต์บล็อกพร้อมข้อมูลพื้นฐานในกรณีนี้มันมีประโยชน์

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

(หมายเหตุ: MQTT เป็นเทคโนโลยีของ IBM และฉันควรชี้ให้เห็นว่าฉันทำงานให้กับ IBM)


สวัสดีเดลฉันอ่านบล็อกโพสต์ของคุณเกี่ยวกับ MQTT และดูเหมือนว่าจะพอดีกับการเรียกเก็บเงินสำหรับการแจ้งเตือนทันทีบนโทรศัพท์มือถือ แต่ฉันไม่สามารถค้นหาข้อมูลใด ๆ เกี่ยวกับวิธีการใช้งานจริง มันเปิดซ็อกเก็ตตลอดเวลาหรือไม่? มันแจ้งเซิร์ฟเวอร์อย่างไรถ้าที่อยู่ IP ของมันเปลี่ยนไป? จะขอบคุณมันถ้าคุณสามารถหลั่งไฟนี้ Cheers Naren
Naren

2
มันค้างการเชื่อมต่อเปิด ในโพสต์ติดตาม ( dalelane.co.uk/blog/?p=1009 ) ฉันได้พูดคุยเพิ่มเติมเกี่ยวกับความหมายของการถือการเชื่อมต่อที่เปิดอยู่ - คุณเห็นไหม หากการเชื่อมต่อเสียหายทั้งเซิร์ฟเวอร์และไคลเอนต์สามารถได้รับแจ้ง จากนั้นเป็นการตัดสินใจเลเยอร์ของแอปพลิเคชันเพื่อตัดสินใจว่าจะตอบสนองอย่างไร (เช่นเชื่อมต่อใหม่) มีข้อมูลเพิ่มเติมในเอกสารที่อ้างถึงในโพสต์ (เช่น IA92: www-01.ibm.com/support/docview.wss?rs=171&uid=swg24006006 pdf ในหน้านั้นและ Javadoc ในรหัสไปรษณีย์ในหน้านั้น)
dalelane

18

ความเข้าใจ / ประสบการณ์ของฉันกับการแจ้งเตือนแบบพุชของ Android คือ:

  1. C2DM GCM - หากแพลตฟอร์ม Android เป้าหมายของคุณคือ 2.2 ขึ้นไปให้ลองเลย ผู้ใช้อุปกรณ์ต้องถูกบันทึกด้วยบัญชี Googleเสมอเพื่อรับข้อความ

  2. MQTT - วิธีการแบบผับ / ซับต้องการการเชื่อมต่อที่ใช้งานอยู่จากอุปกรณ์อาจทำให้แบตเตอรี่หมดหากไม่ได้ใช้งานอย่างสมเหตุสมผล

  3. ผู้ดูแลวัด - อาจไม่ดีในระยะยาวเนื่องจากการสนับสนุนจากชุมชน จำกัด

แก้ไข : เพิ่มเมื่อวันที่ 25 พฤศจิกายน 2013

GCM - Google กล่าวว่า ...

สำหรับอุปกรณ์ pre-3.0 ผู้ใช้จำเป็นต้องตั้งค่าบัญชี Google บนอุปกรณ์มือถือ บัญชี Google ไม่ใช่ข้อกำหนดสำหรับอุปกรณ์ที่ใช้ Android 4.0.4 ขึ้นไป *


ในขณะที่บัญชี Google ไม่จำเป็นสำหรับ 4.0.4 หรือสูงกว่าดูเหมือนว่าคุณจะต้องติดตั้งแอป Google Play ฉันสงสัยว่าคุณจะติดตั้งได้อย่างไรโดยไม่ต้องมีบัญชี Google
ม.ค.

1
@Jan: แอป Google play ติดตั้งมาพร้อมกับอุปกรณ์ ผู้ใช้ไม่จำเป็นต้องติดตั้ง
Dexter

@Dexter ไม่ใช่ว่าอุปกรณ์ Android ทุกเครื่องจะติดตั้ง Google Play ตามค่าเริ่มต้น ส่วนใหญ่ติดตั้งโดยค่าเริ่มต้นโดยเฉพาะอุปกรณ์ที่ซื้อจากผู้จำหน่ายโทรศัพท์ที่มีชื่อเสียง แต่อุปกรณ์ที่เพิ่งติดตั้งระบบปฏิบัติการ Android อาจไม่ได้มี Google Play (ตัวอย่างเช่นตัวเลียนแบบ Android จำนวนมากเช่นอุปกรณ์ Genymotion ใหม่ไม่มี Google Play ตามค่าเริ่มต้น)
Spencer D

ดังนั้น ... MQTT เป็นตัวเลือกที่ดีที่สุดสำหรับอุปกรณ์ Android ที่ไม่ได้ติดตั้ง Google Play หรือไม่
เหยิง

17

กรอบการส่งข้อความของ Android Cloud to Device

สำคัญ: C2DM เลิกใช้แล้วอย่างเป็นทางการเมื่อวันที่ 26 มิถุนายน 2555ซึ่งหมายความว่า C2DM หยุดรับผู้ใช้ใหม่และคำขอโควต้า จะไม่มีการเพิ่มคุณสมบัติใหม่ลงใน C2DM อย่างไรก็ตามแอปที่ใช้ C2DM จะยังคงทำงานต่อไป นักพัฒนา C2DM ที่มีอยู่ได้รับการสนับสนุนให้ย้ายไปยัง C2DM เวอร์ชันใหม่ที่เรียกว่า Google Cloud Messaging สำหรับ Android (GCM) ดูเอกสารการย้ายข้อมูล C2DM-to-GCM นักพัฒนาจะต้องใช้ GCM เพื่อการพัฒนาใหม่

กรุณาตรวจสอบลิงค์ต่อไปนี้:

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


17

ที่นี่ฉันได้เขียนไม่กี่ขั้นตอนสำหรับวิธีการรับ RegID และการแจ้งเตือนเริ่มต้นจากศูนย์

  1. สร้าง / ลงทะเบียนแอปบน Google Cloud
  2. ติดตั้ง Cloud SDK พร้อมการพัฒนา
  3. กำหนดค่าโครงการสำหรับ GCM
  4. รับ ID การลงทะเบียนอุปกรณ์
  5. ส่งการแจ้งเตือนแบบพุช
  6. รับการแจ้งเตือนแบบพุช

คุณสามารถดูบทแนะนำที่สมบูรณ์ได้จากลิงค์ URL ด้านล่าง

เริ่มต้นใช้งานการแจ้งเตือนแบบพุชของ Android: Google Cloud Messaging (GCM) ล่าสุด - การสอนแบบทีละขั้นตอน

ป้อนคำอธิบายรูปภาพที่นี่

Code snip เพื่อรับ ID การลงทะเบียน (อุปกรณ์ Token สำหรับ Push Notification)

กำหนดค่าโครงการสำหรับ GCM


อัปเดตไฟล์ AndroidManifest

สำหรับการเปิดใช้งาน 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" />

เพิ่มการประกาศตัวรับสัญญาณออกอากาศ GCM

เพิ่มการประกาศตัวรับสัญญาณออกอากาศ GCM ในแท็กแอปพลิเคชันของคุณ

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

เพิ่มการประกาศ GCM Servie

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

รับ ID การลงทะเบียน (อุปกรณ์ Token สำหรับการแจ้งเตือนแบบพุช)

ตอนนี้ไปที่กิจกรรม Launch / Splash ของคุณ

เพิ่มค่าคงที่และตัวแปรคลาส

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;

อัพเดตเมธอด OnCreate และ 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);
}

หมายเหตุ : โปรดเก็บ REGISTRATION_KEY เป็นสิ่งสำคัญสำหรับการส่งข้อความ PN ถึง GCM และยังคงอยู่ในใจของฉันซึ่งจะไม่ซ้ำกันสำหรับอุปกรณ์ทั้งหมดโดยใช้ GCM นี้เท่านั้นที่จะส่งการแจ้งเตือนแบบพุช

รับการแจ้งเตือนแบบพุช

เพิ่ม GCM Broadcast Receiver Class

เนื่องจากเราได้ประกาศ“ GcmBroadcastReceiver.java” ในไฟล์ Manifest ของเราแล้วดังนั้นให้สร้างรหัสคลาสตัวรับการอัพเดตคลาสด้วยวิธีนี้

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

เพิ่มระดับบริการ GCM

เนื่องจากเราได้ประกาศ“ GcmBroadcastReceiver.java” ในไฟล์ Manifest ของเราแล้วดังนั้นให้สร้างรหัสคลาสตัวรับการอัพเดตคลาสด้วยวิธีนี้

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 คุณตรวจสอบลิงก์ว่ามีการสอนที่สมบูรณ์หรือไม่ นอกจากนี้โปรดแจ้งให้เราทราบสิ่งที่ขาดหายไปฉันจะอัปเดตคำตอบ
swiftBoy

11

มีความพยายามแบบโอเพ่นซอร์สใหม่ในการพัฒนาไลบรารี Java สำหรับการแจ้งเตือนแบบพุชบน Android โดยใช้เว็บเซิร์ฟเวอร์ของ Meteor คุณสามารถตรวจสอบได้ที่บล็อกของโครงการ Deaconซึ่งคุณจะพบลิงค์ไปยัง Meteor และที่เก็บ GitHub ของโครงการ เราต้องการนักพัฒนาดังนั้นโปรดกระจายคำพูดออกไป!


9

คุณสามารถใช้ Xtify ( http://developer.xtify.com ) - พวกเขามีเว็บเซอร์วิสการแจ้งเตือนแบบพุชที่ทำงานกับ SDK ของพวกเขา มันฟรีและยังใช้งานได้ดีสำหรับฉัน


3
ฉันได้รับการตอบสนองจากรองประธานของพวกเขาโดยกล่าวว่าไม่มีแผนในการเรียกเก็บเงินสำหรับบริการพุช มันค่อนข้าง SDK ที่น่าตื่นตาตื่นใจ
Crowe T. Robot

8

หรือ....

3)เชื่อมต่อกับเซิร์ฟเวอร์ส่งการแจ้งเตือนทุกสองสามนาทีและเซิร์ฟเวอร์สามารถส่งข้อความได้ทันที นี่คือการทำงานของ Gmail, Google Talk และอื่น ๆ


5
ฉันคิดว่านี่น่าเศร้าที่ผลิตแบตเตอรี่ได้หมด หากคุณใช้เส้นทางนี้ตรวจสอบให้แน่ใจว่าได้ จำกัด ระยะเวลาที่คุณทำ
haseman

ไม่จริง ๆ แล้วมันจะไม่เกิดขึ้นเนื่องจากการเชื่อมต่อ TCP / IP ที่ไม่ได้ใช้งานแทบจะไม่มีการจ่ายไฟให้กับโมเด็มมือถือ
Isaac Waller

ที่จริงแล้วจะใช้เวลานานมากดังนั้นคุณพูดถูก การส่ง Keep-alives ด้วยระยะเวลานานจะช่วยได้มากเช่นกัน
Isaac Waller

อะไรคือ "ช่วงเวลาที่ยาวนาน" ในเรื่องนี้? ฉันรู้ว่า gmail push ทำงานเช่นนี้ แต่ฉันไม่ทราบว่าพวกเขาใช้การหมดเวลาเป็นอย่างไร
tobsen

ฉันพบภาพนี้เกี่ยวกับประสิทธิภาพของแบตเตอรี่ Pull vs Push: labs.ericsson.com/files/battery.jpgฉันใช้มันจาก Ericsson Push API ที่นี่: labs.ericsson.com/apis/mobile-java-push/documentation
Menda

6

ฉันแนะนำให้ใช้GCM - Google Cloud Messaging สำหรับ Android ฟรีและสำหรับการใช้งานที่ง่ายมันควรจะง่ายมาก

อย่างไรก็ตามจำเป็นต้องบำรุงรักษาเซิร์ฟเวอร์ด้านที่ 3 เพื่อส่งการแจ้งเตือนในนามของคุณ หากคุณต้องการหลีกเลี่ยงการที่มีโซลูชั่นทางอุตสาหกรรมที่ดีมากสำหรับบริการแจ้งเตือนแบบพุชของ Android:

  • Urban Airship - ฟรีสูงสุด 1M การแจ้งเตือนต่อเดือนหลังจากนั้นคุณจะถูกเรียกเก็บเงินต่อการแจ้งเตือน 1,000 ครั้ง
  • PushApps - ฟรีสำหรับการแจ้งเตือน 1M ต่อเดือนและการแจ้งเตือนไม่ จำกัด สำหรับ 19.99 ต่อเดือน
  • PushWoosh - ฟรีสำหรับอุปกรณ์ 1M แผนพรีเมียมมาจาก 39 ยูโร

ข้อจำกัดความรับผิดชอบ - ฉันทำงานใน PushApps และใช้ผลิตภัณฑ์ของพวกเขาในแอปพลิเคชันของฉันมานานกว่าหนึ่งปีแล้ว


6

ตั้งแต่วันที่ 18/05/2559 Firebaseเป็นแพลตฟอร์มรวมของ Google สำหรับนักพัฒนามือถือรวมถึงการแจ้งเตือนแบบพุช


4

ฉันเกรงว่าคุณจะพบทั้งสองวิธีที่เป็นไปได้ อย่างน้อยก็ในตอนแรก Google จะใช้ GChat API คุณสามารถใช้สำหรับการดำเนินการแบบผลัก / ดึง น่าเสียดายที่ห้องสมุดนั้นถูกตัดโดย Android 1.0


1
พวกเขาสัญญาว่าจะนำมันกลับมาอีกครั้งเมื่อปัญหาด้านความปลอดภัยหายไป ... หากเกิดขึ้น
Jeremy Logan

3

ฉันไม่รู้ว่านี่ยังมีประโยชน์หรือไม่ ฉันทำสิ่งนี้ด้วยห้องสมุด java ที่http://www.pushlets.com/

การทำเช่นนี้ในบริการจะไม่ทำให้ Android ปิดการทำงานของเธรดการฟัง



2

C2DM: ผู้ใช้แอปของคุณต้องมีบัญชี gmail

MQTT: เมื่อการเชื่อมต่อของคุณถึง 1024 มันจะหยุดทำงานเพราะมันใช้ "select model" ของ linux

มีบริการพุชฟรีและ api สำหรับ Android คุณสามารถลองได้ที่: http://push-notification.org


2

วิธีฟรีและง่าย:

หากฐานผู้ใช้เป้าหมายของคุณไม่ใหญ่ (น้อยกว่า 1,000) และคุณต้องการให้บริการฟรีเริ่มต้น Airbop นั้นดีที่สุดและสะดวกที่สุด

เว็บไซต์ Airbop ใช้บริการ Google Cloud Messaging ผ่าน API และให้ประสิทธิภาพที่ดี ฉันได้ใช้มันสำหรับสองโครงการของฉันและมันง่ายต่อการนำไปใช้

บริการเช่นเดียวกับ Urbanship นั้นยอดเยี่ยม แต่ให้ทั้งกองการปรับใช้และไม่ใช่แค่การแจ้งเตือนแบบพุช

หากเป้าหมายของคุณคือบริการผลักดัน Airbop ก็ใช้ได้ดี

ฉันไม่ได้ใช้Pushwooshแต่ก็เป็นตัวเลือกที่ดีเช่นกัน อนุญาตให้ส่งฟรีถึง 1,000,000 อุปกรณ์


1

ฉันขอแนะนำให้ใช้ทั้ง SMS และ HTTP หากผู้ใช้ไม่ได้ลงชื่อเข้าใช้ส่ง SMS เพื่อแจ้งให้ทราบว่ามีข้อความรออยู่

นั่นคือการทำงานของบริการ Ericsson Labs นี้: https://labs.ericsson.com/apis/mobile-java-push/

หากคุณใช้งานด้วยตัวเองส่วนที่ยุ่งยากคือการลบ SMS ขาเข้าโดยที่ผู้ใช้ไม่เห็น หรืออาจจะไม่เป็นไรถ้าพวกเขาเห็นมันในกรณีของคุณ

ดูเหมือนว่างานนี้: การ ลบ SMS โดยใช้ BroadCastReceiver - Android

ใช่การเขียนโค้ดในลักษณะนี้อาจเป็นอันตรายและคุณอาจทำลายชีวิตของใครบางคนได้เนื่องจากใบสมัครของคุณลบ SMS ที่ไม่ควรมี


1
lol: "ใช่การเขียนโค้ดในลักษณะนี้อาจเป็นอันตรายและคุณสามารถทำลายชีวิตของใครบางคนได้เพราะแอปพลิเคชันของคุณลบ SMS ที่ไม่ควรมี" โหวตขึ้นสำหรับสิ่งนั้น ฮ่า ๆ.
Kumar Ravi

ลิงก์ไปยัง Mobile Java Push นั้นตายไปแล้วและตัวบริการดูเหมือนว่าจะเลิกใช้แล้ว
naXa

1

คุณสามารถใช้ Google Cloud Messaging หรือGCMได้ฟรีและใช้งานง่าย นอกจากนี้คุณสามารถใช้เซิร์ฟเวอร์พุชของบุคคลที่สามเช่นPushWooshซึ่งให้ความยืดหยุ่นมากกว่า


1

มีเซิร์ฟเวอร์ของบุคคลที่สามมากมายเช่นUrban Airship , Xtify, Mainline , ... ซึ่งอนุญาตให้ส่งไม่เพียง แต่บน Android แต่ยังบน iOs, Windows Phone ...


1

Firebase Cloud Messaging (FCM) เป็น GCM เวอร์ชันใหม่ FCM เป็นโซลูชันการส่งข้อความข้ามแพลตฟอร์มที่ให้คุณส่งข้อความอย่างปลอดภัยและฟรี สืบทอดโครงสร้างพื้นฐานส่วนกลางของ GCM เพื่อส่งข้อความที่เชื่อถือได้บน Android, iOS, เว็บ (จาวาสคริปต์), Unity และ C ++

ตั้งแต่วันที่ 10 เมษายน 2018 Google ไม่อนุมัติ GCM เซิร์ฟเวอร์ GCM และ API ไคลเอ็นต์เลิกใช้แล้วและจะถูกลบออกในวันที่ 11 เมษายน 2019 Google แนะนำให้โยกย้ายแอปพลิเคชั่น GCM ไปยัง Firebase Cloud Messaging (FCM) ซึ่งสืบทอดโครงสร้างพื้นฐาน GCM ที่เชื่อถือได้และปรับขนาดได้

ทรัพยากร


0

คุณสามารถใช้Pusher

เป็นบริการโฮสต์ที่ทำให้การเพิ่มข้อมูลและการทำงานแบบเรียลไทม์ลงในเว็บและแอปพลิเคชันมือถือเป็นเรื่องง่าย
Pusher นำเสนอไลบรารีเพื่อรวมเข้ากับ runtimes และเฟรมเวิร์กหลักทั้งหมด

PHP, Ruby, Python, Java, .NET, Go and Nodeบนเซิร์ฟเวอร์
JavaScript, Objective-C (iOS) and Java (Android)ของลูกค้า

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.