{"id":19722088,"url":"https://github.com/ranjancse26/kandroid","last_synced_at":"2026-05-18T09:38:11.482Z","repository":{"id":149300049,"uuid":"86117110","full_name":"ranjancse26/Kandroid","owner":"ranjancse26","description":"Kandroid  - A Kandy Android Library","archived":false,"fork":false,"pushed_at":"2017-03-25T02:47:45.000Z","size":189,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-07-31T23:31:39.323Z","etag":null,"topics":["android","collaborizm","hackathon","kandy","library","rest-api"],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ranjancse26.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-03-24T22:57:28.000Z","updated_at":"2017-03-25T03:33:35.000Z","dependencies_parsed_at":"2023-05-07T05:17:35.214Z","dependency_job_id":null,"html_url":"https://github.com/ranjancse26/Kandroid","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/ranjancse26/Kandroid","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ranjancse26%2FKandroid","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ranjancse26%2FKandroid/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ranjancse26%2FKandroid/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ranjancse26%2FKandroid/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ranjancse26","download_url":"https://codeload.github.com/ranjancse26/Kandroid/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ranjancse26%2FKandroid/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33172921,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-18T09:27:30.708Z","status":"ssl_error","status_checked_at":"2026-05-18T09:27:28.300Z","response_time":71,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["android","collaborizm","hackathon","kandy","library","rest-api"],"created_at":"2024-11-11T23:16:24.007Z","updated_at":"2026-05-18T09:38:11.463Z","avatar_url":"https://github.com/ranjancse26.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Kandroid\nKandroid  - A Kandy Android Library\n\n# Project Overview\n\nKandroid - A tiny, easy to use library for Kandy. Kandy provides REST API’s using which, we are going to code an Android helper library that one can use for building Android Apps consuming Kandy API.\n\nKandy provides an Android Library using which one can easily code and accomplish a lot. If you question about unique features, that’s where the Kandroid comes into picture. It’s just not a helper library \n\n# Supporting Material \u0026 Info\n\nPlease take a look into https://www.collaborizm.com/project/SJMJAKo9x\n\n**Completed List**:\n\n- [x] Kandy SMS and Instant Message Implementation\n\n- [x] Kandy SMS Send Code and Verification\n\n- [x] User, Account and Domain Access Token related implementation\n\n- [x] Kandy Device - Fetch all device messages\n\n- [x] Kandy User Addressbook Contact Management \n\t- [x] Get Contacts\n\t- [x] Add/Delete Contact\n\n- [x] Kandy Spidr Configuration Implementation\n\n- [x] Kandy manage user personal address book contacts\n\n- [x] WebRTC Text and Video chat using PeerJS and Kandy ICE TURN Servers\n\n# Core Android HTTP Library\n\nWe are going to make use of OkHttp library for making a Kandy REST API call. Here’s the one liner definition about OkHttp “An HTTP \u0026 HTTP/2 client for Android and Java applications”. Source - http://square.github.io/okhttp/\n\n# Getting Started \n\nKandroid was built using Android Studio. The first thing you need to do is download and install \"Android Studio\" if you don't have one. Just open up the project and start building it. That's it!\n\nThere are two main projects\n\n1) App - It's the Android Test Application consumes Kandroid Library and runs Unit Tests.\n2) Kandy.io2 - It's the Kandroid Library. The core of library is the Kandy REST API\n\n# Basic Setup\n\nPlease make sure to setup the below ones. The below ApiKey and SecretKey should be obtained as part of the Kandy.IO Registration.\n\n\u003cstring name=\"apiKey\"\u003e\u003c/string\u003e\n\u003cstring name=\"apiSecretKey\"\u003e\u003c/string\u003e\n\nThe below ones can be set by running the appropriate unit test code. You will see next.\n\n\u003cstring name=\"domainAccessToken\"\u003e\u003c/string\u003e\n\u003cstring name=\"domainUserAccessToken\"\u003e\u003c/string\u003e\n\n![Api Keys](https://github.com/ranjancse26/Kandroid/blob/master/KandySetup-ApiKeys.png)\n\n![String.xml](https://github.com/ranjancse26/Kandroid/blob/master/KandySetup-Strings.png)\n\n# Unit Tests\n\nHere's the code snippet of Kandy Unit Test which is used for setting up the Api Keys etc.\n\n```\n@Before\npublic void setUp()\n{\n        apiKey = new MainActivity().getResources().getString(\n                R.string.apiKey);\n        apiSecretKey = new MainActivity().getResources().getString(\n                R.string.apiSecretKey);\n        deviceID = new MainActivity().getResources().getString(\n                R.string.deviceId);\n        domainAccessToken = new MainActivity().getResources().getString(\n                R.string.domainAccessToken);\n        domainUserAccessToken = new MainActivity().getResources().getString(\n                R.string.domainUserAccessToken);\n\n        fromPhoneNumber = new MainActivity().getResources().getString(\n                R.string.fromPhoneNumber);\n        toPhoneNumber = new MainActivity().getResources().getString(\n                R.string.toPhoneNumer);\n}\n```\n\nHere's the code snippet for fetching the User and Domain Access Token\n\n```\nprivate String GetUserAccountAccessToken() throws IOException, JSONException {\n         KandyUserAccountAccessToken KandyAccessTokenObj = new KandyUserAccountAccessToken(apiKey, apiSecretKey);\n        return KandyAccessTokenObj.GetUserAccountAccessToken();\n}\n\nprivate String GetDomainUserAccessToken() throws IOException, JSONException {\n        KandyDomainUser kandyDomainUserAccessToken = new KandyDomainUser(apiKey, apiSecretKey);\n        return kandyDomainUserAccessToken.GetDomainUserAccountAccessToken(\"user1\");\n}\n\n@Test\npublic void TestKandy_UserAccountAccessToken() throws IOException, JSONException {\n        String userAccountAccessToken = GetUserAccountAccessToken();\n        Assert.assertNotNull(userAccountAccessToken);\n}\n\n@Test\npublic void TestKandy_DomainUserAccessToken() throws IOException, JSONException {\n        domainUserAccessToken = GetDomainUserAccessToken();\n}\n```\n\nSend SMS and Instant Message related unit tests\n\n```\n@Test\npublic void TestKandy_SMSTest() throws IOException, JSONException {\n        KandySMS kandySMS = new KandySMS(domainUserAccessToken);\n        String response = kandySMS.SendSMS(deviceID,\n                fromPhoneNumber, toPhoneNumber, \"Test Message From Android Library\");\n}\n\n@Test\npublic void TestKandy_InstantMessageTest() throws IOException, JSONException {\n        KandyInstantMessage kandyInstantMessage = new KandyInstantMessage(domainUserAccessToken);\n        String response = kandyInstantMessage.SendInstantMessage(deviceID,\n                \"user2@kandy.hypercat.gmail.com\", \"Test Instant Message From Android Library\");\n}\n```\n\nSMS Send Code and Verification related Unit Tests\n\n```\n@Test\npublic void TestKandy_SMSSendCode() throws IOException, JSONException {\n        KandySMSVerifier kandySMS = new KandySMSVerifier(domainAccessToken);\n        String response = kandySMS.SendSMSVerificationCode(toPhoneNumber, \"US\");\n}\n\n@Test\npublic void TestKandy_SMSVerifyCode() throws Exception {\n        KandySMSVerifier kandySMS = new KandySMSVerifier(domainAccessToken);\n        Boolean isValid = kandySMS.ValidateSMSCode(\"5023\", \"8473507167\", \"US\");\n}\n```\n\nFetch User Device Messages\n\n```\n@Test\npublic void TestKandy_UserDeviceMessages() throws IOException, JSONException {\n        KandyUserDevice kandyUserDevice = new\n                KandyUserDevice(domainUserAccessToken,\n                deviceID);\n        List\u003cMessages\u003e messages = kandyUserDevice.GetDeviceMessages();\n}\n```\n\nKandy User Addressbook Management (Basic CRUD Operation)\n\n```\n@Test\npublic void TestKandy_AddContacts() throws IOException, JSONException {\n        KandyUserAddressBookContacts kandyUserAddressBookContacts = new\n                KandyUserAddressBookContacts(domainUserAccessToken);\n\n        Contact contact = new Contact();\n        contact.setFirstName(\"Ranjan\");\n        contact.setLastName(\"Dailata\");\n        contact.setNickName(\"Ranjan\");\n        String response = kandyUserAddressBookContacts.AddContact(contact);\n}\n\n@Test\npublic void TestKandy_GetAllContacts() throws IOException, JSONException {\n        KandyUserAddressBookContacts kandyUserAddressBookContacts = new\n                KandyUserAddressBookContacts(domainUserAccessToken);\n\n        List\u003cContact\u003e contacts = kandyUserAddressBookContacts.GetContacts();\n}\n\n@Test\npublic void TestKandy_DeleteContactById() throws IOException, JSONException {\n        KandyUserAddressBookContacts kandyUserAddressBookContacts = new\n                KandyUserAddressBookContacts(domainUserAccessToken);\n\n        String response =\n                kandyUserAddressBookContacts.DeleteContact(\"9e018d28484242be83f090c7323bf275\");\n}\n ```\n \n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Franjancse26%2Fkandroid","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Franjancse26%2Fkandroid","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Franjancse26%2Fkandroid/lists"}