Android รองรับการแจ้งเตือนแบบพุชตามเวลาจริงหรือไม่?


343

ฉันเพิ่งเรียนรู้เกี่ยวกับความสามารถของแอพ iPhone ในการรับการแจ้งเตือน ทันทีเพื่อแจ้งเตือนแอพไปที่แอ

สิ่งนี้มีให้ในรูปแบบของการแจ้งเตือนแบบพุชโพรโทคอลแบบ bespoke ซึ่งช่วยให้การเชื่อมต่อข้อมูลกับ iPhone และข้อความไบนารีแพ็คเก็ตไปยังแอปซึ่งปรากฏขึ้นอย่างรวดเร็วอย่างไม่น่าเชื่อระหว่าง 0.5-5 วินาที เวลาตอบสนอง. สิ่งนี้ถูกส่งเป็นข้อมูล - แทนที่จะเป็น SMS - ในแพ็คเก็ตขนาดเล็กมากที่ถูกเรียกเก็บเงินซึ่งเป็นส่วนหนึ่งของแผนข้อมูลที่ไม่ได้เป็นข้อความขาเข้า

ฉันอยากจะรู้ว่าถ้าใช้ Android มีสิ่งอำนวยความสะดวกที่คล้ายกันหรือไม่ว่าจะเป็นไปได้ที่จะใช้สิ่งที่ใกล้เคียงกับสิ่งนี้โดยใช้ Android API เพื่อชี้แจงฉันกำหนดที่คล้ายกัน:

  • ไม่ใช่ข้อความ SMS แต่เป็นโซลูชันที่ขับเคลื่อนข้อมูล
  • ตามเวลาจริงเท่าที่จะทำได้
  • สามารถปรับขนาดได้เช่นในฐานะที่เป็นส่วนหนึ่งของเซิร์ฟเวอร์ของแอพมือถือฉันสามารถแจ้งเตือนแอปนับพันได้ในไม่กี่วินาที

ฉันขอบคุณที่แอพสามารถดึงตามสไตล์คำขอ / ตอบกลับของ HTTP แต่ในอุดมคติฉันไม่ต้องการที่จะลงคะแนนเลือกตั้งอย่างหนักเพื่อตรวจสอบการแจ้งเตือน นอกเหนือจากที่มันเป็นเหมือนหยดแผนข้อมูล


3
โดยทั่วไปการแจ้งเตือนสำหรับ gmail และ gchat นั้นอยู่ในเกณฑ์ที่กำหนด ควรมีวิธีการทำซ้ำสิ่งนี้ในแอปของคุณเอง
Dana the Sane

ใช่มีห้องสมุด android ที่ทำให้การส่งข้อความแบบพุชเป็นเรื่องง่ายมาก ... แค่ใส่Jigy's Droid Notifications library ลงในแอพของคุณและจากนั้นก็มีโค้ดประมาณ 10 บรรทัด ... หวังว่านี่จะช่วยได้ :)
Corey Harden

ตรวจสอบPushy ( pushy.me ) สำหรับเกตเวย์การแจ้งเตือนแบบพุชตามเวลาจริงที่ใช้ MQTT ใต้ฝากระโปรงเพื่อเพิ่มความน่าเชื่อถือ การเปิดเผยแบบเต็ม - ฉันก่อตั้ง Pushy
Elad Nava

คำตอบ:


215

FireCM Cloud Messaging FCM คำถามที่พบบ่อยเป็น GCM เวอร์ชันใหม่ มันสืบทอดโครงสร้างพื้นฐานหลักของ GCM เพื่อส่งข้อความที่เชื่อถือได้บน Android, iOS และ Chrome อย่างไรก็ตามพวกเขาจะยังคงสนับสนุน GCM ต่อไปเนื่องจากนักพัฒนาจำนวนมากใช้ GCM SDK ในวันนี้เพื่อจัดการการแจ้งเตือนและการอัปเกรดแอปไคลเอ็นต์ใช้เวลา

ตั้งแต่วันที่ 26 มิถุนายน 2012 Google Cloud Messagingเป็นวิธีที่นิยมในการส่งข้อความไปยังแอปพลิเคชันที่ทำงานบนอุปกรณ์

ก่อนหน้านี้ (และตอนนี้เลิกใช้แล้ว), บริการที่เรียกว่าเมฆกับอุปกรณ์การส่งข้อความ


14
Google มีเอกสารรายละเอียดสำหรับการใช้สิ่งนี้ในแอป Android ของคุณใน Java ที่code.google.com/android/c2dmแต่ไม่มีตัวอย่างโค้ดสำหรับการสื่อสารกับฝั่งเซิร์ฟเวอร์ของ C2DM ฉันเขียนบทช่วยสอนสำหรับด้านนั้นที่นี่: blog.boxedice.com/2010/10/07/…
DavidM

2
มีวิธีเสนอการแจ้งเตือนแบบพุชแก่ผู้ใช้ที่ใช้ Android 2.2 หรือไม่ แต่ทำให้แอพเดียวกันสามารถรันได้บนการกระจายรุ่นเก่าโดยไม่ต้องแจ้งเตือนแบบพุช
OneWorld

3
@OneWorld: ใช่เช่นเดียวกับ Android เทคนิคการทำงานร่วมกันอื่น ๆ ย้อนกลับสะท้อนการใช้กลยุทธ์ที่จะเลือกอื่นเมื่อ C2DM ไม่พร้อมใช้งานสำหรับการเพิ่มเติมโปรดดูที่: developer.android.com/resources/articles/...
โกหกไรอัน

1
developer.android.com/videos/index.html#v=PLM4LajwDVc Google I / O 2010 การนำเสนอเกี่ยวกับการแจ้งเตือนแบบพุช
vokilam

6
C2DM เลิกใช้แล้วอย่างเป็นทางการเมื่อวันที่ 26 มิถุนายน 2012 ใช้ [Google Cloud Messaging สำหรับ Android] ( developer.android.com/guide/google/gcm/index.htmlแทน
Mithun Sreedharan

47

XMPPเป็นทางออกที่ดี ฉันใช้เพื่อแอพพลิเคชั่น Android แบบเรียลไทม์ที่เปิดใช้งานแบบพุช XMPP มีประสิทธิภาพขยายได้สูงและง่ายต่อการรวมและใช้งาน

มีเซิร์ฟเวอร์ XMPP ฟรีมากมาย (แม้ว่าคุณจะไม่สุภาพก็ตาม) และมีเซิร์ฟเวอร์โอเพ่นซอร์สที่คุณสามารถเรียกใช้บนหนึ่งในกล่องของคุณเอง OpenFireเป็นตัวเลือกที่ยอดเยี่ยม

ห้องสมุดที่คุณต้องการไม่Smackตามที่ระบุไว้ข้างต้นก็aSmack แต่โปรดทราบว่านี่เป็นสภาพแวดล้อมการสร้าง - คุณจะต้องสร้างห้องสมุด

นี่เป็นการคำนวณที่ฉันทำกับอายุการใช้งานแบตเตอรี่ที่ส่งผลกระทบต่อโซลูชัน XMPP:

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

  • ใช้แบตเตอรี่ขนาด 1400mAh (ตามที่ระบุใน Nexus One และ HTC Desire)
  • อุปกรณ์ที่ไม่ได้ใช้งานซึ่งเชื่อมต่อกับเครือข่าย 3G ใช้ประมาณ 5mA
  • รอบการเต้นของหัวใจการเต้นการนอนหลับเกิดขึ้นทุก 5 นาทีใช้เวลาสามวินาทีจึงจะเสร็จสมบูรณ์และใช้ 300mA
  • ค่าใช้จ่ายในการใช้แบตเตอรี่ต่อชั่วโมงจึงเป็น:
    • 36 วินาที 300mA = 3mAh ส่งการเต้นของหัวใจ
    • 3600 วินาที 5mA = 5mAh ที่ว่าง
    • 4:95 + 3 = 7: 95mAh รวมกัน
  • แบตเตอรี่ขนาด 1400mAh ใช้งานได้ประมาณ 11.6 วันที่ไม่ได้ใช้งานและ 7.3 วันเมื่อใช้งานแอปพลิเคชั่นซึ่งหมายถึงอายุการใช้งานแบตเตอรี่ลดลงประมาณ 37%
  • อย่างไรก็ตามการลดอายุการใช้งานแบตเตอรี่ถึง 37% แสดงให้เห็นถึงกรณีที่แย่ที่สุดในทางปฏิบัติเนื่องจากอุปกรณ์ไม่ได้ทำงานอย่างสมบูรณ์

2
อย่างไรก็ตามในการใช้งานโทรศัพท์จะใช้เวลา 3 ชั่วโมงเมื่อแอพทำเช่นนี้เนื่องจากมีการแสดงเจตนาเป็นร้อย ๆ ครั้งเมื่อโทรศัพท์ตื่นขึ้นมาหรือเปิดสวิตช์หรือการเปลี่ยนสถานะเครือข่าย
Monstieur

33

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

ฉันมีโพสต์บล็อกพร้อมข้อมูลพื้นฐานในกรณีนี้มันมีประโยชน์http://dalelane.co.uk/blog/?p=938

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


mqtt ทำสิ่งนี้ได้อย่างไร จะต้องมีการสำรวจบางส่วนที่เกี่ยวข้อง? แม้แอปเปิ้ลที่มีการสำรวจความคิดเห็น แต่ฉันคิดว่าพวกเขาเป็นเพียงการทำหนึ่งในการเชื่อมต่อได้ตลอดเวลาดังนั้นจึงไม่ระบายน้ำแบตเตอรี่ที่มาก ...
Janusz

3
ทำได้โดยเปิดการเชื่อมต่อ TCP / IP และเปิดทิ้งไว้ มันไม่ได้โพลแม้ว่าจะต้องส่งข้อความ ping เล็กน้อยในการเชื่อมต่อเป็นครั้งคราวเพื่อให้มันมีชีวิตอยู่
dalelane

MQTT เป็นวิธีการที่แน่นอนหากส่งข้อความพุชผ่าน Google ทำให้คุณรู้สึกไม่สะดวก นอกจากนี้เรายังมีข้อตกลงแบบไม่เปิดเผยกับลูกค้าของเราซึ่งห้ามการใช้บริการคลาวด์สำหรับการแลกเปลี่ยนข้อมูล
VH-NZZ



8

หากคุณสามารถพึ่งพาห้องสมุด Google ที่อยู่ที่นั่นเพื่อตลาดเป้าหมายของคุณคุณอาจต้องการย้อนกลับไปใช้ฟังก์ชั่นGTalk (ลงทะเบียนทรัพยากรในชื่อผู้ใช้ที่มีอยู่ - การสกัดกั้นข้อความเมื่อเข้ามาด้วย

ถ้าไม่ได้และผมคาดว่าคุณไม่สามารถแล้วคุณเป็นbundling รุ่นของคุณเอง XMPP นี่เป็นอาการปวด แต่อาจทำได้ง่ายกว่าหาก XMPP รวมเป็นแยกต่างหากเป็นไลบรารีแบบสแตนด์อโลน

คุณอาจพิจารณาPubSubHububแต่ฉันไม่รู้ว่าการใช้เครือข่ายของมัน ฉันเชื่อว่ามันถูกสร้างขึ้นบน XMPP


ฉันคิดว่าสถิติของบทความว่าการทำงานของ piggy back นั้นจะสามารถใช้ได้ตลอดเวลาตราบเท่าที่ไลบรารี gtalk อยู่ในอุปกรณ์ คุณมีแหล่งข้อมูลพร้อมตัวอย่างวิธีทำจริงหรือไม่?
Janusz

GTalk ถูกลบออกจาก SDK ตั้งแต่ 1.0 (iirc)
MrSnowflake

8

ฉันได้พิจารณาเรื่องนี้แล้วและ PubSubHubBub ที่แนะนำโดย jamesh ไม่ใช่ตัวเลือก PubSubHubBub มีไว้สำหรับการสื่อสารเซิร์ฟเวอร์กับเซิร์ฟเวอร์

"ฉันอยู่หลัง NAT ฉันสามารถสมัครสมาชิกกับ Hub ได้หรือไม่ Hub ไม่สามารถเชื่อมต่อกับฉันได้"

/ ไม่ประสงค์ออกนาม

ไม่ PSHB เป็นโปรโตคอลเซิร์ฟเวอร์ต่อเซิร์ฟเวอร์ หากคุณอยู่หลัง NAT คุณไม่ใช่เซิร์ฟเวอร์จริงๆ แม้ว่าเราจะเริ่มต้นแนวคิดสำหรับส่วนขยาย PSHB ที่เป็นตัวเลือกเพื่อหยุดการรับ ("การสำรวจระยะยาว") และ / หรือการสำรวจกล่องข้อความสำหรับลูกค้าดังกล่าว แต่ไม่ได้อยู่ในข้อมูลจำเพาะหลัก ข้อมูลจำเพาะหลักเป็นเซิร์ฟเวอร์ต่อเซิร์ฟเวอร์เท่านั้น

/ Brad Fitzpatrick, San Francisco, CA

แหล่งที่มา: http://moderator.appspot.com/#15/e=43e1a&t=426ac&f=b0c2d (ไม่สามารถเชื่อมโยงโดยตรง)

ฉันได้ข้อสรุปว่าวิธีที่ง่ายที่สุดคือการใช้ Comet HTTP push นี่เป็นทั้งโซลูชันที่เข้าใจง่าย แต่ก็สามารถนำกลับมาใช้ใหม่สำหรับเว็บแอปพลิเคชันได้


8

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


7

Google เมื่อเร็ว ๆ นี้ (18 พฤษภาคม 2559) ประกาศว่าFirebaseตอนนี้เป็นแพลตฟอร์มแบบครบวงจรสำหรับนักพัฒนามือถือรวมถึงการแจ้งเตือนแบบพุชใกล้แบบเรียลไทม์นอกจากนี้ยังมีหลายแพลตฟอร์ม:

ตอนนี้ บริษัท มีการแจ้งเตือนผู้ใช้ Firebase ฟรีและไม่ จำกัด พร้อมการสนับสนุน iOS, Android และเว็บ

แหล่ง


6

ฉันไม่สามารถหาตำแหน่งที่ฉันอ่านได้ แต่ฉันเชื่อว่า gmail ใช้การเชื่อมต่อ TCP แบบเปิดเพื่อทำการส่งอีเมล


มีโพสต์บล็อกที่joelapenna.com/blog/2009/07/android-foursquare-and-pushโดยผู้พัฒนาแอป Android ที่น่าจะสนับสนุนสิ่งนี้
dalelane

สิ่งเหล่านี้ดูเหมือนจะแก่ฉัน อุปกรณ์มือถือทำการเชื่อมต่อกับเซิร์ฟเวอร์และแจ้งเซิร์ฟเวอร์ที่กำลังรอการอัพเดท การผลักดันที่แท้จริงนั้นเกิดจากเซิร์ฟเวอร์ซึ่งเป็นเรื่องยากมากสำหรับอุปกรณ์มือถือและส่วนใหญ่เกี่ยวข้องกับการสนับสนุนผู้ให้บริการเครือข่าย (sms / wap push) ...
MrSnowflake

1
"C2DM อนุญาตให้นักพัฒนาบุคคลที่สามใช้บริการเดียวกันกับที่แอพ Google ทำ" จาก Android Cloud To Device Messaging
colithium

6

เมื่อGTalkหายไปจาก SDK อาจเป็นความคิดที่ดีที่จะสร้างระบบการส่งข้อความแบบ 'มาตรฐาน' ด้วยวิธีนี้ต้องเปิดใช้บริการเพียงบริการเดียวเท่านั้นจึงต้องเปิดการเชื่อมต่อ tcp พิเศษหนึ่งรายการ แอปพลิเคชันควรพูดคุยกับบริการนี้โดยใช้Intentsและควรขออนุญาตก่อนเพื่อส่งและรับการแจ้งเตือนจากบริการ บริการควรแจ้งให้ผู้ใช้ทราบว่าแอปพลิเคชันใหม่ต้องการส่งและรับข้อความ จากนั้นผู้ใช้จะให้หรือปฏิเสธการอนุญาตดังนั้นเขาจึงสามารถควบคุมได้ แอปพลิเคชันจะลงทะเบียนหมวดหมู่การกระทำ + ไปยังบริการดังนั้นบริการรู้วิธีส่งข้อความที่ส่ง

เป็นความคิดที่ดีหรือไม่


6

ทำไมคุณไม่ไปใช้ XMPP ตอนนี้มีเซิร์ฟเวอร์สาธารณะจำนวนมากที่มีอยู่รวมถึง gtalk, jabber, ป้อมปราการและอื่น ๆ สำหรับ Android มี SDK หนึ่งตัวที่มีชื่อว่า SMACK สิ่งนี้ทำให้เราไม่สามารถแจ้งเตือนแบบพุชได้ แต่ด้วยการใช้ XMPP คุณสามารถเปิดการเชื่อมต่อระหว่างไคลเอนต์และเซิร์ฟเวอร์ซึ่งจะอนุญาตให้มีการสื่อสารสองทาง หมายถึงไคลเอนต์ Android และเซิร์ฟเวอร์ทั้งสองสามารถสื่อสารซึ่งกันและกัน ในปัจจุบันนี้จะตอบสนองความต้องการของ Push ใน Android ฉันได้ติดตั้งโค้ดตัวอย่างและมันใช้งานได้ดีมาก


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

ฉันได้ทำการทดสอบอายุการใช้งานของแบตเตอรี่ - การเต้นของหัวใจที่คุณต้องส่งทุก ๆ หกนาทีจะช่วยลดอายุการใช้งานของแบตเตอรี่ลง 30% ในกรณีที่แย่ที่สุด (เช่นอุปกรณ์จะตื่นขึ้นมาส่งการเต้นของหัวใจเท่านั้น) ในกรณีที่ดีที่สุด (ผู้ใช้กำลังใช้อุปกรณ์สำหรับการเรียกดูการโทร ฯลฯ ) ผลกระทบต่ออายุการใช้งานของแบตเตอรี่จะเล็กน้อย
เนื้อ

6

ฉันเพิ่งพัฒนาhttp://pushdroid.orgเป็นแอปพลิเคชั่นเดียวที่ควรติดตั้งบนโทรศัพท์เช่นเดียวกับ google ที่ได้ติดตั้งไว้ใน 2.2 ผลงานนี้จาก 1.5 และเผยแพร่ผ่านเจตนา


4

ปัญหาเกี่ยวกับ GCM คือมีการกำหนดค่าจำนวนมากที่เกี่ยวข้องในกระบวนการ:

  • คุณต้องเพิ่มจำนวนมากไปยังแอพ Android ของคุณ
  • คุณต้องกำหนดค่าเซิร์ฟเวอร์ภายนอกเพื่อสื่อสารกับเซิร์ฟเวอร์ GCM
  • คุณจะต้องเขียนแบบทดสอบ

ถ้าคุณชอบสิ่งที่ง่าย (เช่นฉัน) คุณควรลองUrbanAirship เป็น (IMHO) วิธีที่ง่ายที่สุดในการใช้ GCM ในแอปของคุณโดยไม่ต้องทำการปรับแต่งมากมาย นอกจากนี้ยังช่วยให้คุณมี GUI ที่น่ารักเพื่อทดสอบว่ามีการส่งข้อความ GCM ของคุณอย่างถูกต้อง

  • คุณสามารถค้นหาเอกสารและคู่มือเริ่มต้นได้ที่นี่
  • คุณสามารถค้นหาแอปพลิเคชันตัวอย่างได้ที่นี่

หมายเหตุ: ฉันไม่ได้เป็นแฟนกับ UrbanAirship แต่อย่างใด



2

พวกเขามีผู้ฟังที่คุณต้องใช้โดยใช้คลาสไลบรารีในโค้ดของคุณ คุณไม่จำเป็นต้องกังวลเกี่ยวกับการผลักดัน คุณต้องส่งข้อความไปยังเซิร์ฟเวอร์เซิร์ฟเวอร์จะส่งข้อความไปยังอุปกรณ์ พวกเขาใช้ OAuth เกี่ยวกับโปรโตคอลมีสองวิธีที่ใช้ CCS และ XMPP CCS ใช้ XMPP เป็นเลเยอร์การขนส่งที่ผ่านการตรวจสอบความถูกต้องแล้วดังนั้นคุณสามารถใช้ไลบรารี XMPP ส่วนใหญ่เพื่อจัดการการเชื่อมต่อ ในการส่งการแจ้งเตือนไปยังอุปกรณ์คุณสามารถเขียนรหัสในแอพ Android เพื่อส่งเช่นเดียวกับรหัสเซิร์ฟเวอร์ของคุณ รหัสของคุณจะทำการส่งข้อความเท่านั้น ส่วนที่เหลือจะได้รับการดูแลโดยเซิร์ฟเวอร์ Google ในกรณี GCM คุณสามารถตรวจสอบรายละเอียดได้ที่ลิงค์นี้

http://developer.android.com/google/gcm/server.html

นอกจากนี้สำหรับปัญหาด้านความปลอดภัย

ความปลอดภัยในการส่งข้อความของ Google Cloud https://groups.google.com/forum/#!topic/android-gcm/M-EevBitbhQ

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

http://developer.android.com/google/gcm/client.html

มันจะยอมรับคำขอจากผู้ใช้ด้วย สำหรับ GCM มันจะทำ กรุณาตรวจสอบ "ส่งข้อความ"

http://developer.android.com/google/gcm/client.html

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