Zamierzam opracować aplikację korzystającą z funkcji grup urządzeń. Jak rozumiem, muszę najpierw wysłać na serwer bieżący token rejestracyjny, który dostaję na klienta Android w metodzie onTokenRefresh
, a następnie dodać token rejestracji do odpowiedniej grupy urządzeń (lub utworzyć, jeśli nie istnieje) za pośrednictwem żądania HTTP. Widzę jednak potencjał dla przeciekających tokenów rejestracji, ponieważ użytkownik aplikacji na Androida może na przykład wielokrotnie czyścić dane aplikacji. Jak temu zapobiec? Co się stanie, gdy przekroczony zostanie limit 20 członków? I czy można sprawdzić, czy jakaś grupa już istnieje, czy nie?Grupy urządzeń Firebase Cloud Messaging wyciek
Odpowiedz
widzę jednak potencjalny wyciek znaków rejestracyjnych, jak Android app użytkownik może przykładowo wymaż dane wielokrotnie aplikacji. Jak temu zapobiec?
Jeśli przez zapobiegając masz na myśli wyłączenie Wyczyść dane dla aplikacji w menedżerze aplikacji, należy odnieść się do tej post. accepted answer stwierdza, że nie jest to możliwe.
Jednak Jakar's answer stanowi obejście gdzie zamiast Wyczyść dane, Zarządzanie Spaces pojawi się zamiast. Jeszcze go nie wypróbowałem, więc nie mogę powiedzieć na pewno. Upvotes mówią jednak same za siebie.
Ale jeśli kiedykolwiek dane Aplikacja jest wycierane/usunięte przez użytkownika, należy skorzystać z tego, co jest powiedziane w FirebaseInstanceId docs:
Instance ID jest stabilny, z wyjątkiem gdy:
App usuwa Instance ID
App jest przywracany na nowym urządzeniu
Użytkownik odinstaluje/przeinstalować aplikację
użytkownik wyczyści dane aplikacji
W powyższych przypadkach nowy
Instance ID
jest generowanych i aplikacja musi odtworzyć zezwolenia żetony wcześniej wygenerowany realizacjionTokenRefresh()
.
Co się dzieje, gdy zostanie przekroczony limit 20 członków?
Nie wiem, co tu jest pytanie .. Ale jeśli odnoszące się do dodawania urządzeń do urządzenia Grupy więcej niż maksimum ...
nie był w stanie znaleźć to wyraźnie stwierdzone w FCM: Device Group Messaging docs, ale jeśli odnoszą się do Dodaj do grupy sekcję, stwierdza:
Udana operacja zwraca
notification_key
.
więc od tego, myślę, że jeśli kiedykolwiek spróbować dodać kolejne urządzenie do już maxed z grupy urządzeń, operacja będzie nie.
Proponuję zamiast tego użyć Topics, jeśli myślisz, że masz więcej niż 20 lat. Ale tak naprawdę nie wiem, jaki jest twój przypadek użycia, więc ... twój telefon.
I czy to możliwe, by sprawdzić, czy jakaś grupa już istnieje, czy nie?
W tym celu należy skorzystać z notification_key
i notification_key_name
. Zgodnie z docs:
notification_key_name
jest nazwą i identyfikator (na przykład może to być użytkownika), który jest unikatowy dla danej grupy. Modelenotification_key_name
inotification_key
są unikalne dla grupy tokenów rejestracji. Ważne jest, abynotification_key_name
była unikatowa dla każdej aplikacji klienckiej, jeśli masz wiele aplikacji klienckich dla tego samego identyfikatora nadawcy. Zapewnia to, że wiadomości trafiają tylko do zamierzonej aplikacji docelowej.
i podkreślając na rachunku:
Podstawowe zarządzanie grupami urządzeń - tworzenia i usuwania grup oraz dodawanie lub usuwanie urządzeń - jest zwykle wykonywane przez serwer aplikacji.
Klucze i nazwy powinny znajdować się na serwerze, aby można było sprawdzić, czy już istnieje.
Przez "zapobieganie" miałem na myśli zapobieganie wyciekowi identyfikatora rejestracji. Wyczyszczenie danych aplikacji było tylko przykładem, jak szybko je przeciekać - jeśli nowy token jest przypisany, a stary nie jest usuwany, mamy przeciek. – Matis
Rozumiem. - * jeśli nowy token jest przypisany, a stary nie jest usuwany, mamy przeciek * - Czy to nie jest po prostu obsługiwane po stronie serwera? Korzystasz z identyfikatorów Canonical? Inne scenariusze powinny być obsługiwane w samej aplikacji klienckiej? –
Kanoniczne identyfikatory mogą być rozwiązaniem, ale nie są wyraźnie wymienione w dokumentach FCM (tylko GCM). (Jest wzmianka na https://firebase.google.com/docs/cloud-messaging/server#response, ale nie wyjaśnia, dlaczego i kiedy zwracane są te kanoniczne identyfikatory). Ale chcę używać grup urządzeń, więc operuję na identyfikatorze rejestracji pojedynczego urządzenia tylko przy dodawaniu go do grupy. Chciałbym również wyjaśnić moje ostatnie pytanie: Wiem, że muszę przechowywać grupy na serwerze mojej aplikacji, ale czasami mogą one nie być zsynchronizowane z serwerami FCM, dlatego chciałbym sprawdzić, czy grupa z danymi "nazwa_numeru_wiadomego" istnieje. – Matis
Obecnie wykonuję co następuje z pewnym sukcesem, ale nie w pełni przetestowane lub skalowane jeszcze.
Aplikacja używa firebase jako zaplecza i dodaję FCM do realizacji powiadomień push.
Potrzebuję grup do obsługi, gdy użytkownik może znajdować się na różnych urządzeniach lub kilku urządzeniach.
przechowywać zwrócony notification_key wartości i registration_id (żeton) dla każdego urządzenia z profilem tj
profiles
-profile_id
-FCM
-notification_key:value
-registration_ids
-device_1_uuid:token_for_device_1
-device_2_uuid:token_for_device_2
gdy użytkownik pierwsze oznaki na nie ma danych pod FCM węzeł czyli nie notification_key i żaden registration_ids
Za każdym razem, gdy użytkownik się zaloguje, łączy się z ich profilem.
uzyskać token FCM a następnie
Jeśli nie ma żadnego notification_key (czyli pierwszy raz na każdym urządzeniu) tworzę grupę używając PROFILE_ID jako notification_key_name i przechowywania notification_key że wraca.
Jeśli istnieje przycisk powiadomień (logowanie powrotne lub pierwsze logowanie na nowym urządzeniu), widzę, czy istnieje numer rejestracyjny dla bieżącego urządzenia, a jeśli nie (pierwsze logowanie na nowym urządzeniu), dodaj device_uuid: para tokenów dla registration_ids.
Jeśli jest (powrotne wpisanie), usuwam zapisany token z grupy FCM i zastępuję stary token w moich zapisanych numerach rejestracyjnych za pomocą tokenu, który właśnie dostałem.
Mogę teraz wysyłać wiadomości do wszystkich urządzeń używanych przez tego użytkownika (profil), wysyłając je do ich profile id, i nie powinienem być przeciekającymi tokenami, ponieważ usuwam stare.
Nie mam jednak sposobu, aby się dowiedzieć, ponieważ interfejs API i API nie jest po prostu czytaniem grupy i tokenów, dzięki czemu grupy mogą być czyszczone co jakiś czas.
Również mój wczesny kod był błędnie pobrany, a ja nie przechwyciłem kodu powiadomień, więc teraz nie mogę dodawać, usuwać ani wykonywać żadnych czynności w jednej z moich grup. Nienawidzę idei, że będę musiał zostawić spalone grupy leżące w chmurze ogniowej na wieki wieków.
Myślę, że FCM powinien zapewnić więcej dostępu do API, aby pomóc nam utrzymać porządek w tym miejscu.
Podążam za tym samym podejściem, mam pytanie. FCM automatycznie usuwa grupę urządzeń, jeśli nie są z nią powiązane żadne urządzenia. Jak sobie radzisz z tą sprawą? Zgodnie z moim rozumieniem, jeśli token nie jest już valiid, jego automatyczne usunięcie z grupy w FCM. –
Po usunięciu tokena z grupy, ponieważ został on zastąpiony na moim urządzeniu, jeśli jest token ostatni/jedyny, grupa FCM zostaje usunięta i pojawia się błąd podczas próby zarejestrowania nowego tokenu. Przechwycę błąd przez jego wiadomość tekstową, tj. "Notyfikator nie został znaleziony" i wywołuje na nim moją funkcję create_group, aby ponownie utworzyć nową grupę z tym samym kluczem powiadomień co poprzednio i dodaje do niego token. To trochę dziwne, ale w podobny sposób używam również tekstu błędu "notification_key już istnieje" jako warunku do zarejestrowania dodatkowego tokena dla nowego urządzenia. – blythburgh
Tak, tak właśnie sobie z tym radzę, ale zastanawiałem się, czy jest jakieś lepsze podejście, ponieważ wydaje się to trochę hacky. –
- 1. FireBase Cloud Messaging Nie działa
- 2. Firebase Cloud Messaging Powiadomienie Wibracja
- 3. Firebase Cloud Messaging - Jak weryfikować tokeny?
- 4. Czy usługa Firebase Cloud Messaging jest darmowa?
- 5. Czy Firebase Cloud Messaging HIPAA jest zgodny?
- 6. Jak wyrejestrować telefon z Firebase Cloud Messaging
- 7. Google Cloud Messaging (fake_message_id)
- 8. Ile tematów możemy podać w Firebase Cloud Messaging?
- 9. FCM (Firebase Cloud Messaging) jak wysłać do wszystkich telefonów?
- 10. Co należy podać w kluczu autoryzacji w Firebase Cloud Messaging
- 11. Gdzie mogę znaleźć KLUCZ API dla usługi Firebase Cloud Messaging?
- 12. Android nie może przedłużyć Firebase Messaging Service
- 13. Konfigurowanie strony serwerowej dla Google Cloud Messaging
- 14. Google Cloud Messaging Server z auto skalowania
- 15. Google Cloud Messaging bez działającej transmisji danych
- 16. C2DM DO Google Cloud Messaging (GCM)
- 17. Czy Google Cloud Messaging może współpracować z Facebookiem?
- 18. Jak zdobyć token rejestracji w usłudze Firebase Cloud Messaging bez pytania o zgodę na powiadomienia?
- 19. Awaria generowania tokenu Google Cloud Messaging (GCM) po aktualizacji usług Google Play związanej z Firebase
- 20. Firebase Cloud Messaging - Android: kliknięcie powiadomienia po zamknięciu aplikacji nie działa
- 21. curl wysłany Alert Firebase Cloud Messaging nie pojawia się widocznie na urządzeniu z systemem iOS
- 22. Czy usługa Firebase Cloud Messaging obsługuje wszystkie najważniejsze przeglądarki lub po prostu Chrome?
- 23. Wysyłanie wiadomości przez Listonosza za pomocą Firebase Messaging
- 24. Określone urządzenie nie odbierające powiadomień w Google Cloud Messaging
- 25. Jak wyłączyć usługę Google Cloud Messaging dla nazwy pakietu
- 26. GCM (Google Cloud Messaging) nie wysyła błędu podczas deinstalacji aplikacji
- 27. Jak działa usługa Google Cloud Messaging w systemie Android?
- 28. Google Cloud Messaging (GCM) - nie można utworzyć instancji odbiornika - java.lang.ClassNotFoundException
- 29. dlaczego nie mogę zainstalować Google Cloud Messaging dla Androida Biblioteki
- 30. Android Google Cloud Messaging (GCM) i identyfikator braku nadawcy
Przesyłka krzyżowa: https://groups.google.com/d/msg/firebase-talk/B8wG6CMC8lA/X6KvwaydAwAJ –
Po 4 miesiącach masz jakieś postępy? Chciałbym wiedzieć, w jaki sposób obchodzić się z wygasłymi tokenami w grupach urządzeń; powinieneś jakoś jednoznacznie zidentyfikować urządzenie ... – Galya
@Galya Zdecydowałem się nie używać grup urządzeń, po prostu używam w nich tematów o identyfikatorze użytkownika. – Matis