J'écris une Android que je voudrais éventuellement porter sur iOS et Windows Mobile (bien que je ne sache absolument rien à leur sujet en ce moment). J'aimerais que mon application puisse trouver d'autres téléphones dans un certain rayon (peut-être 20 à 30 pieds) sur lesquels le jeu est également installé afin que les utilisateurs puissent interagir avec les autres dans leur espace physique actuel. Est-ce possible et, si oui, comment?
Je prévois que l'application nécessite une connexion Internet, donc ma première pensée a été d'utiliser le GPS comme décrit à iOS Trouver d'autres appareils à proximité (emplacements GPS) , mais cela nécessiterait de transmettre continuellement des données au serveur pour mettre à jour le l'emplacement de l'utilisateur en utilisant à la fois la bande passante et la batterie (sans parler des ressources du serveur). Le GPS semble également prendre un certain temps pour obtenir une sorte de correctif précis, et même si je ne stocke pas de données historiques, je ne m'attendrais pas à ce que les utilisateurs me fassent confiance avec ce type d'informations privées (et ils ne devraient pas non plus!)
Je sais qu'il existe des technologies propriétaires, telles que le NFC de Sony, mais c'est un objectif beaucoup trop étroit pour être utilisé pour une application que j'aimerais être indépendante des appareils et des systèmes d'exploitation. Quelles sont les autres options? En supposant que l'utilisateur est prêt à accorder à l'application les autorisations appropriées, quelles autres méthodes pourraient permettre à un appareil d'en trouver un autre à proximité, dans une plage de 10 à 15 mètres, ce qui est pratique pour une grande base d'utilisateurs (millions +)? La géolocalisation HTML5 est-elle un meilleur chemin? Ou le GPS est-il ma seule vraie option?
J'ai trouvé tilisez Android GPS pour détecter et connecter avec d'autres téléphones , mais j'espérais que les dernières années ont ouvert d'autres options.
[~ # ~] mise à jour [~ # ~]
Merci pour toutes les réponses jusqu'à présent. Pour répondre à certaines questions posées dans les commentaires et réponses, j'ai pensé décrire comment j'attends des applications/appareils qu'ils interagissent.
Tous les utilisateurs qui installent cette application auront un agent exécuté en arrière-plan pour mettre à jour leur géolocalisation actuelle et écouter les pings. Tout utilisateur peut ouvrir le programme complet et envoyer une demande rapide à tous les autres utilisateurs à proximité. Si je prends la route du serveur central, le serveur répond à cette demande avec une liste de noms d'utilisateurs à proximité. L'utilisateur peut alors choisir l'un d'entre eux pour établir une connexion, auquel cas le périphérique cible émet un son pour notifier une demande de connexion.
De là, il est assez facile de gérer l'interaction entre deux appareils. Trouver ces utilisateurs à proximité est le point critique pour moi.
Bluetooth (BT). Je ne sais pas, si je ne suis pas trop sceptique à ce sujet, mais je vois quelques problèmes. Courte portée. La plus grande consommation d'énergie. 7 pairs maximum connectés en même temps (mais c'est peut-être suffisant ...). Le gros avantage est que de nombreux appareils prennent en charge BT.
BT LE (basse énergie). Ok, ça aide à problème de consommation d'énergie. Mais, nécessite Android 4.3.
WiFi Direct (alias P2P). Je lui ai donné un coup de feu, je suis un peu déçu. Le problème est qu'il a besoin de Android 4.0 ou supérieur. Pire encore, certains appareils n'ont pas de matériel requis. J'ai lancé WiFiDirectDemo
à partir de Android = échantillons sur Samsung Xperia Miro ST23i. Cliquer sur "rechercher" et la seule chose que j'ai eu était un toast "activer WiFi P2P - dans vos paramètres". J'ai cliqué sur tout dans ces paramètres, il y a juste du WiFi normal et d'autres trucs, non mention directe ou P2P. Xperio Miro ne prend tout simplement pas en charge WiFi Direct.
Connexion WiFi avec un serveur via Internet + géolocalisation de l'appareil. Le serveur conserve la position des utilisateurs et répond à des questions telles que "qui est à 20 pieds de ma portée?". Le problème peut être la précision de la géolocalisation. Si les murs sont épais ou si vous êtes dans un endroit sur terre avec peu de satellites, cela peut être très inexact.
Il est plus probable que quelqu'un ait le WiFi activé en permanence que BT. BT a également des limites de temps après lesquelles il est désactivé (ils permettent probablement d'économiser la batterie). Ainsi, le WiFi semble un meilleur choix que BT.
Si WiFi Direct est assez populaire pour vous - je l'essayerais. Sinon, l'option numéro 4 semble la meilleure. Ce n'est pas idéal, je sais, mais à ce stade, il est difficile de trouver quelque chose de mieux (nous avons encore besoin de développement technologique, WiFi Direct semble prometteur).
J'utiliserais l'approche du serveur central. Chaque téléphone envoie des données de position au serveur. Le serveur avertit les autres utilisateurs lorsqu'ils sont à portée. Pour limiter les données utilisées, envoyez des positions uniquement lorsque l'appareil signale un mouvement supérieur à X mètres.
Pensez également à utiliser un bouton Ping. L'utilisateur appuie dessus pour envoyer la position lorsqu'il souhaite trouver quelqu'un à proximité. Les données de position ne seraient envoyées que sur ce ping. Cela utiliserait très peu d'énergie et fournirait une bonne intimité.
Il pourrait être possible de détecter des détails sur le point d'accès Wifi connecté. Si vous pouviez obtenir l'adresse MAC du point d'accès ou de la passerelle, vous pourriez l'envoyer comme une sorte de position. Tous les joueurs sur la même passerelle seraient à proximité.