DEV Community

Cover image for Client Server Messaging App Using Socket in Android With Huawei Account Kit for Easy Login
HMS Community
HMS Community

Posted on

Client Server Messaging App Using Socket in Android With Huawei Account Kit for Easy Login

Introduction

In this article, we will learn how to integrate Huawei Account kit in Android application. Account Kit provides you with simple, secure, and quick sign-in and authorization functions. Instead of entering accounts and passwords and waiting for authentication, users can just tap the button to quickly and securely sign in to your app with their HUAWEI IDs. It helps app user seamless login functionality to the app with large user base.

Supported Devices

Image description

Development Overview

You need to install Android Studio IDE and I assume that you have prior knowledge of Android application development.

Hardware Requirements

A computer (desktop or laptop) running Windows 10.
Android phone (with the USB cable), which is used for debugging.

Software Requirements

  • Java JDK 1.8 or later.
  • Android Studio software installed.
  • HMS Core (APK) 4.X or later

Integration steps

Step 1. Huawei developer account and complete identity verification in Huawei developer website, refer to register Huawei ID.

Step 2. Create project in AppGallery Connect

Step 3. Adding HMS Core SDK

Let's start coding

*How do I call sign in method?
*

private void signInWithHuaweiID() {

AccountAuthParams authParams = new AccountAuthParamsHelper(AccountAuthParams.DEFAULT_AUTH_REQUEST_PARAM).setAuthorizationCode().createParams();
service = AccountAuthManager.getService(ClientActivity.this, authParams);
startActivityForResult(service.getSignInIntent(), 1212);

}
Enter fullscreen mode Exit fullscreen mode

How do I get sign in result?

@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
// Process the authorization result to obtain the authorization code from AuthAccount.
super.onActivityResult(requestCode, resultCode, data);

if (requestCode == 1212) {
Task<AuthAccount> authAccountTask = AccountAuthManager.parseAuthResultFromIntent(data);
if (authAccountTask.isSuccessful()) {

// The sign-in is successful, and the user's ID information and authorization code are obtained.
AuthAccount authAccount = authAccountTask.getResult();
Log.i("TAG", "serverAuthCode:" + authAccount.getAuthorizationCode());
userName = authAccount.getDisplayName();
makeConnect();

} else {
// The sign-in failed.
Log.e("TAG", "sign in failed:" + ((ApiException) authAccountTask.getException()).getStatusCode());

}
}
}
Enter fullscreen mode Exit fullscreen mode

How do I start server?

wManager = (WifiManager) getSystemService(WIFI_SERVICE);

serverIP = Formatter.formatIpAddress(wManager.getConnectionInfo().getIpAddress());

ip_txt.setText(serverIP);

class ServerThread implements Runnable {

@Override

public void run() {

try {

while (true) {

serverSocket = new ServerSocket(POST_NUMBER);

socket = serverSocket.accept();

output = new PrintWriter(socket.getOutputStream());

input = new BufferedReader(new InputStreamReader(socket.getInputStream()));

Log.d("TAG", " here ");

runOnUiThread(new Runnable() {

@Override

public void run() {

tv_status.setText("Waiting for conn at " + POST_NUMBER);

}

});

handler.post(new Runnable() {

@Override

public void run() {

tv_status.setText("Connected");

}

});

}

} catch (Exception e) {

e.printStackTrace();

}

}

}
Enter fullscreen mode Exit fullscreen mode

How do I send message using socket?

class SendMessage implements Runnable {

private String message;

SendMessage(String message) {

this.message = message;

}

@Override

public void run() {

output.write(message+"\r");

output.flush();

runOnUiThread(new Runnable() {

@Override

public void run() {

tv_chat.append("\n New Message: " + message);

ed_message.setText("");

}

});

Thread.interrupted();

}

}
Enter fullscreen mode Exit fullscreen mode

*How do I receive message using socket?
*

private class ReadMessage implements Runnable {

@Override

public void run() {

while (true) {

try {

// Log.d("TAG","Server: Listening for message");

if(input!=null){

final String message = input.readLine();

if (message != null) {

handler.post(new Runnable() {

@Override

public void run() {

tv_chat.append("\n" + message );

}

});

}

}

} catch (IOException e) {

// Log.e("TAG","Error while receiving message");

e.printStackTrace();

}

}

}

}
Enter fullscreen mode Exit fullscreen mode

Close the Socket and other connections

@Override

protected void onPause() {

super.onPause();

if (socket != null) {

try {

output.close();

input.close();

socket.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}
Enter fullscreen mode Exit fullscreen mode

How do I revoke auth permission?

if(service!=null){

// service indicates the AccountAuthService instance generated using the getService method during the sign-in authorization.

service.cancelAuthorization().addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(Task<Void> task) {

if (task.isSuccessful()) {
// Processing after a successful authorization cancellation.
Log.i("TAG", "onSuccess: ");
} else {
// Handle the exception.
Exception exception = task.getException();
if (exception instanceof ApiException){
int statusCode = ((ApiException) exception).getStatusCode();
Log.i("TAG", "onFailure: " + statusCode);
}
}
}
});
}
Enter fullscreen mode Exit fullscreen mode

Result

Image description

Image description

Tricks and Tips

Makes sure that agconnect-services.json file added.
Make sure required dependencies are added
Make sure that service is enabled in AGC
Add required permissions
Conclusion

In this article, we have learnt how to integrate Huawei Account kit in Client Server messaging using Socket in Android application. You can check the desired result in the result section. Hoping Huawei Analytics kit capabilities are helpful to you as well, like this sample, you can make use of Huawei kits as per your requirement.

Thank you so much for reading. I hope this article helps you to understand the integration of Huawei Account kit in Android application.

Reference

Huawei Account KitTraining video
Checkout in forum

Top comments (0)