Nearby Connections to interfejs sieci peer-to-peer służący do komunikacji w sieci w czasie rzeczywistym, bez względu na połączenie sieciowe. Interfejs API znajduje się w pakiecie com.google.android.gms.nearby.connection
.
Przykładowe zastosowania:
- Współdzielona tablica: zapisuj pomysły innym uczestnikom w pobliżu.
- Lokalne gry wieloosobowe: możesz skonfigurować grę wieloosobową i zaprosić do niej innych użytkowników.
- Gry na wielu urządzeniach: jako kontroler do gier możesz używać telefonu lub tabletu, aby grać w gry wyświetlane na pobliskim dużym urządzeniu z Androidem, np. na Androidzie TV.
- Przesyłanie plików offline: szybkie udostępnianie zdjęć, filmów i innych danych bez konieczności połączenia się z siecią.
Wprowadzenie
Połączenia w pobliżu umożliwiają reklamy, wykrywanie i połączenia między urządzeniami w pobliżu w pełni offline i peer-to-peer. Połączenia między urządzeniami mają dużą przepustowość, małe opóźnienie i pełne szyfrowanie, co zapewnia szybkie i bezpieczne przesyłanie danych.
Głównym celem tego interfejsu API jest zapewnienie platformy, która jest prosta, niezawodna i wydajna. Co ważne, interfejs API korzysta z kombinacji hotspotów Bluetooth, BLE i Wi-Fi, wykorzystując ich mocne strony, a jednocześnie omija ich mocne strony. Pozwala to łatwo odizolować funkcje Bluetooth i Wi-Fi w różnych wersjach systemu operacyjnego Android i sprzęcie. Dzięki temu programiści mogą skupić się na funkcjach, które są ważne dla użytkowników.
Dla wygody użytkowników nie wyświetla się prośba o włączenie Bluetootha lub Wi-Fi. Połączenia w pobliżu włączają te funkcje w razie potrzeby, a po zakończeniu przywracania urządzenia do poprzedniego stanu, zapewniając płynność działania.
Przegląd interfejsów API
Korzystanie z interfejsu API należy do 2 etapów: przed połączeniem i po połączeniu.
Na etapie poprzedzającym połączenie reklamodawcy reklamują się, a odkrywcy odkrywają reklamodawców w pobliżu i wysyłają prośby o połączenie. Prośba o połączenie wysłana z Discovery do reklamodawcy inicjuje symetryczny proces uwierzytelniania, który powoduje, że obie strony niezależnie akceptują (lub odrzucają) prośbę o połączenie.
Po zaakceptowaniu prośby o połączenie przez obie strony uznaje się, że połączenie zostało nawiązane, a urządzenia przechodzą fazę po nawiązaniu połączenia, w której obie strony mogą wymieniać dane.
Reklama i odkrywanie
Reklamodawcy najpierw wywołują tag startAdvertising()
, przekazując wartość ConnectionLifecycleCallback
, która jest powiadamiana za każdym razem, gdy twórca strony chce nawiązać połączenie przez wywołanie zwrotne onConnectionInitiated()
.
Wykrywanie rozpoczyna się od wywołania metody startDiscovery()
. Przekazuje ona EndpointDiscoveryCallback
, który otrzymuje powiadomienie za każdym razem, gdy znajdziemy pobliskiego reklamodawcę za pomocą wywołania zwrotnego onEndpointFound()
.
Nawiązywanie połączeń
Prezenter, który chce się połączyć z reklamodawcą w pobliżu, wywołuje metodę requestConnection()
i przekazuje ConnectionLifecycleCallback
.
Obie strony są następnie powiadamiane o procesie inicjowania połączenia za pomocą wywołania zwrotnego ConnectionLifecycleCallback.onConnectionInitiated()
. Obie strony muszą teraz zdecydować, czy zaakceptować, czy odrzucić połączenie przez wywołanie odpowiednio acceptConnection()
lub rejectConnection()
.
W tym momencie aplikacje mogą też poprosić użytkownika o zaakceptowanie połączenia. Więcej informacji znajdziesz w artykule Uwierzytelnianie połączenia.
Gdy obie strony odpowiedzą, każda strona otrzyma powiadomienie o wyniku w wywołaniu zwrotnym ConnectionLifecycleCallback.onConnectionResult()
. Jeśli obie strony zaakceptują połączenie, tag ConnectionResolution
podany w wywołaniu zwrotnym zakończy się powodzeniem, połączenie zostanie uznane i rozpocznie się przesyłanie ładunków.
Wymiana danych
Po nawiązaniu połączenia kolejne użycie interfejsu API jest symetryczne, więc nie ma już podziału na reklamodawcę i odkrywającego.
Obie strony mogą teraz wymieniać dane jako obiekty Payload
. Dostępne są 3 typy obsługiwanych ładunków:
BYTES
Komplaty bajtów ograniczone do 32 tys.. Świetnie sprawdzają się przy wysyłaniu takich metadanych jak metadane czy wiadomości kontrolne.FILE
Pliki o dowolnym rozmiarze. Są one przesyłane z aplikacji do interfejsu sieciowego przy minimalnym stopniu kopiowania danych przez proces.STREAM
Strumień danych generowany na bieżąco, tak jak w przypadku nagrań audio/wideo, bez znanego końcowego rozmiaru.
Nadawcy używają metody sendPayload()
do wysyłania ładunku. Ta metoda może zostać wywołana wiele razy, ale ponieważ gwarantujemy dostawę w ramach zamówienia, drugi ładunek zostanie umieszczony w kolejce do wysłania aż do ukończenia pierwszego ładunku.
Odbiorcy mogą oczekiwać wywołania wywołania PayloadCallback.onPayloadReceived()
po otrzymaniu nowego ładunku.
Nadawcy i odbiorcy mogą spodziewać się wywołania zwrotnego PayloadCallback.onPayloadTransferUpdate()
w celu zaktualizowania odpowiednio informacji o postępach ładunków wychodzących i przychodzących.
Nawiązywane połączenia to pełne dupleksy, co oznacza, że Reklamodawcy i Odkrywcy mogą jednocześnie wysyłać i odbierać ładunki.
Rozłączam
Na koniec disconnectFromEndpoint()
rozłącza się z konkretnym zdalnym punktem końcowym, a stopAllEndpoints()
rozłącza się ze wszystkimi połączonymi punktami końcowymi.
Zdalne punkty końcowe są powiadamiane o rozłączeniu za pomocą ConnectionLifecycleCallback.onDisconnected()
.
Zbieranie danych
Gdy korzystasz z pakietu SDK SDK w pobliżu, zbierane są statystyki użytkowania, aby zwiększyć wygodę użytkowników.
- Wskaźniki wydajności: podczas wykrywania i łączenia urządzeń za pomocą SDK w pobliżu zbierane są informacje o czasie wykrywania i połączenia, niezawodności i przepustowości.
- Informacje o urządzeniu: model urządzenia, kraj, wersja kompilacji i nazwa pakietu aplikacji są zbierane i powiązane z danymi o wydajności w celu identyfikowania wycinków z regionu i urządzenia.
Użytkownicy mogą zezwalać na tę kolekcję lub ją odrzucać, klikając Ustawienia > Google > Użycie i diagnostyka.