Welcome to the Conversations Demo application. This application demonstrates a basic conversations client application with the ability to create and join conversations, add other participants into the conversations and exchange messages.
What you'll minimally need to get started:
- A clone of this repository
- A way to create a Conversations Service Instance and generate client tokens
- Google Play Services library : Follow the instructions here
Generate google-services.json file and place it under app/
.
Set the value of ACCESS_TOKEN_SERVICE_URL
in gradle.properties
file to point to a valid Access-Token server.
So your Access-Token server should provide valid token for valid credentials by URL:
$ACCESS_TOKEN_SERVICE_URL?identity=<USER_PROVIDED_USERNAME>&password=<USER_PROVIDED_PASSWORD>
and return HTTP 401 if case of invalid credentials.
Create the gradle.properties
file if it doesn't exist with the following contents:
ACCESS_TOKEN_SERVICE_URL=http://example.com/get-token/
NOTE: no need for quotes around the URL, they will be added automatically.
You can also pass these parameters to gradle during build without need to create a properties file, as follows:
./gradlew app:assembleDebug -PACCESS_TOKEN_SERVICE_URL=http://example.com/get-token/
- Create a new function in Twilio functions using template
Blank
- On the next line add
/token-service
to thePATH
. Copy the wholePATH
and use it asACCESS_TOKEN_SERVICE_URL
(see above) - Uncheck the Check for valid Twilio signature checkbox
- Insert the following code:
// If you do not want to pay for other people using your Twilio service for their benefit,
// generate user and password pairs different from what is presented here
let users = {
user00: "", !!! SET NON-EMPTY PASSWORD AND REMOVE THIS NOTE, THIS GENERATOR WILL NOT WORK WITH EMPTY PASSWORD !!!
user01: "" !!! SET NON-EMPTY PASSWORD AND REMOVE THIS NOTE, THIS GENERATOR WILL NOT WORK WITH EMPTY PASSWORD !!!
};
exports.handler = function(context, event, callback) {
if (!event.identity || !event.password) {
let response = new Twilio.Response();
response.setStatusCode(401);
response.setBody("No credentials");
callback(null, response);
return;
}
if (users[event.identity] != event.password) {
let response = new Twilio.Response();
response.setStatusCode(401);
response.setBody("Wrong credentials");
callback(null, response);
return;
}
let AccessToken = Twilio.jwt.AccessToken;
let token = new AccessToken(
context.ACCOUNT_SID,
context.TWILIO_API_KEY,
context.TWILIO_API_SECRET, {
identity: event.identity,
ttl: 3600
});
let grant = new AccessToken.ChatGrant({ serviceSid: context.SERVICE_SID });
grant.pushCredentialSid = context.PUSH_CREDENTIAL_SID;
token.addGrant(grant);
callback(null, token.toJwt());
};
- Save the function
- Open Configure page and setup values for the following
Environment Variables
: - SERVICE_SID
- Open Conversational Messaging
- Select
View Service
near theDefault Conversation Service
- Copy the
Service SID
- Also navigate to
Push configuration
and enable all types of notifications for receiving FCM messages
- TWILIO_API_KEY and TWILIO_API_SECRET
- Create an API KEY here
- PUSH_CREDENTIAL_SID
- Create new push credentials here using
Server key
fromFirebase Cloud Messaging
If you want to see crashes reported to crashlytics:
-
In order to see native crashes symbolicated upload symbols into the Firebase console:
./gradlew app:assembleBUILD_VARIANT
./gradlew app:uploadCrashlyticsSymbolFileBUILD_VARIANT
for example to upload symbols for debug
build type run:
./gradlew app:assembleDebug
./gradlew app:uploadCrashlyticsSymbolFileDebug
Read more about Android NDK crash reports.
- Login into application and navigate to
Menu -> Simulate crash in
in order to check that crashes coming into Firebase console.
Run ./gradlew app:assembleDebug
to fetch Twilio SDK files and build application.
You can import this project into Android Studio and then build as you would ordinarily. The token server setup is still important.
Build in debug configuration, this will enable verbose logging.
MIT