App works while testing on browser but doesn't on actual device


#1

Hi, there.

The issue(When on mobile)
When the device is ready socket get connected, everything works fine. When I send message or get some other info using sockets it works fine. But when I send message from the browser to the device it doesn’t deliver, But when i send message from the device to the browser it gets delivered.

I have tried several steps to debug this, but couldn’t come up with any useful info.

This several steps include:

  • showing an alert when the socket connects( Works, which shows the socket connection on mobile is connecting)

  • showing an alert when a message is received from socket which doesn’t work.

Below is my code

In app.component.ts I have this piece of code which fires when app is ready

import { SocketProvider } from "../providers/socket/socket";
//Some other imports
constructor(private socket: SocketProvider,){
  //Some codes runs here.
}
this.data.currentUser((user) => {
        if (user) {
          this.socket.connect(user.user).subscribe((io) => {
            this.socket.listenIncomingMessage();//Init the incoming message socket listener 
            this.util.presentAlert({ message: "Socket Did Connected" });//Shows an alert that socket did connect(which works)
          });
        }
      })

In SocketProvider I have this piece of code

import { Injectable } from '@angular/core';
import { Http } from '@angular/http';
import 'rxjs/add/operator/map';
import * as io from "socket.io-client";
import { UtilProvider } from "../util/util";
import { DataProvider } from "../data/data";
import { Events } from "ionic-angular";
import { Observable } from "rxjs/Observable";

connect(user) {
    return Observable.create((observer) => {
      if (user !== undefined) {
        this.currentUser = user;
        this.socket = io('https://myapp-someserver-url.com/', { query: `userId=${this.currentUser._id}` });
        this.socket.on('connect', () => {
          //add-message-response emits from the node server.
          this.socket.on('add-message-response',(data, user)=>{
            //For debugging purpose on mobile I have this alert here
            this.util.presentAlert({title:'New Message',subTitle:'Connection Block',message:data.message});// This doesn't work on mobile device.
          });
          // console.log(`Connected to socket ${this.socket.id}`);
          this.util.presentAlert({message:"Socket Connected"});//This works on mobile alert show each time socket connects
          observer.next(this.socket);
        });
      }
    })
  }

listenIncomingMessage() {
    this.util.presentAlert({message:"listenIncomingMessage Initiated"});//This alert shows up which means this function was initiated but the block code doesn't work
    /**
     * Listen to new message event from socket
     * Get the current page the user is, if the user is on chat interface don't vibrate
     * Except the fromId is != the current user chatting
     */
    //From my debugging so far, this block of code below doesn't execute on mobile device but works on browser.
    this.socket.on('add-message-response',(data, user)=>{
      this.util.presentAlert({title:"newMessage",message:data.message});//For debugging purpose when on mobile, but this doesn't work on mobile device.
      this.events.publish('socket:incoming',data, user);//Publish some events
      this.events.publish('socket:skool-chat',data, user);//Publish some events
      if (this.util.currentComponent !== 'ChatPage') {
        this.util.doVibrate();
        this.whenMessageComesAction(data);
      } else {
        if (data.fromUserId !== this.data.currentSelectedUserId) {
          this.whenMessageComesAction(data);//Perform some actions
        }
      }
    })
  }

I would have taught this.socket.on('add-message-response',(data, user)=>{}); Wasn’t emitted from my server side that’s why is not working but it works on mobile device.

Please any clue/observation is highly needed, thank you.


#2

Update: Just tested on android 4.4.2 and 5 its works fine my device is 7.0


#3

getting the same issue. it is because of the socket client not able to establish the connection. that is why it is not working in mobile devlice.

have u resolve this issue?