Skip to content

Latest commit

 

History

1,922 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Tindroid: Tinode Messaging Client for Android

Android instant messenger using Tinode backend. Beta-quality software. Debug APKs are available in releases.

Installing and running

This is NOT a standalone app, this is just a frontend, a client. It requires a backend. See installation instructions.

Building from source

Tindroid is an Android client, not a standalone service. Before using it, deploy or connect to a Tinode backend; see the backend installation instructions.

Requirements

  • Android Studio with Android SDK Platform 36 installed. The app is built with API 36 and supports devices running Android 8.1 (API 27) or newer.

  • JDK 17. Android Studio's bundled JDK can be used; command-line builds require JAVA_HOME to point to a JDK 17 installation.

  • A Firebase google-services.json for the Android application ID co.tinode.tindroidx, placed at app/google-services.json. The file is intentionally ignored by Git. See Push notifications for setup.

  • A local keystore.properties file in the repository root. The current build script loads this file for every build, including debug builds. Do not commit it. For example:

    storeFile=/absolute/path/to/release.keystore
    storePassword=your-store-password
    keyAlias=your-key-alias
    keyPassword=your-key-password

Clone and build a debug APK:

git clone https://github.com/tinode/tindroid.git
cd tindroid
./gradlew assembleDebug

The APK is written to app/build/outputs/apk/debug/app-debug.apk. To install it on a connected emulator or device, run:

./gradlew installDebug

You can also open the repository root in Android Studio, let Gradle sync, then select the app debug configuration and run it.

Testing

Run local unit tests with:

./gradlew test

With an emulator or device connected through adb, run instrumentation tests with:

./gradlew connectedDebugAndroidTest

Release builds

assembleRelease produces a minified, signed release APK using the credentials in keystore.properties:

./gradlew assembleRelease

The release APK is written to app/build/outputs/apk/release/app-release.apk.

Debug builds use sandbox.tinode.co as their default server; release builds use api.tinode.co. These defaults are defined as default_host_name in app/build.gradle and can be changed when maintaining a custom build.

If you are not cloning but building from a downloaded archive, open the build.gradle file in the root of the extracted archive, find the definitions for gitVersionCode() and gitVersionName() functions and replace their Git-based values with static values, for example:

static def gitVersionCode() {
   return 1234
}

static def gitVersionName() {
   return '1.23.4'
}

You still need the local keystore.properties and app/google-services.json files described above.

Getting support

Helping out

  • If you appreciate our work, please help spread the word! Sharing on Reddit, HN, and other communities helps more than you think.
  • Consider buying paid support: https://tinode.co/support.html
  • If you are a software developer, send us your pull requests with bug fixes and new features.
  • If you use the app and discover bugs or missing features, let us know by filing bug reports and feature requests. Vote for existing feature requests you find most valuable.
  • If you speak a language other than English, translate the apps into your language. You may also review and improve existing translations.
  • If you are a UI/UX expert, help us polish the app UI.
  • Use it: install it for your colleagues or friends at work or at home. Please contact us if you want to participate in closed testing.

What works:

  • One-on-one conversations and group chats.
  • Channels with unlimited number of read-only subscribers.
  • Video and audio calling one-one-one.
  • Attachments, inline images and videos, voice messages.
  • Unread message counters.
  • Push notifications and in-app presence notifications.
  • Message status notifications: message delivery to server; received and read notifications; typing notifications.
  • Markdown-style formatting of text, e.g. *styled* → styled. Implemented as spannable.
  • Editing sent messages, replying and forwarding messages.
  • Trusted account badges: verified account, staff, etc.
  • Form messages suitable for chatbots.
  • Muting/unmuting conversations and other granular permission management.
  • Integration with Android's stock Contacts.
  • Invite contacts to the app by SMS or email.
  • Transport Level Security - https/wss.
  • Pinning conversations to the top of the list.
  • Pinning important messages to the top of a conversation.
  • Offline mode.

Not done yet:

  • End-to-end encryption.
  • Recording of video messages.
  • No support for switching between multiple backends.
  • No support for multiple accounts.
  • Mentions, hashtags.
  • Previews not generated for audio, links or docs.

Direct Dependencies

SDK:

SDK contains no Android-specific dependencies.

Application

Closed source

Open source

Other

Demo avatars and some other graphics are from https://www.pexels.com/ under CC0 license.

Background patterns from http://subtlepatterns.com/, commercial and non-commercial use allowed with attribution.

The contacts.vcf contains a list of contacts which can be used for testing. Push it to your emulator using command

adb push contacts.vcf /sdcard/contacts.vcf

Push notifications

If you want to use the app with your own server and want push notification to work you have to set them up:

  • Register at https://firebase.google.com/, set up the project if you have not done so already.
  • Download your own config file google-services.json and place it to the app/ folder of your copy of Tindroid project. The config file contains keys specific to your Firebase/FCM registration.
  • Copy Google-provided server key to tinode.conf, see details here.
  • Recompile the app. If you add google-services.json incorrectly the app will compile but will later crash with non-obvious exceptions.

Translations

The app is currently available in the following languages:

  • English
  • Chinese (simplified)
  • Chinese (traditional)
  • French
  • German
  • Hindi
  • Indonesian
  • Italian
  • Korean
  • Portuguese
  • Romanian
  • Russian
  • Spanish
  • Ukrainian

More translations are welcome. See instructions.

Screenshots

App screenshot - chat list App screenshot - chat App screenshot - chat settings App screenshot - video call App screenshot - searching for contacts App screenshot - forward message