CashlessSociety / together_app

Together Project
https://togetherproject.nz
9 stars 1 forks source link

Research: As a user I would like to be able to click something in Together App that lets me connect on other platforms so we can coordinate activities #59

Open utunga opened 2 years ago

utunga commented 2 years ago

Research scope

For each of the following, platforms we need to

Nice to have

mjxchina commented 2 years ago

Examples for sending emails and SMSs can be found in the side menu -> Admin Portal -> Test Contact Methods.

Packages used: flutter_email_sender flutter_sms

mjxchina commented 2 years ago

For Telegram:

  1. It is possible to use the url_launcher package to open a link like https://t.me/{username} to launch the Telegram web page or app (if installed) and send messages directly.
  2. It is also possible to integrate a Telegram bot into the Flutter app using teledart package.
mjxchina commented 2 years ago

For Twitter:

It is possible to use the url_launcher package to open a link like https://twitter.com/{username} to launch the Twitter web page or app (if installed) and see the person's profile.

mjxchina commented 2 years ago

For Instagram:

It is possible to use the url_launcher package to open a link like https://instagram.com/{username} to launch the Instagram web page or app (if installed) and see the person's profile.

mjxchina commented 2 years ago

For Slack:

It is possible to use the url_launcher package to open a link and would either open the Slack web page or app.

Deeplink using https:// (will open the web version)

Deeplink using slack:// (will open the app if installed, or throw an error)

mjxchina commented 2 years ago

For Facebook:

It is possible to use the url_launcher package to open a link and would either open the Facebook web page or app.

mjxchina commented 2 years ago

For WhatsApp:

It is possible to use the url_launcher and whatsapp_unilink packages to open a link that would open the WhatsApp web page or app.

utunga commented 2 years ago

For these ones which would throw an error if not installed as an app ...is it possible to tell if the app in question (eg Instagram) is installed.. ?

mjxchina commented 2 years ago

@utunga We can use the canLaunch(String urlString) function from url_launcher to check if the URL can be handled or not. If not, we just open the https web link.

strypey commented 2 years ago

@utunga Be good to see matrix and ActivityPub on the list, open tech projects working together and all that. Plus, since the protocols are open and documented, in theory it ought to be fairly easy to interoperate.

utunga commented 2 years ago

That's a good point @strypey .. uhm yeah i guess it'd have to be specific clients though, but yes.

On my todo list to send a message asking the folks at xchc as to what they think are most likely to get used.

I wonder also about if you could send some screenshots of AntennaPod on Android

Also.. the more i think about this the more I feel like maybe we just need an internal messaging system in the app. Might even be easier to build that than to build out support for all the crazy different hoops you have to hop through to make a seamless messaging experience even with one of these clients - I had a good hui with @mjxchina about that.

utunga commented 2 years ago

@mjxchina what do you think? Is it simpler to just add a simple internal messaging system to the app than to add support for some of the more tricky third-party apps?

@strypey I wonder if we could add drop in support for messaging over matrix or something?

mjxchina commented 2 years ago

@utunga For an app where users could post requests and pick the right candidates for the work, I think it's more important to have an IM system so people can communicate inside the app directly.

We could use a 3rd party IM SDK to achieve this feature.

utunga commented 2 years ago

OK cool. So.. hmm.. maybe we should pivot on this.

I think where we are at is that your research indicates that the 'open messaging in another app' is a bit harder than we thought. - letting people just list their social media handles is easy, but using that for communications is a bit harder.

If you are able to make a recommendation for a 3rd party IM platform that would be great. For the longer term health of this platform its important that it doesn't carry with it unsustainable charges - or, really, any charges.

So, yeah I guess maybe we need to store and deliver the messages on our messaging substrate itself. Eg if we switch the back end to ssb at some point then we'd use private messaging there.. thats in the longer term .. shorter term perhaps we can store the messages unencrypted on the DGraph db? But would be great if there are dart components we can use to make the whole messaging/notification/edit draft etc experience as easy as possible?

Would be awesome if you could do some research and make a recommendation on that @mjxchina ...

mjxchina commented 2 years ago

@utunga For IM SDK, there are some good options in the market but they all would require a monthly fee that I would consider unsustainable for this open-source project at the current stage. They do offer a free plan but there are restrictions on how many users or connections it supports.

So I guess a better option would be to use Firebase In-App Messaging for the IM feature. And for Flutter implementations, check out these packages: flutter_chat_ui flutter_firebase_chat_core

strypey commented 2 years ago

I strongly discouraged Loomio from adding a widget for DM (Direct Messaging) between users, and instead to just deliver DMs as emails. ie the DM is delivered to the email address associated with the user account being messaged, with the user sending the message as the reply-to address. That way people can just follow up with each other from there. This works well on FreeCycle.org too, although a more recent version also displays my user chats in the web UI if I'm logged in.

@utunga

if we switch the back end to ssb at some point then we'd use private messaging there

That sounds like the best solution.

I wonder if we could add drop in support for messaging over matrix or something?

One way this could work is for Together to include a matrix client, but this would require Together users to have (or create) an account on a matrix server. Or the Together team would need to run a matrix server and have the app automatically create a new account on it as part of bootstrapping a new Together user. Also, even the simplest matrix client is going to add a lot of bulk to your app.

strypey commented 2 years ago

@utunga @mjxchina FWIW I asked the fediverse about drop-in support for matrix and got this response from a user called @deepbluev7@fosstodon.org:

"If you want to embed #matrix into your Flutter app, you can probably just use the Matrix Dart SDK.

Here is an example how to use it:

https://gitlab.com/famedly/company/frontend/famedlysdk/-/blob/main/example/main.dart

(It might be lighter weight to write your own handler for /login, /sync and /send, but the SDK gives you e2ee for basically free, if you want to.)"

utunga commented 2 years ago

That's very cool thanks @strypey .. the more i think about it the more I like this idea.

strypey commented 1 year ago

Necro-posting on an old issue that may have passed out of relevance, but FTR...

In an ideal world, everyone getting set up on Together app for the first time already has a matrix account somewhere, and all the app's chat UI has to do is function as a client for that account. In our world, you have to decide what the app will do for people who don't have one yet. Options;