Tutoriel d'intégration super simple de NearService! Vous aider à créer une application de chat social plus pratique

Contexte

"Personnes proches", "création de groupe en face à face", "chat local point à point rapproché" ... Ces fonctions communes apparaîtront dans les principaux logiciels sociaux. Mais dans des circonstances normales, les "personnes à proximité" ne peuvent en principe trouver des personnes qu'à quelques centaines de mètres ou même à quelques kilomètres. Comment réduire cette distance et accueillir les gens à quelques mètres? Comment la "création de groupe en face à face" peut-elle découvrir avec précision les personnes qui vous entourent? Comment communiquer et discuter directement avec des amis sans passer par le service cloud? Le service à proximité peut le faire pour vous! Ce qui suit vous donnera une explication détaillée du didacticiel d'intégration du service à proximité pour vous aider à créer une application de chat social plus pratique.

Présentation du scénario d'application

Voici un exemple d'application qui intègre le service à proximité. Cette application peut utiliser le service à proximité pour trouver des personnes à proximité et, sur la base de cette capacité, elle peut réaliser des fonctions telles que la création de groupes en face à face, le chat de groupe, le chat privé et la migration de l'historique des chats.

  • Personnes à proximité

Il peut trouver avec précision des personnes à quelques mètres à proximité et aider les utilisateurs à trouver des amis dans la même pièce, comme des salles de conférence, des salles d'exposition, des bars, des cafés, etc.

Insérez la description de l'image ici

  • Face à face

    Utilisez le service à proximité pour créer un groupe, vous ne pouvez terminer l'action de création de groupe que du côté final, l'emplacement est précis, seules les personnes au même endroit peuvent entrer dans le groupe.

Insérez la description de l'image ici

  • Chat gratuit

En utilisant le service à proximité, vous pouvez organiser des discussions de groupe sans amis à proximité. Les nouveaux amis peuvent rejoindre le groupe automatiquement lorsqu'ils sont à proximité; ils peuvent quitter automatiquement lorsqu'ils quittent la plage correspondante.

Insérez la description de l'image ici

  • Discussion privée

Utilisez le service à proximité pour réaliser le chat point à point à courte distance. La communication n'est effectuée qu'entre deux appareils et les données ne sont pas cryptées sur le cloud, il n'y a donc pas lieu de s'inquiéter des fuites d'informations; la communication peut également être effectuée dans des endroits avec des signaux médiocres tels que le train à grande vitesse et le métro.

Insérez la description de l'image ici

  • Migrer l'historique des discussions

Non seulement cela, le service à proximité fournit également de puissantes fonctions de transfert de fichiers. Lorsque les utilisateurs ont plusieurs appareils qui ont besoin de migrer des enregistrements de chat, ils peuvent utiliser l'interface de communication de Service à proximité pour réaliser une migration de données à grande vitesse et sans trafic.

Préparation des outils

  1. 2 téléphones Android ou plus

  2. Outils de développement Android Studio (3.X ou version ultérieure)

Créer un exemple d'application

  • Importez l'exemple de code source dans Android Studio.

  • Inscrivez-vous en tant que développeur Huawei.

  • Reportez-vous au développement du service à proximité et préparez-vous à créer votre application sur le marché des applications Huawei. Remarque: vous devez télécharger le fichier «agconnect-services.json» et vous référer aux instructions pour générer un certificat signé et le placer dans le répertoire app /.

  • Utilisez la commande adb pour installer le fichier apk généré sur le téléphone de test.

Code clé

Les interfaces utilisées dans l'exemple d'application sont décrites en détail dans le document officiel Guides de service à proximité .

Cet exemple d'application est construit en mode MVP. Si vous souhaitez afficher le code source, recherchez la classe correspondante en fonction du chemin d'accès au code: com \ huawei \ hms \ near \ im.

1. Personnes à proximité

Comme indiqué dans le code ci-dessous, la classe NearPeoplePresenter doit transmettre l'objet de vue lors de son initialisation. Lorsque vous appelez NearPeoplePresenter.findNearbyPeople () pour rechercher des personnes à proximité, appelez l'interface d'affichage pour effectuer les actions suivantes.

INearbyPeopleView et xxxView dans les étapes suivantes sont un ensemble d'interfaces. Leur implémentation spécifique est l'objet Activity correspondant. Le chemin d'accès au code est: com \ huawei \ hms \ near \ im \ ui \ adapter.

public NearbyPeoplePresenter(Context mContext, INearbyPeopleView view) {
    super(mContext, view);
    nearbyAgent = new NearbyAgent(mContext, new NearbyAgent.INearbyMessageView() {

        @Override
        public void onMessageFound(MessageBean messageBean) {
            // notify view when found someone
           view.onMemberChanged(false,messageBean);
        }

        @Override
        public void onMessageLost(MessageBean messageBean) {
            view.onMemberChanged(true,messageBean);
        }

        @Override
        public void onMsgSendResult(boolean isSucceed, MessageBean item) {
            view.onLoginResult(isSucceed,item);
            if (!isSucceed) {
                handler.postDelayed(() -> findNearbyPeople(),DURATION_RE_LOGIN);
            }
        }
    });
    handler = new Handler(Looper.getMainLooper());
}
public void findNearbyPeople() {
    nearbyAgent.broadcastMessage(null,MessageBean.ACTION_TAG_ONLINE);
    nearbyAgent.startScan();
}

2. Création de groupes en face à face

Semblable à "personnes à proximité", la classe CreateGroupPresenter.java transmet l'objet de vue lorsqu'il est initialisé et rejoint le groupe lorsque l'interface joinGroup (groupId) est appelée, et le résultat est renvoyé en appelant l'interface de vue.

public CreateGroupPresenter(Context mContext, ICreateGroupView view) {
    super(mContext, view);
    nearbyAgent = new NearbyAgent(mContext, new NearbyAgent.INearbyMessageView() {
        @Override
        public void onMessageFound(MessageBean messageBean) {
            view.onPeopleFound(messageBean);
        }

        @Override
        public void onMessageLost(MessageBean messageBean) {}

        @Override
        public void onMsgSendResult(boolean isSucceed, MessageBean item) {
            view.onJoinGroupResult(isSucceed,item);
        }
    });
}

public void joinGroup(String groupId) {
    nearbyAgent.broadcastMessage(groupId,"join group");
    nearbyAgent.startScan(groupId);
}

3. Parlez librement

La classe GroupChatPresenter.java doit transmettre l'objet de vue lors de l'initialisation. Le code métier appelle broadcastMessage (groupId, sendContent) pour envoyer un message au groupe spécifié. Lorsque groupId est vide, le groupe n'est pas limité; appelle findMessage (groupId) pour rechercher le message du groupe spécifié, puis appelle l'interface d'affichage pour renvoyer le message après la découverte.

public GroupChatPresenter(Context mContext, IGroupChatView view) {
    super(mContext, view);
    nearbyAgent = new NearbyAgent(mContext, new NearbyAgent.INearbyMessageView() {
        @Override
        public void onMessageFound(MessageBean messageBean) {
            view.onMessageFound(messageBean);
        }

        @Override
        public void onMessageLost(MessageBean messageBean) {

        }

        @Override
        public void onMsgSendResult(boolean isSucceed, MessageBean item) {
            view.onMsgSendResult(isSucceed,item);
        }
    });
}
public void broadcastMessage(String groupId, String sendContent) {
    nearbyAgent.broadcastMessage(groupId,sendContent);
}

public void findMessage(String groupId) {
    nearbyAgent.startScan(groupId);
}

4. Chat privé

L'implémentation du chat privé est différente des interfaces ci-dessus. La classe NearConnectionPresenter.java fournit 4 interfaces:

  • findNearbyPeople (): recherche des personnes à proximité

  • requestConnect (): établir une connexion avec l'autre partie

  • sendMessage (String msgStr): envoyer un message de type chaîne

  • sendFile (Uri uri): envoyer du texte
/**
  * scanAndBroadcasting to find nearby people
  */
 public void findNearbyPeople(){
     mDiscoveryEngine.startScan(serviceId, new ScanEndpointCallback() {
         @Override
         public void onFound(String endpointId, ScanEndpointInfo discoveryEndpointInfo) {
             Log.d(TAG, "onFound -- Nearby Connection Demo app: onFound endpoint: " + endpointId);
             view.onFound(endpointId,discoveryEndpointInfo);
         }

         @Override
         public void onLost(String endpointId) {
             Log.d(TAG, "onLost -- Nearby Connection Demo app: Lost endpoint: " + endpointId);
             view.onLost(endpointId);
         }
     }, scanOption);
 }

 /**
  * request to connect with remote device
  * @param endpointId the endpointId of remote device
  */
 public void requestConnect(String endpointId) {
     Log.d(TAG, "requestConnect -- endpoint: " + endpointId);
     mDiscoveryEngine.requestConnect(myNameStr, endpointId, connectCallback);
 }

 /**
  * Send message ,Data.Type.BYTES
  */
 public MessageBean sendMessage(String msgStr) {
     MessageBean item = new MessageBean();
     item.setUserName(CommonUtil.userName);
     item.setMsg(msgStr);
     item.setType(MessageBean.TYPE_SEND_TEXT);
     item.setSendTime(DateUtils.getCurrentTime(DateUtils.FORMAT));
     Data data = Data.fromBytes(gson.toJson(item).getBytes(Charset.defaultCharset()));
     mTransferEngine.sendData(mEndpointId, data);
     return item;
 }

 /**
  * send file ,Data.Type.FILE
  * @param uri
  */
 public Data sendFile(Uri uri) {
     Data filePayload;
     try {
         ParcelFileDescriptor pfd = mContext.getContentResolver().openFileDescriptor(uri, "r");
         filePayload = Data.fromFile(pfd);
     } catch (FileNotFoundException e) {
         Log.e(Constants.TAG, "File not found, cause: ", e);
         return null;
     }
     String fileName = FileUtil.getFileRealNameFromUri(mContext, uri);
     String filenameMessage = filePayload.getId() + ":" + fileName;
     Data filenameBytesPayload = Data.fromBytes(filenameMessage.getBytes(StandardCharsets.UTF_8));
     mTransferEngine.sendData(mEndpointId, filenameBytesPayload);
     mTransferEngine.sendData(mEndpointId, filePayload);
     return filePayload;
 }

Plus de détails


Lien d'origine:
https://developer.huawei.com/consumer/cn/forum/topic/0201415949786580446?fid=18&pid=0301415949786580897
Auteur: pepper

Je suppose que tu aimes

Origine blog.51cto.com/14772288/2562481
conseillé
Classement