Strategies

Nearby Connections supports different Strategies for advertising and discovery. The best Strategy to use depends on the use case.

P2P_CLUSTER

P2P_CLUSTER is a peer-to-peer strategy that supports an M-to-N, or cluster-shaped, connection topology. In other words, this enables connecting amorphous clusters of devices within radio range (~100m), where each device can both initiate outgoing connections to M other devices and accept incoming connections from N other devices.

This is the default strategy, equivalent to calling the deprecated Connections API methods with no Strategy parameter.

This strategy is more flexible in its topology constraints than P2P_STAR, but results in lower bandwidth connections. It is good for use cases with smaller payloads that require a more mesh-like experience, such as multiplayer gaming.

Permissions

In order to use this Strategy, the app must have the following permissions declared:

  • BLUETOOTH
  • BLUETOOTH_ADMIN
  • ACCESS_WIFI_STATE
  • CHANGE_WIFI_STATE

Additionally, on devices running Marshmallow (and onwards), Location must be turned on, and the following additional permission is required:

  • ACCESS_COARSE_LOCATION

P2P_STAR

P2P_STAR is a peer-to-peer strategy that supports a 1-to-N, or star-shaped, connection topology. In other words, this enables connecting devices within radio range (~100m) in a star shape, where each device can, at any given time, play the role of either a hub (where it can accept incoming connections from N other devices), or a spoke (where it can initiate an outgoing connection to a single hub), but not both.

This strategy lends itself best to situations where there is one device advertising, and N devices which discover the advertiser, though you may still advertise and discover simultaneously if required.

This strategy is more strict in its topology constraints than P2P_CLUSTER, but results in higher bandwidth connections. It is good for high-bandwidth use cases such as sharing a video to a group of friends.

Permissions

In order to use this Strategy, the app must have the following permissions declared:

  • BLUETOOTH
  • BLUETOOTH_ADMIN
  • ACCESS_WIFI_STATE
  • CHANGE_WIFI_STATE

Additionally, on devices running Marshmallow (and onwards), Location must be turned on, and the following additional permission is required:

  • ACCESS_COARSE_LOCATION