4 votes

Comment utiliser exactement quickblox dans Android ?

Je prends référence sur le site officiel https://quickblox.com/developers/Android#Download_Android_SDK

gradle compile réussi :

    repositories {
            maven {
                url "https://github.com/QuickBlox/quickblox-android-sdk-releases/raw/master/"
            }
        }
            dependencies {
                 compile "com.quickblox:quickblox-android-sdk-core:2.5.1@aar"   
                 compile("com.quickblox:quickblox-android-sdk-chat:2.5.1@aar") {
                 transitive=true
            }
        }

alors j'utilise d'abord le code :
J'avais l'APP_ID...etc.

    QBSettings.getInstance().init(getApplicationContext(), APP_ID, AUTH_KEY, AUTH_SECRET);

    QBSettings.getInstance().setAccountKey(ACCOUNT_KEY);

Deuxième étape : Guide de référence : Démarrer avec l'API de chat https://quickblox.com/developers/Android_XMPP_Chat_Sample#Guide:_Getting_Started_with_Chat_API

//Prepare chat service
QBChatService.setDebugEnabled(true); // enable chat logging

        QBChatService.setDefaultPacketReplyTimeout(10000);//set reply timeout in milliseconds for connection's packet.
        //Can be used for events like login, join to dialog to increase waiting response time from server if network is slow.

        //configure chat socket
        QBChatService.ConfigurationBuilder chatServiceConfigurationBuilder = new QBChatService.ConfigurationBuilder();
        chatServiceConfigurationBuilder.setSocketTimeout(60); //Sets chat socket's read timeout in seconds
        chatServiceConfigurationBuilder.setKeepAlive(true); //Sets connection socket's keepAlive option.
        chatServiceConfigurationBuilder.setUseTls(true); //Sets the TLS security mode used when making the connection. By default TLS is disabled.

QBChatService.setConfigurationBuilder(chatServiceConfigurationBuilder) ;

Il y a un problème que je ne peux pas importer. QBChatService.ConfigurationBuilder J'essaie donc de changer gradle en compile("com.quickblox:quickblox-android-sdk-chat:2.6.1")

maintenant QBChatService.ConfigurationBuilder peut être importé

Troisième étape : J'effectue la démarche officielle en utilisant le code :

// Initialise Chat service
        final QBChatService chatService = QBChatService.getInstance();

        final QBUser user = new QBUser("garrysantos", "garrysantospass");

        QBAuth.createSession(user, new QBEntityCallback<QBSession>() {
            @Override
            public void onSuccess(QBSession qbSession, Bundle bundle) {

                // success, login to chat

                user.setId(qbSession.getUserId());

                chatService.login(user, new QBEntityCallback() {
                    @Override
                    public void onSuccess(Object o, Bundle bundle) {

                    }

                    @Override
                    public void onError(QBResponseException e) {

                    }
                });

            }

            @Override
            public void onError(QBResponseException e) {

            }
        });

        //To handle different connection states use ConnectionListener:
        ConnectionListener connectionListener = new ConnectionListener() {
            @Override
            public void connected(XMPPConnection xmppConnection) {

            }

            @Override
            public void authenticated(XMPPConnection xmppConnection, boolean b) {

            }

            @Override
            public void connectionClosed() {

            }

            @Override
            public void connectionClosedOnError(Exception e) {
                // connection closed on error. It will be established soon
            }

            @Override
            public void reconnectionSuccessful() {

            }

            @Override
            public void reconnectingIn(int i) {

            }

            @Override
            public void reconnectionFailed(Exception e) {

            }
        };

        QBChatService.getInstance().addConnectionListener(connectionListener);

        //logOut
        boolean isLoggedIn = chatService.isLoggedIn();
        if (!isLoggedIn) {
            return;
        }

        chatService.logout(new QBEntityCallback<Void>() {
            @Override
            public void onSuccess(Void aVoid, Bundle bundle) {
                //success
                chatService.destroy();
            }

            @Override
            public void onError(QBResponseException e) {

            }
        });

        //By default Android SDK reconnects automatically when connection to server is lost.
        //But there is a way to disable this and then manage this manually:
        QBChatService.getInstance().setReconnectionAllowed(false);

quand j'utilise l'étape sur QBChatDialog il ne peut plus être importé à nouveau....

ArrayList<Integer> occupantIdsList = new ArrayList<Integer>();
        occupantIdsList.add(34);
        occupantIdsList.add(17);

        QBChatDialog dialog = new QBChatDialog();
        dialog.setName("Chat with Garry and John");
        dialog.setPhoto("1786");
        dialog.setType(QBDialogType.GROUP);
        dialog.setOccupantsIds(occupantIdsList);

//or just use DialogUtils
//for creating PRIVATE dialog
//QBChatDialog dialog = DialogUtils.buildPrivateDialog(recipientId);

//for creating GROUP dialog
        QBChatDialog dialog = DialogUtils.buildDialog("Chat with Garry and John", QBDialogType.GROUP, occupantIdsList);

        QBRestChatService.createChatDialog(dialog).performAsync(new QBEntityCallback<QBChatDialog>() {
            @Override
            public void onSuccess(QBChatDialog result, Bundle params) {

            }

            @Override
            public void onError(QBResponseException responseException) {

            }
        });

J'ai donc essayé de modifier la compilation de gradle compile("com.quickblox:quickblox-android-sdk-chat:3.3.0")

maintenant QBChatDialog peuvent être importés.

mais il y a d'autres problèmes...

Can't not resolve symbol 'QBSettings' and 'QBSession' 

Je suis en colère maintenant, tu te moques de moi ?

Pourquoi le pas officiel me trompe-t-il pas à pas ?

Je suis fatigué... que dois-je faire ?

Quelqu'un peut me sauver s'il vous plaît, toute aide serait appréciée !

Selon @Jagapathi, j'ai mis à jour mon code, le problème suivant est que je ne peux pas me connecter.

Mon toast affiche une erreur de connexion lorsque je clique sur le bouton de connexion :

private void setupQuickBlox() {
        QBSettings.getInstance().init(getApplicationContext(), APP_ID, AUTH_KEY, AUTH_SECRET);
        QBSettings.getInstance().setAccountKey(ACCOUNT_KEY);
        QBSettings.getInstance().setAutoCreateSession(true);

        //login to quickblox
        String enterAccount = editAccount.getText().toString();
        String enterPassword = editPassword.getText().toString();
        Log.d(TAG,enterAccount);
        Log.d(TAG,enterPassword);
        final QBUser user = new QBUser(enterAccount, enterPassword);
        //login
        QBUsers.signIn(user).performAsync(new QBEntityCallback<QBUser>() {
            @Override
            public void onSuccess(QBUser qbUser, Bundle bundle) {
                SharedPreferences.Editor s = getSharedPreferences("QBid", 0).edit();
                s.putString("id", user.getId().toString());
                s.apply();
                Log.d(TAG,user.getId().toString());
                Toast.makeText(MainActivity.this, "Login success with quickblox", Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onError(QBResponseException e) {
                Toast.makeText(MainActivity.this, "Login error", Toast.LENGTH_SHORT).show();
            }
        });
    }

Le code est sous mon onCreat, donc il montre une erreur de connexion quand je lance l'application bien sûr, mais quand j'entre le compte et le mot de passe, il montre toujours une erreur de connexion, pourquoi ? J'ai vérifié le journal, je peux voir le compte et le mot de passe que j'ai tapé, mais je ne peux pas voir user.getId().toString() sur mon journal, quelle étape est incorrecte ? J'ai vérifié que le compte est correct : enter image description here

enter image description here

Voici ma clé :

static final String APP_ID = "50427";
    static final String AUTH_KEY = "naMGFKMshdLC3s4";
    static final String AUTH_SECRET = "GP8ey4GsQXt2TGu";
    static final String ACCOUNT_KEY = "dHYgix3we3bxxsvMqyuR";

Voici la clé de mon compte de test : enter image description here

enter image description here

Mon bouton surClcik :

buttonLogin.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                setupQuickBlox();
            }
        });

Voici mon journal : enter image description here

enter image description here

7voto

jagapathi Points 1262

Je peux vous guider avec Quickblox. Je suis dans la même position quand j'ai commencé à utiliser Quickblox.

étape 1:-

compile 'com.quickblox:quickblox-android-sdk-core:3.3.0@aar'
compile("com.quickblox:quickblox-android-sdk-chat:3.3.0@aar") {
    transitive = true
}

Ceci est pour la dernière version de quickblox. N'utilisez donc pas les anciennes versions.

étape 2:-

C'est ma fonction SetUp Quickblox, n'oubliez pas d'utiliser app_id Auth_key auth_secret et account_key.

 private void SetupQuickBlox() {

    QBSettings.getInstance().init(getApplicationContext(), APP_ID, AUTH_KEY, AUTH_SECRET);
    QBSettings.getInstance().setAccountKey(ACCOUNT_KEY);
    QBSettings.getInstance().setAutoCreateSession(true);

    //login to quickblog for

    final QBUser user=new QBUser("USER_NAME OF USER","PASSWORD OF USER");
    // Login
    QBUsers.signIn(user).performAsync(new QBEntityCallback<QBUser>() {
        @Override
        public void onSuccess(QBUser user, Bundle args) {
            // success
            SharedPreferences.Editor s=getSharedPreferences("QBid",0).edit();
            s.putString("id",user.getId().toString());
            s.apply();
            Toast.makeText(HomeActivity.this, "Login succes with quickblox", Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onError(QBResponseException error) {
            // error
        }
    });
}

étape:- 3

Vous avez terminé La connexion avec quickblox est réussie et vous pouvez maintenant demander des DIALOGUES ou CREER DES DIALOGUES. Les sessions sont automatiquement créées dans la dernière version.

Créer une nouvelle boîte de dialogue

private void NewMessage() {
    FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
    fab.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            QBChatDialog dialog = DialogUtils.buildPrivateDialog("USER_ID of other user");
            dialog.setName("tester1");

            QBRestChatService.createChatDialog(dialog).performAsync(new QBEntityCallback<QBChatDialog>() {
                @Override
                public void onSuccess(QBChatDialog result, Bundle params) {

                }

                @Override
                public void onError(QBResponseException responseException) {

                }
            });
        }
    });
}

Demander la liste des dialogues de l'utilisateur connecté

J'ai utilisé ListView et Dialogs le résultat sera dans une liste de tableau qui contient LIST of QBCHATDIALOG.

private void receiveChatList() {
    QBRequestGetBuilder requestBuilder = new QBRequestGetBuilder();
    requestBuilder.setLimit(100);

    QBRestChatService.getChatDialogs(null, requestBuilder).performAsync(
            new QBEntityCallback<ArrayList<QBChatDialog>>() {
                @Override
                public void onSuccess(final ArrayList<QBChatDialog> result, Bundle params) {
                    int totalEntries = params.getInt("total_entries");
                    Log.wtf("chat",""+result);
                    TrumeMsgAdapter adapter=new TrumeMsgAdapter(TrueMeMessagesActivity.this,result);
                    chatlistView.setAdapter(adapter);
                    chatlistView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                        @Override
                        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                            startActivity(new Intent(TrueMeMessagesActivity.this,ChatingActivity.class).putExtra("dialog",result.get(position)));
                        }
                    });

                }
                @Override
                public void onError(QBResponseException responseException) {

                }
            });
}

Mon code d'adaptation

public class TrumeMsgAdapter extends BaseAdapter {

private ArrayList<QBChatDialog> chatlist;
private Context context;

public TrumeMsgAdapter(Context c,ArrayList<QBChatDialog> chatlist){
    this.chatlist=chatlist;
    this.context=c;
}
@Override
public int getCount() {
    return chatlist.size();
}

@Override
public Object getItem(int position) {
    return null;
}

@Override
public long getItemId(int position) {
    return 0;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View List;
    LayoutInflater inflater = (LayoutInflater) context
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    if (convertView == null) {
        List = inflater.inflate(R.layout.trume_msg_adapter, null);
        TextView username=(TextView) List.findViewById(R.id.UserName);
        TextView lastmessage=(TextView)List.findViewById(R.id.lastmessage);
        username.setText(chatlist.get(position).getName());
        lastmessage.setText(chatlist.get(position).getLastMessage());
    } else {
        List = convertView;
        TextView username=(TextView) List.findViewById(R.id.UserName);
        TextView lastmessage=(TextView)List.findViewById(R.id.lastmessage);
        username.setText(chatlist.get(position).getName());
        lastmessage.setText(chatlist.get(position).getLastMessage());
    }

    return List;
}
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X