Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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
8 of 11 tasks
utunga opened this issue Apr 10, 2022 · 19 comments
Assignees

Comments

@utunga
Copy link
Contributor

utunga commented Apr 10, 2022

Research scope

For each of the following, platforms we need to

  • do some research
  • collate some relevant links
  • make some comments on how this would work
  • be clear on what information we would need to
    collect (eg handle) and whether we need to do
    a verification step (eg confirm phone number)
  • make a call on if its just not possible in a mobile app

Acceptance criteria

  • Links, comments, decision on Email
  • Links, comments, decision on (local) SMS/default messaging
  • Links, comments, decision on Telegram
  • Links, comments, decision on Twitter
  • Links, comments, decision on Instagram
  • Links, comments, decision on Slack
  • Links, comments, decision on FB Messenger

Nice to have

  • Links, comments, decision on WhatsApp
  • Links, comments, decision on Discord
  • Links, comments, decision on LinkedIn
  • Links, comments, decision on WeChat
@mjxchina
Copy link
Contributor

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
Copy link
Contributor

mjxchina commented Apr 13, 2022

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
Copy link
Contributor

mjxchina commented Apr 13, 2022

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
Copy link
Contributor

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
Copy link
Contributor

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
Copy link
Contributor

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.

  • Deeplink using https://www.facebook.com/{page_name} (will open the web version)
  • Deeplink using fb://profile/{page_id} on iOS or fb://page/{page_id} on Android. (will open the app if installed, or throw an error)

@mjxchina
Copy link
Contributor

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
Copy link
Contributor Author

utunga commented Apr 14, 2022

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
Copy link
Contributor

@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
Copy link

strypey commented Apr 20, 2022

@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
Copy link
Contributor Author

utunga commented Apr 20, 2022

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
Copy link
Contributor Author

utunga commented Apr 20, 2022

@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
Copy link
Contributor

@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
Copy link
Contributor Author

utunga commented Apr 21, 2022

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
Copy link
Contributor

@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
Copy link

strypey commented May 14, 2022

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
Copy link

strypey commented May 15, 2022

@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
Copy link
Contributor Author

utunga commented May 15, 2022

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

@strypey
Copy link

strypey commented Nov 21, 2022

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;

  • the app sets up a new account on the matrix.org homeserver, or a geographically specific homeserver (like mtrx.nz for kiwis). Obvious pro is that it's low effort for Together crew compared to maintaining a homeserver yourselves. One downside is that you'd be relying on the homeserver(s) you choose to continue allowing open registrations (and to keep existing ;)

  • the app sets up a new account on a matrix homeserver run by Together project. One downside is that this adds an operational cost for Together project, but otherwise ought to be sustainable as long as Together project itself is healthy. On the plus side, a Together homeserver could also host 'staff' accounts for Together crewmembers, and chat rooms for Together and allied projects, potentially replacing (or bridging to) proprietary silos like Discord and Slack. Because of the way matrix is federated, rooms started on the Together homeserver could be cloned on others, so that if you ever needed to sunset the Together homeservers, the chat rooms could continue pretty much unaffected.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
Status: Done
Development

No branches or pull requests

3 participants