FCM กับ AWS SNS


95

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

1. ไม่AWSรองรับFCM? SNSทำงานกับGCM. แต่ Google ขอแนะนำให้ใช้ FCM GCMแทน ฉันไม่พบการสนับสนุนAWSFCM

2. AWSเก็บข้อความ (หรือข้อมูล) ไว้ในฐานข้อมูลแม้ว่าจะส่งการแจ้งเตือนแบบพุชแล้วก็ตาม?

3. ฉันลองใส่คีย์ FCM api ในแพลตฟอร์มแอปพลิเคชัน SNS มันแสดงพารามิเตอร์ที่ไม่ถูกต้องทำไม?


SNS ยังไม่รองรับ FCM ใช้ GCM เวอร์ชันที่เลิกใช้แล้ว คุณได้รับคีย์ API จากที่ไหน
Arthur Thompson

1
สิ่งที่ฉันลองคือฉันพยายามใส่คีย์ api ของ FCM ใน SNS และไม่ได้ผลหลังจากอ่านเอกสารใน AWS (SNS) ที่พวกเขากล่าวถึงเพื่อใส่รหัสเซิร์ฟเวอร์ ฉันลองแล้วได้ผลดี ฉันสามารถส่งข้อความ Push ผ่าน SNS สำหรับ FCM ได้ ไม่รู้เหตุผลว่าทำไมถึงได้ผล แน่ใจหรือว่า SNS ไม่รองรับ FCM ในขณะนี้
Naroju

ถูกต้องว่าต้องใช้คีย์เซิร์ฟเวอร์ในการส่งข้อความ GCM (ตอนนี้คือ FCM) ในฝั่งไคลเอ็นต์ (อุปกรณ์เคลื่อนที่) โดยทั่วไป GCM และ FCM จะเหมือนกันดังนั้นทั้งสองจะได้รับข้อความตามที่คาดไว้ อย่างไรก็ตามมีคุณสมบัติบางอย่างของ FCM ที่ใช้งานไม่ได้เช่นการส่งข้อความตามหัวข้อ
Arthur Thompson

เป็นไปได้ไหมที่จะใช้หัวข้อ sns กับ fmc ขอบคุณสำหรับคำตอบที่ยอดเยี่ยม
Juan Jose Tugores

ประโยชน์ของการใช้ SNS ในตอนแรกคืออะไร? FCM ไม่ควรเพียงพอหรือไม่?
Khaled Osman

คำตอบ:


194

FCM เข้ากันได้กับ GCM ขั้นตอนในการตั้งค่า FCM บน AWS จะเหมือนกับขั้นตอนการตั้งค่า GCMและ (อย่างน้อยก็ในขณะนี้) FCM ทำงานอย่างโปร่งใสกับ GCM และ SNS ในส่วนที่เกี่ยวกับการกำหนดค่าฝั่งเซิร์ฟเวอร์

แต่ถ้าคุณกำลังส่งdatapayloads กับอุปกรณ์ Android ที่พวกเขาจะไม่สามารถดำเนินการจนกว่าคุณจะใช้บริการด้านลูกค้าFirebaseMessagingServiceที่ขยาย ตัวสร้างข้อความ JSON เริ่มต้นในคอนโซล AWS จะส่งdataข้อความซึ่งแอปของคุณจะไม่สนใจเว้นแต่จะใช้บริการดังกล่าวข้างต้น ในการหลีกเลี่ยงปัญหานี้สำหรับการทดสอบเบื้องต้นคุณสามารถจัดเตรียมเพย์notificationโหลดที่กำหนดเองซึ่งอุปกรณ์ของคุณจะได้รับ (ตราบใดที่แอปของคุณไม่ได้อยู่เบื้องหน้า)

มีคำแนะนำในการย้ายข้อมูล GCM-FCM ที่จัดทำโดย Google อย่างไรก็ตามการเปลี่ยนแปลงที่คุณต้องทำส่วนใหญ่จะอยู่ที่ฝั่งแอป

ขั้นตอนที่คุณต้องปฏิบัติตามเพื่อทดสอบ GCM / FCM บนแอปของคุณด้วย SNS ได้แก่

  1. สร้างแอปพลิเคชันแพลตฟอร์มใน SNSเลือก Google Cloud Messaging (GCM) เป็นแพลตฟอร์มการแจ้งเตือนแบบพุชและระบุคีย์เซิร์ฟเวอร์ APIของคุณในฟิลด์คีย์ API
  2. เลือก Application Platform และคลิกที่ปลายทางสร้างแพลตฟอร์มปุ่ม
  3. ระบุ InstanceID ( โทเค็นอุปกรณ์ ) ที่สร้างโดยแอปของคุณ คุณต้องขยายFirebaseInstanceIDServiceและแทนที่onTokenRefreshวิธีการเพื่อดูสิ่งนี้ภายในแอป Android ของคุณ เมื่อคุณดำเนินการเสร็จสิ้นแล้วให้ถอนการติดตั้งและติดตั้งแอปของคุณใหม่และโทเค็นของคุณควรถูกพิมพ์ไปยังคอนโซลการแก้ปัญหาใน Android Studio ในการบูตครั้งแรก
  4. คลิกเพิ่มปลายทางปุ่ม
  5. คลิกที่ลิงค์ ARN สำหรับแอปพลิเคชันแพลตฟอร์มของคุณ
  6. เลือกปลายทางที่สร้างขึ้นใหม่สำหรับอุปกรณ์ของคุณและคลิกที่เผยแพร่ไปยังปลายทางปุ่ม
  7. เลือก JSON รูปแบบข้อความและคลิกที่กำเนิดข้อความ JSONปุ่ม
  8. ใส่ข้อความทดสอบและคลิกJSON สร้างปุ่ม
  9. ตอนนี้ "ส่วน gotcha" มาแล้ว

ข้อความที่สร้างโดย SNS จะอยู่ในรูปแบบ:

{
"GCM": "{ \"data\": { \"message\": \"test message\" } }"
}

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

{
"GCM": "{ \"notification\": { \"text\": \"test message\" } }"
}

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

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


2
คำตอบที่ยอดเยี่ยมขอบคุณ เป็นที่น่าสังเกตว่า json มีรายละเอียดเชิงลึกเกี่ยวกับตัวเลือกการกำหนดค่าโปรดดูdeveloper.google.com/cloud-messaging/concept-optionsแม้ว่าฉันจะยังไม่ได้ทดสอบฟังก์ชันการทำงานเฉพาะ FCM ก็ตาม
ทอม

dataข้อความทำงานได้ดีโดยใช้ sns แม้ว่าแอปไคลเอ็นต์จะไม่ใช้ FCM แต่เป็น GCM ในแอปของฉันฉันไม่ได้อัปเกรดเป็น FCM ในฝั่งไคลเอ็นต์ แต่ FCM ที่ใช้ SNS ก็ใช้ได้ดีกับdataข้อความเช่นกัน มันไม่ควรทำงาน?
Sash_KP

2
SNS ใช้ GCM ดังนั้นหากคุณใช้ไคลเอ็นต์ GCM ควรทำงานตามปกติ (จนถึงจุดที่ Google ตัดสินใจเลิกใช้ GCM) คำถามนี้เกี่ยวข้องกับการสนับสนุน FCM บน AWS (ซึ่งรองรับผ่านความเข้ากันได้แบบย้อนหลังในฝั่ง Google API)
Nathan Dunn

เป็นไปได้ไหมที่จะใช้หัวข้อ sns กับ fmc ขอบคุณสำหรับคำตอบที่ยอดเยี่ยม
Juan Jose Tugores

ยินดีต้อนรับ - ใช่คุณสามารถสมัครจุดสิ้นสุดการพุชมือถือทีละรายการ (เช่น GCM-> FCM) ไปยังหัวข้อ SNS ได้ตามปกติอย่างไรก็ตามสิ่งนี้จะสร้างข้อความจำนวนมากภายใน AWS หากคุณใช้ฝั่งไคลเอ็นต์ FCM อีกทางเลือกหนึ่งคือการใช้หัวข้อ FCM หรือกลุ่มผู้ใช้ซึ่งจะเดินทางผ่านเซิร์ฟเวอร์ของ Google เท่านั้น
Nathan Dunn

14

ตอนนี้คุณสามารถไปที่คอนโซล firebase ของคุณ ( https://console.firebase.google.com/ ) เลือกโครงการของคุณคลิกไอคอนรูปเฟืองและเลือกการตั้งค่าโครงการจากนั้นคลิกที่แท็บข้อความบนคลาวด์ ...

คุณจะเห็นรหัสเซิร์ฟเวอร์เดิมซึ่งเป็นคีย์ API ของ GCM และคุณจะมีตัวเลือกในการสร้างคีย์เซิร์ฟเวอร์ใหม่ซึ่งเป็นเวอร์ชัน FCM

SNS จะยอมรับทั้งสองเวอร์ชัน แต่ตัวเลือกเมนูยังคงจัดหมวดหมู่ภายใต้ GCM

นี่คือภาพสำหรับการอ้างอิงของคุณ:

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

โปรดทราบว่าคุณสามารถ "ลบคีย์เซิร์ฟเวอร์" โดยไม่ได้ตั้งใจ แต่ไม่สามารถลบคีย์เซิร์ฟเวอร์เดิมได้ นอกจากนี้หากคุณคลิกปุ่มเพิ่มคีย์เซิร์ฟเวอร์คุณจะได้รับคีย์เซิร์ฟเวอร์ใหม่ด้านล่างคีย์แรกโดยไม่มีคำเตือน! ... เยี่ยมมาก Google;)


6

อีกหนึ่งข้อสังเกตเพิ่มเติมสำหรับคำตอบที่ยอดเยี่ยมของ Nathan Dunn วิธีส่งข้อมูลด้วยการแจ้งเตือนจาก SNS ไปยัง Firebase

เราจำเป็นต้องเพิ่มข้อมูลใน Json (ภายในการแจ้งเตือน):

{
    "default": “any value", 
     "GCM": "{ \"notification\": { \"body\": \”message body\”, \”title\”: \”message title \”, \"sound\":\"default\" } , \"data\" : {\”key\" : \”value\", \”key2\" : \”value\” } }”
}

ในการใช้งาน FirebaseMessagingService ของคุณ (ตัวอย่าง Xamarin)

public override void OnMessageReceived(RemoteMessage message)
{

    try
    {

        var body = message?.GetNotification()?.Body;
        var title = message?.GetNotification()?.Title;
        var tag = message?.GetNotification()?.Tag;
        var sound = message?.GetNotification()?.Sound;

        var data = message?.Data
        foreach (string key in data.Keys)
        {
            // get your data values here
        }

    }
    catch (Exception e)
    {
    }
}

โทเค็น FCM อยู่ที่ไหน
JPM

ฉันจะส่ง URL รูปภาพใน payload ได้อย่างไร
tarek noaman

5

ฉันพยายามใช้โซลูชันกับเพย์โหลดการแจ้งเตือนแทนข้อมูล แต่ฉันไม่ได้รับการแจ้งเตือนแบบพุชบนอุปกรณ์มือถือ ฉันพบบทช่วยสอนนี้https://youtu.be/iBTFLu30dSgพร้อมคำบรรยายภาษาอังกฤษเกี่ยวกับวิธีใช้ FCM กับ AWS SNS ทีละขั้นตอนและตัวอย่างวิธีส่งการแจ้งเตือนแบบพุชจากคอนโซล AWS และนำไปใช้บน php ด้วย aws php sdk มันช่วยฉันได้มาก


3

หมายเหตุเพิ่มเติมสำหรับคำตอบของ Nathan Dunn: ในการเพิ่มเสียงให้ใช้ข้อความ JSON ต่อไปนี้

{
"GCM": "{ \"notification\": { \"text\": \"test message\",\"sound\":\"default\" } }"
}

ฉันจะส่ง URL รูปภาพใน payload ได้อย่างไร
tarek noaman

0

ฉันใช้เวลาสักพักในการหาวิธีส่งการแจ้งเตือนด้วยเพย์โหลดที่ถูกต้อง (เผยแพร่ในหัวข้อ) เลยจะเอามาฝากค่ะ

private void PublishToTopic(string topicArn)
{
    AmazonSimpleNotificationServiceClient snsClient = 
           new AmazonSimpleNotificationServiceClient(Amazon.RegionEndpoint.EUWest1);
    PublishRequest publishRequest = new PublishRequest();
    publishRequest.TopicArn = topicArn;
    publishRequest.MessageStructure = "json";
    string payload = "\\\"data\\\":{\\\"text\\\":\\\"Test \\\"}";
    publishRequest.Message = "{\"default\": \"default\",\"GCM\":\"{" + payload + "}\"}";
    PublishResponse publishResult = snsClient.Publish(publishRequest);
}    

0

Amazon รองรับ FCM เนื่องจากมีการย้ายรหัสก่อนหน้าทั้งหมดจาก GCM ไปยัง FCM บทความด้านล่างอธิบายรายละเอียด

บทความเผยแพร่โดย Amazon


ควรอ่านเนื่องจาก Amazon ไม่รองรับ GCM
Siva Karthikeyan

-1

เพื่อตอบคำถาม:

  1. AWS SNS รองรับ FCM
  2. ไม่มี AWS ไม่เก็บข้อความหลังจากส่งการแจ้งเตือนแบบพุช

สำหรับคำแนะนำโดยละเอียดเกี่ยวกับการตั้งค่า FCM ด้วย SNS โปรดอ่านบทความนี้

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