Buat, Perbarui, dan Hapus Kontak di Gmail menggunakan Java

Gmail adalah salah satu aplikasi online yang umum digunakan untuk mengirim dan menerima email. Selain itu, memungkinkan bekerja dengan kalender, kontak, obrolan, dll., dan menyediakan berbagai layanan kolaborasi lainnya. Baru-baru ini, di sebuah artikel, kami telah membahas cara mengimpor kontak dari akun Gmail. Hari ini, Anda akan belajar cara membuat, memperbarui, dan menghapus kontak di akun Gmail menggunakan Java.

API Java untuk Membuat, Memperbarui, dan Menghapus Kontak Gmail

Untuk membuat dan memanipulasi kontak di akun Gmail, kami akan menggunakan Aspose.Email for Java. Ini adalah API kaya fitur yang memungkinkan Anda membuat dan mengirim email dan bekerja dengan klien email populer. Anda dapat mengunduh API atau menginstalnya menggunakan konfigurasi Maven berikut.

Gudang:

<repository>
    <id>AsposeJavaAPI</id>
    <name>Aspose Java API</name>
    <url>http://repository.aspose.com/repo/</url>
</repository>

Ketergantungan:

<dependency>
    <groupId>com.aspose</groupId>
    <artifactId>aspose-email</artifactId>
    <version>22.3</version>
    <classifier>jdk16</classifier>
</dependency>

Setelah menginstal API, Anda perlu membuat proyek di Konsol Pengembang Google, yang memungkinkan Anda berkomunikasi dengan Gmail. Untuk membuatnya, Anda dapat mengikuti panduan ini.

Sekarang, buat kelas pembantu bernama GoogleOAuthHelper untuk menangani autentikasi akun Gmail. Buat juga kelas bernama OAuthUser untuk menyimpan informasi pengguna. Berikut implementasi lengkap dari kedua class tersebut.

public class OAuthUser {
    String email;
    String clientId;
    String clientSecret;
    String refreshToken;
}
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;

import javax.xml.bind.DatatypeConverter;

/**
 * <p>
 * Konsol pengembang https://console.developers.google.com/projectselector/apis/credentials?pli=1 
 * Dokumentasi https://developers.google.com/identity/protocols/OAuth2InstalledApp
 * </p>
 */
class GoogleOAuthHelper {
    public static final String AUTHORIZATION_URL = "https://accounts.google.com/o/oauth2/v2/auth";
    public static final String TOKEN_REQUEST_URL = "https://oauth2.googleapis.com/token";
    public static final String REDIRECT_URI = "urn:ietf:wg:oauth:2.0:oob";
    public static final String REDIRECT_TYPE = "code";
    public static final String SCOPE = "https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcalendar" // Calendar
            + "+https%3A%2F%2Fwww.google.com%2Fm8%2Ffeeds%2F" // Contacts
            + "+https%3A%2F%2Fmail.google.com%2F"; // IMAP & SMTP

    static String createCodeChalange() {
        String verifierStr = UUID.randomUUID().toString() + "-" + UUID.randomUUID().toString();
        System.out.println("Code Verifier: " + verifierStr);

        MessageDigest digest;
        try {
            digest = MessageDigest.getInstance("SHA-256");
        } catch (NoSuchAlgorithmException e) {
            throw new IllegalAccessError(e.getMessage());
        }
        byte[] hash = digest.digest(verifierStr.getBytes(StandardCharsets.UTF_8));
        String base64Hash = DatatypeConverter.printBase64Binary(hash);

        base64Hash = base64Hash.split("=")[0];
        base64Hash = base64Hash.replace('+', '-').replace('/', '_');
        return base64Hash;
    }

    static String getAuthorizationCodeUrl(OAuthUser acc) {
        return getAuthorizationCodeUrl(acc, SCOPE, REDIRECT_URI, REDIRECT_TYPE);
    }

    static String getAuthorizationCodeUrl(OAuthUser acc, String scope, String redirectUri, String responseType) {
        System.out.println("---------------------------------------------------------");
        System.out.println("------------- OAuth 2.0 AuthorizationCodeUrl -------------");
        System.out.println("---------------------------------------------------------");
        System.out.println("Login: " + acc.email);
        String codeChallenge = createCodeChalange();

        String state = urlEncode(UUID.randomUUID().toString());
        String approveUrl = AUTHORIZATION_URL + "?client_id=" + acc.clientId + "&redirect_uri=" + redirectUri + "&response_type=" + responseType + "&scope=" + scope
                + "&code_challenge=" + codeChallenge + "&code_challenge_method=S256&state=" + state;

        System.out.println("Approve Url: " + approveUrl);
        return approveUrl;
    }

    static String urlEncode(String value) {
        try {
            return URLEncoder.encode(value, StandardCharsets.UTF_8.toString());
        } catch (UnsupportedEncodingException e) {
            throw new IllegalAccessError(e.getMessage());
        }
    }

    static String urlDecode(String value) {
        try {
            return URLDecoder.decode(value, StandardCharsets.UTF_8.toString());
        } catch (UnsupportedEncodingException e) {
            throw new IllegalAccessError(e.getMessage());
        }
    }

    static String getAccessTokenByAuthCode(String authorizationCode, String codeVerifier, OAuthUser user) {
        String encodedParameters = "client_id=" + urlEncode(user.clientId) + "&client_secret=" + urlEncode(user.clientSecret) + "&code=" + urlEncode(authorizationCode)
                + "&code_verifier=" + codeVerifier + "&redirect_uri=" + urlEncode(REDIRECT_URI) + "&grant_type=authorization_code";
        System.out.println("---------------------------------------------------------");
        System.out.println("------------- OAuth 2.0 AccessTokenByAuthCode -------------");
        System.out.println("---------------------------------------------------------");
        System.out.println("Authorization code: " + authorizationCode);

        String result = "";
        Map<String, String> token = geToken(encodedParameters);
       for (String key : token.keySet()) {
            System.out.println(key + ": " + token.get(key));
            if (key.equals("refresh_token")) {
                result = token.get(key);
            }
        }

        System.out.println("---------------------------------------------------------");

        return result;
    }

    static String getAccessTokenByRefreshToken(OAuthUser user) {
        String encodedParameters = "client_id=" + urlEncode(user.clientId) + "&client_secret=" + urlEncode(user.clientSecret) + "&refresh_token=" + urlEncode(user.refreshToken)
                + "&grant_type=refresh_token";
        System.out.println("---------------------------------------------------------");
        System.out.println("----------- OAuth 2.0 AccessTokenByRefreshToken -----------");
        System.out.println("---------------------------------------------------------");
        System.out.println("Login: " + user.email);

        String result = "";
        Map<String, String> token = geToken(encodedParameters);
       for (String key : token.keySet()) {
            System.out.println(key + ": " + token.get(key));
            if (key.equals("access_token")) {
                result = token.get(key);
            }
        }

        System.out.println("---------------------------------------------------------");

        return result;
    }

    static Map<String, String> geToken(String encodedParameters) {
        try {
            HttpURLConnection connection = (HttpURLConnection) new URL(TOKEN_REQUEST_URL).openConnection();
            connection.setRequestMethod("POST");

            byte[] requestData = encodedParameters.getBytes(StandardCharsets.UTF_8);

            connection.setUseCaches(false);
            connection.setDoInput(true);
            connection.setDoOutput(true);
            connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
            connection.setRequestProperty("Content-Length", "" + requestData.length);

            final OutputStream st = connection.getOutputStream();
            try {
                st.write(requestData, 0, requestData.length);
            } finally {
                st.flush();
                st.close();
            }

            connection.connect();

            if (connection.getResponseCode() >= HttpURLConnection.HTTP_BAD_REQUEST) {
                throw new IllegalAccessError("Operation failed: " + connection.getResponseCode() + "/" + connection.getResponseMessage() + "\r\nDetails:\r\n{2}"
                        + readInputStream(connection.getErrorStream()));
            }

            String responseText = readInputStream(connection.getInputStream());

            Map<String, String> result = new HashMap<String, String>();
            System.out.println(responseText);
            String[] strs = responseText.replace("{", "").replace("}", "").replace("\"", "").replace("\r", "").replace("\n", "").split(",");
           for (String sPair : strs) {
                String[] pair = sPair.split(":");
                String name = pair[0].trim().toLowerCase();
                String value = urlDecode(pair[1].trim());
                result.put(name, value);
            }

            return result;
        } catch (IOException e) {
            throw new IllegalAccessError(e.getMessage());
        }
    }

    static String readInputStream(InputStream is) {
        if (is == null)
            return "";

        BufferedReader reader = new BufferedReader(new InputStreamReader(is));
        StringBuilder result = new StringBuilder();
        String line;
        try {
            while ((line = reader.readLine()) != null) {
                result.append(line);
            }
        } catch (IOException e) {
            // mengabaikan
        }
        return result.toString();
    }
}

Buat Kontak di Gmail di Jawa

Berikut langkah-langkah membuat kontak pada Gmail di Java.

Contoh kode berikut menunjukkan cara membuat kontak di Gmail di Java.

OAuthUser user = new OAuthUser();

// Atur clientId, clientSecret dan email 
user.clientId = "<<clientID>>"; 
user.clientSecret = "<<clientSecret>>"; 
user.email = "<<email>>";

// Anda harus mengambil AuthorizationCode secara manual dengan AuthorizationCodeUrl yang dihasilkan
// Setel kode otorisasi
String authorizationCode = "<<authCode>>";

// Salin Pemverifikasi Kode dari output langkah sebelumnya
// Tetapkan pemverifikasi kode
String codeVerifier = "<<codeVerifier>>";

// Dapatkan Token Penyegaran
String refreshToken = GoogleOAuthHelper.getAccessTokenByAuthCode(authorizationCode, codeVerifier, user);
user.refreshToken = refreshToken;

// Dapatkan Token Akses
String accessToken = GoogleOAuthHelper.getAccessTokenByRefreshToken(user);

// Gunakan Token Akses di API
IGmailClient client = GmailClient.getInstance(accessToken, user.email);

// Buat Kontak
Contact contact = new Contact();
contact.setPrefix("Prefix");
contact.setGivenName("GivenName");
contact.setSurname("Surname");
contact.setMiddleName("MiddleName");
contact.setDisplayName("DisplayName");
contact.setSuffix("Suffix");
contact.setJobTitle("JobTitle");
contact.setDepartmentName("DepartmentName");
contact.setCompanyName("CompanyName");
contact.setProfession("Profession");
contact.setNotes("Notes");

// Tetapkan alamat pos
PostalAddress address = new PostalAddress();
address.setCategory(PostalAddressCategory.getWork());
address.setAddress("Address");
address.setStreet("Street");
address.setPostOfficeBox("PostOfficeBox");
address.setCity("City");
address.setStateOrProvince("StateOrProvince");
address.setPostalCode("PostalCode");
address.setCountry("Country");
contact.getPhysicalAddresses().add(address);

// Tetapkan nomor telepon
PhoneNumber pnWork = new PhoneNumber();
pnWork.setNumber("323423423423");
pnWork.setCategory(PhoneNumberCategory.getWork());
contact.getPhoneNumbers().add(pnWork);
PhoneNumber pnHome = new PhoneNumber();
pnHome.setNumber("323423423423");
pnHome.setCategory(PhoneNumberCategory.getHome());
contact.getPhoneNumbers().add(pnHome);
PhoneNumber pnMobile = new PhoneNumber();
pnMobile.setNumber("323423423423");
pnMobile.setCategory(PhoneNumberCategory.getMobile());
contact.getPhoneNumbers().add(pnMobile);

// Tetapkan detail lainnya
contact.getUrls().setBlog("Blog.com");
contact.getUrls().setBusinessHomePage("BusinessHomePage.com");
contact.getUrls().setHomePage("HomePage.com");
contact.getUrls().setProfile("Profile.com");
contact.getEvents().setBirthday(new Date());
contact.getEvents().setAnniversary(new Date());
contact.getInstantMessengers().setAIM("AIM");
contact.getInstantMessengers().setGoogleTalk("GoogleTalk");
contact.getInstantMessengers().setICQ("ICQ");
contact.getInstantMessengers().setJabber("Jabber");
contact.getInstantMessengers().setMSN("MSN");
contact.getInstantMessengers().setQQ("QQ");
contact.getInstantMessengers().setSkype("Skype");
contact.getInstantMessengers().setYahoo("Yahoo");
contact.getAssociatedPersons().setSpouse("Spouse");
contact.getAssociatedPersons().setSister("Sister");
contact.getAssociatedPersons().setRelative("Relative");
contact.getAssociatedPersons().setReferredBy("ReferredBy");
contact.getAssociatedPersons().setPartner("Partner");
contact.getAssociatedPersons().setParent("Parent");
contact.getAssociatedPersons().setMother("Mother");
contact.getAssociatedPersons().setManager("Manager");

// Tetapkan alamat email
EmailAddress eAddress = new EmailAddress();
eAddress.setAddress("email@gmail.com");
contact.getEmailAddresses().add(eAddress);

// Buat kontak 
String contactUri = client.createContact(contact);

Perbarui Kontak di Gmail di Jawa

Anda juga dapat memperbarui detail kontak Gmail setelah mengaksesnya. Berikut ini adalah langkah-langkah memperbarui kontak di akun Gmail di Jawa.

Contoh kode berikut menunjukkan cara memperbarui kontak di Gmail di Java.

Hapus Kontak di Gmail di Jawa

Terakhir, mari kita lihat cara menghapus kontak Gmail menggunakan Java. Berikut ini adalah langkah-langkah untuk melakukan operasi ini.

Contoh kode berikut menunjukkan cara menghapus kontak di Gmail di Java.

OAuthUser user = new OAuthUser();

// Atur clientId, clientSecret dan email 
user.clientId = "<<clientID>>"; 
user.clientSecret = "<<clientSecret>>"; 
user.email = "<<email>>";

// Anda harus mengambil AuthorizationCode secara manual dengan AuthorizationCodeUrl yang dihasilkan
// Setel kode otorisasi
String authorizationCode = "<<authCode>>";

// Salin Pemverifikasi Kode dari output langkah sebelumnya
// Tetapkan pemverifikasi kode
String codeVerifier = "<<codeVerifier>>";

// Dapatkan Token Penyegaran
String refreshToken = GoogleOAuthHelper.getAccessTokenByAuthCode(authorizationCode, codeVerifier, user);
user.refreshToken = refreshToken;

// Dapatkan Token Akses
String accessToken = GoogleOAuthHelper.getAccessTokenByRefreshToken(user);

// Gunakan Token Akses di API
IGmailClient client = GmailClient.getInstance(accessToken, user.email);

// Dapatkan semua kontak
Contact[] contacts = client.getAllContacts();

// Ambil yang diperlukan
Contact contact = contacts[0];

// Hapus kontak
client.deleteContact(contact.getId().getGoogleId());

Dapatkan Lisensi API Gratis

Anda dapat menggunakan Aspose.Email for Java tanpa batasan evaluasi menggunakan lisensi sementara gratis.

Kesimpulan

Pada artikel ini, Anda telah mempelajari cara membuat dan memperbarui kontak di akun Gmail di Java. Selanjutnya, Anda telah melihat cara menghapus kontak Gmail secara terprogram. Selain itu, Anda dapat mengunjungi dokumentasi untuk menjelajahi fitur lain dari Aspose.Email for Java. Jika Anda memiliki pertanyaan, Anda dapat memposting ke [forum] kami 24.

Lihat juga