Websockets and iOS apps questions

Before i try to build a ios app with phoenix as backend server I have a question. So, I am going to build a demo ios messaging app that will use phoenix channels and I havent found much info on the web so if you guys have done something like this can u tell me

I am going to build an ios chat app that will be using phoenix. So if any of you guys have experience with it, can you please clear some of my questions?

  • What are the pitfalls/limitations when using phoenix websocket with ios apps
  • Do I have to make any changes in the phoenix channel side to get websocket working for ios apps?
  • Any tutorial that I can go to, to connect phoenix websocket and ios app?

check out GitHub - davidstump/SwiftPhoenixClient: Connect your Phoenix and iOS applications through WebSockets! if you are going for swift ios app… it includes a basic example and link to more advanced ones…

personally I use phoenix channels for my ios/android apps - though I use react native - so I actually use the standard phoenix.js implementation - works great!

I run everything over the channels (except initial login that is a normal POST)… no issues, works wonderfully…

3 Likes

How has been your battery consumption and performance on spotty connections ?

I am considering a similar model, any more details or advice you can offer on using ReactNative with Phoenix.js and Elixir/Phoenix?

It works super great.

I use http(s) for the login and getting a token.

then phoenix.js is used in a class PhxService.

with a start function that takes the token and connects the websocket and two channels (user and public).

I have this in the join function:
Process.send_after(self(), :after_join, 10)

which then sends over all the data the app needs - which goes into the different redux reducers (or whatever they are called), so entire app is hydrated.

In PhxService you then have functions for making calls over the different channels, and getting response back, same for message received that then fires of redux-observable events.

this is of course an overview - I use rxjs and redux-observable to tame it all - but surely equally good and simpler solutions exists today.

1 Like

Thanks for the response!

1 Like
      this.channel.on("new_chat", payload => {
        store.dispatch({
          type: "NEW_CHAT",
          payload: payload
        });
      });

this is with observables - but just return normally to where you are calling from…

  callApi(apiName, body) {
     if (this.channel) {
        this.channel
          .push(apiName, body || {}, 44000)
          .receive("ok", msg => {
            observer.next(msg);
            observer.complete();
          })
          .receive("error", resp => {
            observer.error(resp);
            observer.complete();
          })
          .receive("timeout", () => {
            observer.error("timeout");
            observer.complete();
          });
}
else {
        return observer.error("no_channel");
      }
}