google / nearby

🐿️ A collection of projects focused on connectivity that enable building cross-device experiences.
https://developers.google.com/nearby
Apache License 2.0
763 stars 156 forks source link

Clarification on iOS/Android compatibility and future #1720

Closed lschmierer closed 7 months ago

lschmierer commented 1 year ago

Hello, first of all thanks for your great work! I am right now really confused on the state and direction of the Google Nearby products. The Nearby Messages API (which communicates via the cloud) works for Android and iOS but will be discontinued. For the Nearby Connections API on the other hand, the documentation states at various places that it only supports Android. However, looking at the examples at this repository, communication between Android and iOS seems possible. I understand that the iOS implementation is still work-in-progress. But, is the general idea that the new Nearby Connections API will replace the use cases of the former Nearby Messages API? And the documentation of the Nearby Connections API will be updated to reflect iOS support once ready?

I am also wondering how this all relates to the cross-device-sdk https://github.com/google/cross-device-sdk which has seen barely any development since its announcement on Google I/O 22 and has som similar objectives.

It would be nice if you could provide some information, although I understand that you probably can not make any statements about Goolgle policies and/or product decisions.

bourdakos1 commented 1 year ago

Hey @lschmierer

Sorry for the confusion! Part of the reason we are deprecating Nearby Messages is to reduce some of the confusion between all of our offerings. This project should be able to cover most of the use cases of Nearby Messages.

Nearby Connections operates on top of “mediums”. These mediums are used to discover other devices and transfer data. Each medium has its own advantages and limitations. Android has the largest list of supported mediums while iOS currently only has 1 supported medium (Wi-Fi LAN). Wi-Fi LAN’s limitation is that both devices need to be connected to the same Wi-Fi network to function.

We are working on adding support for the BLE medium which would provide similar functionality as Nearby Messages for discovery and plan to have this ready before Nearby Messages is shut down (December 31st).


Do you mind sharing documentation links that mention iOS not being supported so we can get those updated with more up-to-date information?

As for the cross-device-sdk, it is intended to be easier to use than Nearby Connections, but has more restrictions (also, the cross-device-sdk does not have any iOS support yet)

Hope this helps :)

lschmierer commented 1 year ago

Thanks for the quick response!

Right on the landing page https://developers.google.com/nearby it says "The Nearby Connections API is available for Android" while "The Nearby Messages API is available for Android and iOS". This gives me the impression that Connections API is not available for iOS.

On this site https://developers.google.com/nearby/overview it says explicitly at the bottom to use the Messages API if "you want to communicate between Android and iOS devices". Also on the left there is only "Android" in the menu (iOS only for Messages API).

I have only just realized that there is in fact Swift documentation once one is on the Connections documentation itself (https://developers.google.com/nearby/connections/overview)

bourdakos1 commented 1 year ago

Thanks! I’ll get those links updated :)

lschmierer commented 1 year ago

Just out or curiosity… I understand that there are fundamental limitations that make it impossible to establish P2P connections between Android and iOS without being connected to the same Wi-Fi AP. But would it in theory be possible to implement that direct communication for between two iOS devices? (Or alternatively is it be possible to use iOS Multipeer Connectivity together with the Google Nearby Connections API or would they somehow interfere?)

bourdakos1 commented 1 year ago

Yes, we are actually experimenting with using the multipeer connectivity framework as a medium that would only be available between Apple devices, but it’s much lower priority than BLE at the moment

RafaelKr commented 1 year ago

In the Apple world there is the feature of "sharing a WiFi password".

If a user uses two Apple devices with the same iCloud account, e.g. iPhone and MacBook, the user can connect to a WiFi network for the first time and if the other device is nearby and already has the password stored it can share that password to the device connecting for the first time.

Is this a feature which will also be provided by the Nearby API? I read a lot in the docs but couldn't find a clear indication of such a feature. I'm using Linux & Android and would love to see that feature!

pfieffer commented 1 year ago

Hi there.

I have been exploring the Nearby Connections api and I am confused to whether discovering, connecting to and sharing data between android and iOS is possible or not.

The Multidevice Development page: https://developer.android.com/multi-device-development: under the Explore Toolkit > Nearby states:

If you're looking for granular control and your experience only involves Android devices, try these APIs.

While if we click on the same section, we are redirected to https://developers.google.com/nearby where under Nearby Connections API, it states:

The Nearby Connections API is available for Android and iOS, and enables communication between the two platforms.

Now it leaves me thinking if its really possible to achieve connection between android and ios devices. We did try building sample apps providing the same Strategy and Service ID but had no luck discovering android device from iOS or vice versa.

Any help is appreciated. Thanks

szuniverse commented 11 months ago

https://stackoverflow.com/questions/77612062/google-nearby-connections-api-ios-android waiting for answers here as well

bourdakos1 commented 11 months ago

Discovering / connecting / sharing data between iOS and Android is very possible and should work out of box as long as service IDs and strategy match and both devices are connected to the same Wi-Fi network. iOS doesn't support the full range of mediums that Android supports, so you may not be able to discover in certain scenarios.

bglgwyng commented 11 months ago

Yes, we are actually experimenting with using the multipeer connectivity framework as a medium that would only be available between Apple devices, but it’s much lower priority than BLE at the moment

Does this mean that we'll be able to transfer files between Android and iOS at WiFi speed(or close to it) using the multipeer connectivity framework, even when they are not in the same WiFi LAN?

live-alchemy commented 10 months ago

Discovering / connecting / sharing data between iOS and Android is very possible and should work out of box as long as service IDs and strategy match and both devices are connected to the same Wi-Fi network. iOS doesn't support the full range of mediums that Android supports, so you may not be able to discover in certain scenarios.

Want to make sure I've understood this clearly, @bourdakos1 comments that Nearby Connections between iOS and Android are impossible offline, but the documentation for Nearby Connections open with:

Nearby Connections enables advertising, discovery, and connections between nearby devices in a fully-offline peer-to-peer manner.

My company is looking at building a solution that would allow a string to be sent from one react-native application to another at a point of sale and Nearby Connections appears to be the only way forward for something cross platform, but we cannot rely on devices being on the same network. Any comments or thoughts appreciated.

bourdakos1 commented 10 months ago

We are working on BLE support for iOS (#1619), which should allow for quickly sharing small strings while offline.

TVGSOFT commented 10 months ago

Hi,

During implement Nearby Connection for Android and iOS. We have a situation in 2 different Wifi LAN: Wifi LAN 1:

Do you guys know any limitation of the network or restrict by it?

Thanks!

szuniverse commented 10 months ago

Hi,

During implement Nearby Connection for Android and iOS. We have a situation in 2 different Wifi LAN: Wifi LAN 1:

  • iOS to iOS: working well
  • Android to Android: working well
  • iOS to Android: doesn't work. It can not discover each others.

Wifi LAN 2: Both Android and iOS are working well.

Do you guys know any limitation of the network or restrict by it?

Thanks!

Hi. Based on our experience: iOS <> Android can only communicate with each other if they are on the same WiFi and if mDNS is enabled on the network. For now, it seems to us that this library works fine between the same platform, but in all other cases there are hard constraints that are hard to meet in a real scenario.

OwenHoffend commented 10 months ago

Has anyone had success with Android <--> IOS connectivity via BLE? For example, by enabling BLE on IOS via the method suggested in #1619?

bourdakos1 commented 10 months ago

Has anyone had success with Android <--> IOS connectivity via BLE? For example, by enabling BLE on IOS via the method suggested in #1619?

BLE support between Android/iOS is currently very limited, which is why it’s still flagged off. There are some GATT reading bugs on the iOS side which can cause discovery failures for an iOS device attempting to discover an Android device. There is also an MTU related bug that can make the connection timeout when trying to connect between Android/iOS.

bourdakos1 commented 10 months ago

Hi,

During implement Nearby Connection for Android and iOS. We have a situation in 2 different Wifi LAN: Wifi LAN 1:

  • iOS to iOS: working well
  • Android to Android: working well
  • iOS to Android: doesn't work. It can not discover each others.

Wifi LAN 2: Both Android and iOS are working well.

Do you guys know any limitation of the network or restrict by it?

Thanks!

I’m not aware of any network conditions that would cause iOS <> Android to fail, but continue to work iOS <> iOS. Could you provide some logs from both the iOS and Android side?

TVGSOFT commented 10 months ago

@bourdakos1 Actually Android and iOS can not discover each other in some WIFI LAN network. But in the same platform then it is OK. I'm not sure under the hood what is the root cause.

ColtonIdle commented 9 months ago

@bourdakos1 you asked where there was outdated info. This video from 2022 says that nearby connections api is android only. I think I also saw a mention of android only in one of the docs as well. ill try to find it. im building a nearby dice rolling game so im still new to this stuff. hope to have ios <> android working! wonder if nearby can work with apples multipeer api too

CleanShot 2024-02-01 at 20 39 20@2x

ColtonIdle commented 9 months ago

This too CleanShot 2024-02-01 at 20 48 06@2x

ColtonIdle commented 9 months ago

@bglgwyng

Yes, we are actually experimenting with using the multipeer connectivity framework as a medium that would only be available between Apple devices, but it’s much lower priority than BLE at the moment

Does this mean that we'll be able to transfer files between Android and iOS at WiFi speed(or close to it) using the multipeer connectivity framework, even when they are not in the same WiFi LAN?

nope. multipeer is ios only. so what he was saying was that multipeer would work as a medium only between apple devices

ColtonIdle commented 9 months ago

@live-alchemy

Nearby Connections enables advertising, discovery, and connections between nearby devices in a fully-offline peer-to-peer manner.

I suppose being on the same LAN != being online. So I guess that statement is true since I can have a local network that's not connected to the internet and ios and android would still work. But I agree the wording is confusing. maybe @bourdakos1 can update that text a bit. 😂

ColtonIdle commented 9 months ago

@TVGSOFT

Actually Android and iOS can not discover each other in some WIFI LAN network. But in the same platform then it is OK. I'm not sure under the hood what is the root cause.

Do you have logs from those failing devices + network you could share? Maybe it'd help identify the issue

bourdakos1 commented 9 months ago

@live-alchemy

Nearby Connections enables advertising, discovery, and connections between nearby devices in a fully-offline peer-to-peer manner.

I suppose being on the same LAN != being online. So I guess that statement is true since I can have a local network that's not connected to the internet and ios and android would still work. But I agree the wording is confusing. maybe @bourdakos1 can update that text a bit. 😂

That snippet was originally written for Android which supports fully offline transfers. iOS will technically support offline with BLE, but transfers will be very slow. Hotspot could eventually be used for faster offline transfers, but would provide a bit of a disruptive experience since it will show a system prompt when connecting and the user will lose connectivity for the duration of the transfer. We could also add WebRTC for when both devices are connected to separate networks. iOS<>Android fully offline seamless high speed transfers most likely won’t be possible unless Apple adds support for something like Wi-Fi Aware/Direct. I can try to get the snippet updated to be more clear.

ColtonIdle commented 9 months ago

aha! makes sense

So if I have it right. on android it can be fully offline (through wifi direct) but with ios (since it doesn't support wifi direct and instead has its own thing called AWDL) it can't be fully offline.

what about my minor asterik I mentioned above. Can I technically have a local wifi network without internet access, and android to ios should still work right? even though it techncially isn't connected to the "internet"?

bourdakos1 commented 9 months ago

Yea I think that should work. You should also be able to use Wi-Fi LAN if one of the devices sets up a personal hotspot and both connect to it.