2016-06-28 14 views
5

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

+1

Przesyłka krzyżowa: https://groups.google.com/d/msg/firebase-talk/B8wG6CMC8lA/X6KvwaydAwAJ –

+0

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

+1

@Galya Zdecydowałem się nie używać grup urządzeń, po prostu używam w nich tematów o identyfikatorze użytkownika. – Matis

Odpowiedz

3

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 realizacji onTokenRefresh().


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. Modele notification_key_name i notification_key są unikalne dla grupy tokenów rejestracji. Ważne jest, aby notification_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.

+2

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

+0

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? –

+3

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

2

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.

+0

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. –

+0

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

+0

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. –

Powiązane problemy