{"id":6134,"date":"2021-03-22T08:46:45","date_gmt":"2021-03-22T08:46:45","guid":{"rendered":"https:\/\/uhp.digital\/?p=6134"},"modified":"2021-03-22T08:46:50","modified_gmt":"2021-03-22T08:46:50","slug":"empfangen-von-messages-laravel-echo-socket-io-backends-android","status":"publish","type":"post","link":"https:\/\/uhp.digital\/en\/blog\/empfangen-von-messages-laravel-echo-socket-io-backends-android\/","title":{"rendered":"Receiving Messages From Laravel Echo Socket IO Backend in Android Application"},"content":{"rendered":"<p>Laravel framework provides a very nice way of subscribing to channels and listening to events. In this article, we will explore how we can receive broadcasted events from the Laravel web app in android applications, all while using WebSockets. <\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img fetchpriority=\"high\" decoding=\"async\" width=\"985\" height=\"773\" src=\"https:\/\/uhp.digital\/wp-content\/uploads\/2021\/03\/1600165614638.png\" alt=\"\" class=\"wp-image-6135\" srcset=\"https:\/\/uhp.digital\/wp-content\/uploads\/2021\/03\/1600165614638.png 985w, https:\/\/uhp.digital\/wp-content\/uploads\/2021\/03\/1600165614638-300x235.png 300w, https:\/\/uhp.digital\/wp-content\/uploads\/2021\/03\/1600165614638-768x603.png 768w, https:\/\/uhp.digital\/wp-content\/uploads\/2021\/03\/1600165614638-16x12.png 16w\" sizes=\"(max-width: 985px) 100vw, 985px\" \/><figcaption>Laravel Echo Web &amp; Android App Sample<\/figcaption><\/figure>\n\n\n\n<p>The first section of this article will describe Laravel web application setup and the second section will describe how we can integrate Socket IO in an android application. <\/p>\n\n\n\n<p>If you are interested in the Android part of the article, you can skip the web setup section. At the end of the article are the links to the source code of both applications, so you can test the whole setup. <\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>Laravel Web Application Setup<\/strong> <\/h4>\n\n\n\n<p>The main purpose of the Laravel web application is to create\/broadcast messages to available clients. In our web application we\u2019ll use Redis broadcaster with Socket.IO server. In this section, we\u2019ll show all the steps required for the Laravel web application to send broadcasted messages via WebSocket. <\/p>\n\n\n\n<p>The Redis broadcaster will broadcast messages from our <em>MessagesController<\/em> (that we\u2019ll create later) using pub\/sub feature. We\u2019ll pair it with a Socket IO server so we can receive messages from Redis and broadcast them to Socket IO channels.<\/p>\n\n\n\n<p>So, the very first thing is to install Laravel Echo:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">npm install --save laravel-echo<\/pre>\n\n\n\n<p>and Redis, via composer:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">composer require predis\/predis<\/pre>\n\n\n\n<p>Don\u2019t forget to set Redis as broadcast driver in <em>.env<\/em>file:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">BROADCAST_DRIVER=redis<\/pre>\n\n\n\n<p>And specify Redis properties: <\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">REDIS_CLIENT=predis\nREDIS_PREFIX=\"\"<\/pre>\n\n\n\n<p>Next, we are going to pair Redis broadcaster with Socket.IO server. Because we want to receive and send messages in web application (and also in android application), we\u2019ll need to install the appropriate Javascript library:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">npm install \u2014 save socket.io-client <\/pre>\n\n\n\n<p>After installing Socket.IO Javascript client, we need to instantiate global Echo object with Socket.IO as broadcaster <em>(in resources\/js\/bootstrap.js<\/em>). <\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">import Echo from 'laravel-echo';\n\nwindow.io = require('socket.io-client');\n\nwindow.Echo = new Echo({\n    broadcaster: 'socket.io',\n    host: window.location.hostname + ':6001'\n});<\/pre>\n\n\n\n<p>After specifying Echo object, we need to execute the following command in order to include it in our <em>app.js<\/em> (that we are going to use later) for listening of Echo events in our web app:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">npm install<br>npm run dev<\/pre>\n\n\n\n<p>Now we are very close to the finishing of Laravel dependencies configuration process. The very last thing is to install Socket.IO server. Because Laravel doesn\u2019t come with the Socket.IO server included, we\u2019ll use the community driven Socket.IO server: https:\/\/github.com\/tlaverdure\/laravel-echo-server\nIn order to install the <em>laravel-echo-server<\/em> we need to execute the following command: <\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">npm install -g laravel-echo-server<\/pre>\n\n\n\n<p>After installing, we need to initialize the <em>laravel-echo-server<\/em> by executing the following command:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">laravel-echo-server init<\/pre>\n\n\n\n<p>and when the echo server configuration is done, we can start it by running the following command: <\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">laravel-echo-server start<\/pre>\n\n\n\n<p>If the server is successfully started, you\u2019ll get the following output: <\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"394\" height=\"180\" src=\"https:\/\/uhp.digital\/wp-content\/uploads\/2021\/03\/1600165614626.png\" alt=\"\" class=\"wp-image-6136\" srcset=\"https:\/\/uhp.digital\/wp-content\/uploads\/2021\/03\/1600165614626.png 394w, https:\/\/uhp.digital\/wp-content\/uploads\/2021\/03\/1600165614626-300x137.png 300w, https:\/\/uhp.digital\/wp-content\/uploads\/2021\/03\/1600165614626-16x7.png 16w\" sizes=\"(max-width: 394px) 100vw, 394px\" \/><\/figure>\n\n\n\n<p>By completing the <em>laravel-echo-server<\/em> installation, we have preconfigured everything that is important on our Laravel web application side in order to send messages via Laravel Echo. So, in the next step we are going to make a controller that will send Laravel Echo messages. Before creating a controller that will send our messages, let us explain a little bit about how those messages can be sent. <\/p>\n\n\n\n<p>Events that Laravel app will send are broadcasted over channels, which can be public or private. In our sample we\u2019ll use a public channel, but if you want to prevent unauthorized users from listening channel events, you can register for a private channel. \nLet us now create an event called <em>MessageCreated class<\/em> in <em>app\/Events folder<\/em>), that will be sent when we want to send a Laravel Echo message to our subscribers (web app and android app): <\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">&lt;?php \n\nnamespace App\\Events;\n\nuse Illuminate\\Broadcasting\\Channel;\nuse Illuminate\\Contracts\\Broadcasting\\ShouldBroadcast;\n\nclass MessageCreated implements ShouldBroadcast\n{\n    public $message;\n\n    public function __construct($message) \n    {\n        $this-&gt;message = $message;\n    }\n\n    public function broadcastOn()\n    {\n        return new Channel('messages');\n    }\n}\n<\/pre>\n\n\n\n<p>In constructor, we are specifying the message that will be sent to all the clients, while the <em>broadcastOn<\/em> method specifies the channel name which will be receiving those messages.\nThe next step is to finally create our <em>MessagesController<\/em>that will use the MessageCreated event that we created previously. <em>MessageCreated class<\/em>event that we created previously. <\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">&lt;?php\n\nnamespace App\\Http\\Controllers;\n\nuse App\\Http\\Controllers\\Controller;\nuse Illuminate\\Http\\Request;\nuse App\\Events\\MessageCreated;\n\nclass MessagesController extends Controller\n{\n    protected function index() \n    {\n        return view('messages');\n    }\n\n    protected function sendMessage(Request $request)\n    {\n        $message = $request-&gt;message;\n        broadcast(new MessageCreated($message));\n        return response()-&gt;json([\n            'status' =&gt; 'message is sent successfuly!'\n        ]);\n    }\n} <\/pre>\n\n\n\n<p>We should add the route to method <em>sendMessage()<\/em> in <em>web.php<\/em> .<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">Route::post('messages', 'MessagesController@sendMessage');<\/pre>\n\n\n\n<p>In order to display a form to user where the user can specify the message that will be sent to clients, we need to make an appropriate view<em>messages.blade.php<\/em>). <\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">&lt;form id=&quot;newMessageForm&quot; action=&quot;&quot;&gt;\n  &lt;div class=&quot;form-group&quot;&gt;\n      &lt;label for=&quot;messageInput&quot;&gt;Message&lt;\/label&gt;\n      &lt;input type=&quot;text&quot; class=&quot;form-control&quot; id=&quot;messageInput&quot; placeholder=&quot;Enter some message&quot;&gt;\n  &lt;\/div&gt;\n  &lt;button id=&quot;submitButton&quot; type=&quot;submit&quot; class=&quot;btn btn-primary&quot;&gt;Submit&lt;\/button&gt;\n  &lt;br\/&gt;&lt;br\/&gt;\n  &lt;div class=&quot;form-group&quot;&gt;\n    &lt;label for=&quot;messagesList&quot;&gt;Received messages:&lt;\/label&gt;\n    &lt;ul id=&quot;messagesList&quot; class=&quot;list-group&quot;&gt;\n    &lt;\/ul&gt;\n  &lt;\/div&gt;\n&lt;input type=&quot;hidden&quot; name=&quot;trp-form-language&quot; value=&quot;en&quot;\/&gt;&lt;\/form&gt;<\/pre>\n\n\n\n<p>Our form consists of an input field where the user can write a message, a submit button and a container for received messages (since the web application is also a client that can receive messages).\nIn the messages view, we need to add some methods for listening Echo events and methods for sending messages: <\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">    &lt;script src=\"\/\/{{ Request::getHost() }}:6001\/socket.io\/socket.io.js\"&gt;&lt;\/script&gt;\n    &lt;script src=\"{{ asset('\/js\/app.js') }}\"&gt;&lt;\/script&gt;\n    &lt;script src=\"https:\/\/code.jquery.com\/jquery-3.5.1.min.js\"&gt;&lt;\/script&gt;   \n    &lt;script&gt;\n      $(\"#newMessageForm\").submit(function(event) {\n        event.preventDefault();\n        const message = $(\"#messageInput\").val();\n        if (message === \"\") {\n          alert(\"Please add some message!\");\n          return;\n        }\n        postMessageToBackend(message);\n      });\n      \n      function postMessageToBackend(message) {\n        $.post(\"messages\", {\n          \"_token\": \"{{ csrf_token() }}\",\n          \"message\": message \n        }).fail(function() {\n          alert(\"Error occurred during sending the data. Please retry again later.\");\n        })\n      }\n\n      window.Echo.channel('messages').listen('MessageCreated', (e) =&gt; {\n        addMessageToList(e.message);\n      });\n      \n      function addMessageToList(message) {\n        const newLi = `&lt;li class=\"list-group-item\"&gt;${message}&lt;\/li&gt;`;\n        $(\"#messagesList\").prepend(newLi);\n      }\n    &lt;\/script&gt; <\/pre>\n\n\n\n<p>A very important part of code listing from above is the line<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">window.Echo.channel(\u2018messages\u2019)<\/pre>\n\n\n\n<p>where our web application is listening for MessageCreated event in the messages channel. Method <em>postMessageToBackend()<\/em> is executing asynchronous POST request and it creates new message broadcast. It\u2019s invoked when user clicks on the submit button.\nRoute to the MessagesController, specified in web.php: <\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">Route::get(\u2018messages\u2019, \u2018MessagesController@index\u2019);<\/pre>\n\n\n\n<p>Now is the time to start our web application: <\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">php artisan serve<\/pre>\n\n\n\n<p>and by browsing the following url, we can see our messages form: <\/p>\n\n\n\n<p><a href=\"http:\/\/localhost:8000\/messages\">http:\/\/localhost:8000\/messages<\/a><\/p>\n\n\n\n<p>Now we are finished with the simple Laravel Application, so we can start with the Android application implementation. <\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>Android Socket.IO Client Setup<\/strong> <\/h4>\n\n\n\n<p>The Android application will establish the connection with the Laravel Echo server, receive broadcasted messages, and display them on the screen.\nThe main screen will have a simple layout - only one <em>TextView<\/em>that will show all received messages:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">&lt;?xml version=\"1.0\" encoding=\"utf-8\"?&gt;\n&lt;androidx.constraintlayout.widget.ConstraintLayout xmlns:android=\"http:\/\/schemas.android.com\/apk\/res\/android\"\n    xmlns:app=\"http:\/\/schemas.android.com\/apk\/res-auto\"\n    xmlns:tools=\"http:\/\/schemas.android.com\/tools\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    tools:context=\".MainActivity\"&gt;\n\n    &lt;TextView\n        android:id=\"@+id\/text_message\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:textSize=\"20sp\"\n        tools:text=\"Message\"\n        app:layout_constraintBottom_toBottomOf=\"parent\"\n        app:layout_constraintLeft_toLeftOf=\"parent\"\n        app:layout_constraintRight_toRightOf=\"parent\"\n        app:layout_constraintTop_toTopOf=\"parent\" \/&gt;\n\n&lt;\/androidx.constraintlayout.widget.ConstraintLayout&gt; <\/pre>\n\n\n\n<p>In order to make the socket connection to our Laravel Echo server, we need to import an appropriate library in the Android project: <\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">implementation \u2018com.github.MrBin99:LaravelEchoAndroid:1.03\u2019<\/pre>\n\n\n\n<p>This library will allow us to connect to the socket server and to receive messages sent from the server.\nWe are going to create a <em>BaseActivity,<\/em> a class that will be our base class containing all the required functionality for connecting to the echo server: <\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">const val SERVER_URL = \"http:\/\/10.0.2.2:6001\"\nconst val CHANNEL_MESSAGES = \"messages\"\nconst val EVENT_MESSAGE_CREATED = \"MessageCreated\"\nconst val TAG = \"msg\"\n\nopen class BaseSocketActivity : AppCompatActivity() {\n\n    private var _receivedEvent = MutableLiveData&lt;Any&gt;()\n    var receivedEvent = _receivedEvent\n\n    private var echo: Echo? = null\n\n    protected fun connectToSocket() {\n        val options = EchoOptions()\n        options.host = SERVER_URL\n\n        echo = Echo(options)\n        echo?.connect(object : EchoCallback {\n            override fun call(vararg args: Any?) {\n                log(\"successful connect\")\n                listenForEvents()\n            }\n        }, object : EchoCallback {\n            override fun call(vararg args: Any?) {\n                log(\"error while connecting: \" + args.toString())\n            }\n        })\n    }\n\n    protected fun listenForEvents() {\n        echo?.let {\n            it.channel(CHANNEL_MESSAGES)\n                .listen(EVENT_MESSAGE_CREATED) {\n                    val newEvent = MessageCreated.parseFrom(it)\n                    displayNewEvent(newEvent)\n                }\n        }\n    }\n\n    protected fun disconnectFromSocket() {\n        echo?.disconnect()\n    }\n\n    private fun log(message: String) {\n        Log.i(TAG, message)\n    }\n\n    private fun displayNewEvent(event: MessageCreated?) {\n        log(\"new event \" + event?.message)\n        _receivedEvent.postValue(event)\n    }\n}<\/pre>\n\n\n\n<p>In the code above, we can see that we have a few socket-related methods. Methods <em>connectToSocket()<\/em> and <em>disconnectFromSocket()<\/em> are methods that are responsible for connecting or disconnecting from WebSocket. Method <em>listenForEvents()<\/em> is method that is called after we have established a successful socket connection and its main job is to \u2018listen\u2019 for events that are broadcasted from our socket backend.<\/p>\n\n\n\n<p>In order to receive the socket broadcast, we must specify the same \u2018channel\u2019 and \u2018message\u2019 as it is defined in backend configuration. After we have received a socket broadcast message, we have to parse its content. For that, we are using the<em> parseFrom()<\/em>method from a companion object of <em>MessageCreated class<\/em>.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">class MessageCreated(\n    val message: String\n) {\n\n    companion object {\n        fun parseFrom(value: Array&lt;Any&gt;): MessageCreated? {\n            val messageData = value[1] as org.json.JSONObject\n            try {\n                return Gson().fromJson(messageData.toString(), MessageCreated::class.java)\n            } catch (e: Exception) {\n                e.printStackTrace()\n            }\n            return null\n        }\n    }\n\n}<\/pre>\n\n\n\n<p>In order to parse the received message, we are going to use Gson library, so we need to import it in our app\/build.gradle file: <\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">implementation \u2018com.google.code.gson:gson:2.8.6\u2019<\/pre>\n\n\n\n<p>We also need to add an appropriate repository location, from which this library will be fetched, in the project level <em>build.gradle<\/em> file: <\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">allprojects {\n&nbsp;&nbsp;&nbsp;&nbsp;repositories {\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;maven { url 'https:\/\/jitpack.io' }\n&nbsp;&nbsp;&nbsp;&nbsp;}\n}<\/pre>\n\n\n\n<p>After we have created a <em>BaseSocketActivity<\/em> we can set our <em>MainActivity<\/em> to inherit the&nbsp;<em>BaseSocketActivity<\/em> and call the appropriate methods for establishing and destroying the socket connection:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">class MainActivity : BaseSocketActivity() {\n\n    override fun onCreate(savedInstanceState: Bundle?) {\n        super.onCreate(savedInstanceState)\n        setContentView(R.layout.activity_main)\n        connectToSocket()\n        initLiveDataListener()\n    }\n\n    override fun onDestroy() {\n        super.onDestroy()\n        disconnectFromSocket()\n    }\n\n    private fun initLiveDataListener() {\n        receivedEvent.observe(this, Observer {\n            displayEventData(it)\n        })\n    }\n\n    private fun displayEventData(event: Any) {\n        if (event is MessageCreated) {\n            text_message.apply {\n                val newText = event.message + \"\\n\" + this.text.toString()\n                text = newText\n            }\n        }\n    }\n}<\/pre>\n\n\n\n<p>Since the cleartext HTTP traffic is not explicitly permitted, we need to specify that in the network security configuration <em>res\/xml\/network_security_config.xml<\/em>): <\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">&lt;?xml version=\"1.0\" encoding=\"utf-8\"?&gt;\n&lt;network-security-config&gt;\n    &lt;domain-config cleartextTrafficPermitted=\"true\"&gt;\n        &lt;domain includeSubdomains=\"true\"&gt;10.0.2.2&lt;\/domain&gt;\n    &lt;\/domain-config&gt;\n&lt;\/network-security-config&gt; <\/pre>\n\n\n\n<p>and include this file as an application tag property of our manifest, like: <\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">android:networkSecurityConfig=\"@xml\/network_security_config\"<\/pre>\n\n\n\n<p>Finally, don\u2019t forget to set the internet permission in manifest: <\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">&lt;uses-permission android:name=\"android.permission.INTERNET\" \/&gt;<\/pre>\n\n\n\n<p>Now you can test everything in an android emulator. It is important to specify the socket backend url as: <\/p>\n\n\n\n<p><a href=\"http:\/\/10.0.2.2:6001\">http:\/\/10.0.2.2:6001<\/a><\/p>\n\n\n\n<p>so we can connect to our Socket IO server on our local computer. <\/p>\n\n\n\n<p>Links to web\/android application sample code:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>https:\/\/github.com\/zsasko\/laravel-echo-web-sample<\/li><li><a href=\"https:\/\/github.com\/zsasko\/laravel-echo-android-sample\">https:\/\/github.com\/zsasko\/laravel-echo-android-sample<\/a>&nbsp;<\/li><\/ul>\n\n\n\n<p>Congratulations, you can now test sending messages from a web application to an Android application, using Laravel Echo. <\/p>\n\n\n\n<p><em>If you have any questions on this or any other tech topic, feel free to reach out anytime.<\/em><\/p>","protected":false},"excerpt":{"rendered":"<p>Laravel? Android-Anwendungen? Websockets?<br \/>\nSind Sie bereits mit diesen Begriffen vertraut?<br \/>\nOder m\u00f6chten Sie einfach mehr dar\u00fcber erfahren, wie Sie broadcasted events aus einer Laravel-App in einer Android-App empfangen k\u00f6nnen?<br \/>\nWas auch immer der Grund daf\u00fcr ist, lesen Sie weiter f\u00fcr eine Schritt-f\u00fcr-Schritt-Anleitung mit Beispielen und Erkl\u00e4rungen, wie man das macht! <\/p>","protected":false},"author":1,"featured_media":6142,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"template-parts\/single-post-template.php","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[13],"tags":[],"class_list":["post-6134","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tech"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v25.8 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Empfangen von Messages eines Laravel Echo Socket IO-Backends in Android-Anwendungen - UHP<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/uhp.digital\/en\/blog\/empfangen-von-messages-laravel-echo-socket-io-backends-android\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Empfangen von Messages eines Laravel Echo Socket IO-Backends in Android-Anwendungen - UHP\" \/>\n<meta property=\"og:description\" content=\"Laravel? Android-Anwendungen? Websockets? Sind Sie bereits mit diesen Begriffen vertraut? Oder m\u00f6chten Sie einfach mehr dar\u00fcber erfahren, wie Sie broadcasted events aus einer Laravel-App in einer Android-App empfangen k\u00f6nnen? Was auch immer der Grund daf\u00fcr ist, lesen Sie weiter f\u00fcr eine Schritt-f\u00fcr-Schritt-Anleitung mit Beispielen und Erkl\u00e4rungen, wie man das macht!\" \/>\n<meta property=\"og:url\" content=\"https:\/\/uhp.digital\/en\/blog\/empfangen-von-messages-laravel-echo-socket-io-backends-android\/\" \/>\n<meta property=\"og:site_name\" content=\"UHP\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/uhpdigital\/\" \/>\n<meta property=\"article:published_time\" content=\"2021-03-22T08:46:45+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-03-22T08:46:50+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/uhp.digital\/wp-content\/uploads\/2020\/02\/FB-Logo@3x.png\" \/>\n\t<meta property=\"og:image:width\" content=\"540\" \/>\n\t<meta property=\"og:image:height\" content=\"540\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"UHP\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"UHP\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/uhp.digital\/blog\/empfangen-von-messages-laravel-echo-socket-io-backends-android\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/uhp.digital\/blog\/empfangen-von-messages-laravel-echo-socket-io-backends-android\/\"},\"author\":{\"name\":\"UHP\",\"@id\":\"https:\/\/uhp.digital\/#\/schema\/person\/82c263f7a03b60653db3cdd2d4301acb\"},\"headline\":\"Empfangen von Messages eines Laravel Echo Socket IO-Backends in Android-Anwendungen\",\"datePublished\":\"2021-03-22T08:46:45+00:00\",\"dateModified\":\"2021-03-22T08:46:50+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/uhp.digital\/blog\/empfangen-von-messages-laravel-echo-socket-io-backends-android\/\"},\"wordCount\":1244,\"publisher\":{\"@id\":\"https:\/\/uhp.digital\/#organization\"},\"image\":{\"@id\":\"https:\/\/uhp.digital\/blog\/empfangen-von-messages-laravel-echo-socket-io-backends-android\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/uhp.digital\/wp-content\/uploads\/2021\/03\/img-laravel-echo-socket-1.svg\",\"articleSection\":[\"Tech\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/uhp.digital\/blog\/empfangen-von-messages-laravel-echo-socket-io-backends-android\/\",\"url\":\"https:\/\/uhp.digital\/blog\/empfangen-von-messages-laravel-echo-socket-io-backends-android\/\",\"name\":\"Empfangen von Messages eines Laravel Echo Socket IO-Backends in Android-Anwendungen - UHP\",\"isPartOf\":{\"@id\":\"https:\/\/uhp.digital\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/uhp.digital\/blog\/empfangen-von-messages-laravel-echo-socket-io-backends-android\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/uhp.digital\/blog\/empfangen-von-messages-laravel-echo-socket-io-backends-android\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/uhp.digital\/wp-content\/uploads\/2021\/03\/img-laravel-echo-socket-1.svg\",\"datePublished\":\"2021-03-22T08:46:45+00:00\",\"dateModified\":\"2021-03-22T08:46:50+00:00\",\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/uhp.digital\/blog\/empfangen-von-messages-laravel-echo-socket-io-backends-android\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/uhp.digital\/blog\/empfangen-von-messages-laravel-echo-socket-io-backends-android\/#primaryimage\",\"url\":\"https:\/\/uhp.digital\/wp-content\/uploads\/2021\/03\/img-laravel-echo-socket-1.svg\",\"contentUrl\":\"https:\/\/uhp.digital\/wp-content\/uploads\/2021\/03\/img-laravel-echo-socket-1.svg\",\"width\":636,\"height\":484},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/uhp.digital\/#website\",\"url\":\"https:\/\/uhp.digital\/\",\"name\":\"UHP\",\"description\":\"Delivering digital impact.\",\"publisher\":{\"@id\":\"https:\/\/uhp.digital\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/uhp.digital\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/uhp.digital\/#organization\",\"name\":\"UHP\",\"url\":\"https:\/\/uhp.digital\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/uhp.digital\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/uhp.digital\/wp-content\/uploads\/2020\/01\/uhp-logo.svg\",\"contentUrl\":\"https:\/\/uhp.digital\/wp-content\/uploads\/2020\/01\/uhp-logo.svg\",\"width\":88,\"height\":40,\"caption\":\"UHP\"},\"image\":{\"@id\":\"https:\/\/uhp.digital\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/uhpdigital\/\",\"https:\/\/www.instagram.com\/uhpdigital\/\",\"https:\/\/www.linkedin.com\/company\/uhp-software\/\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/uhp.digital\/#\/schema\/person\/82c263f7a03b60653db3cdd2d4301acb\",\"name\":\"UHP\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/uhp.digital\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/c1bc770aea92efb4d58edb8d8e86f9eaa06def97a45852ce534799e57534d6c6?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/c1bc770aea92efb4d58edb8d8e86f9eaa06def97a45852ce534799e57534d6c6?s=96&d=mm&r=g\",\"caption\":\"UHP\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Receiving Messages From Laravel Echo Socket IO Backend in Android Application - UHP","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/uhp.digital\/en\/blog\/empfangen-von-messages-laravel-echo-socket-io-backends-android\/","og_locale":"en_US","og_type":"article","og_title":"Empfangen von Messages eines Laravel Echo Socket IO-Backends in Android-Anwendungen - UHP","og_description":"Laravel? Android-Anwendungen? Websockets? Sind Sie bereits mit diesen Begriffen vertraut? Oder m\u00f6chten Sie einfach mehr dar\u00fcber erfahren, wie Sie broadcasted events aus einer Laravel-App in einer Android-App empfangen k\u00f6nnen? Was auch immer der Grund daf\u00fcr ist, lesen Sie weiter f\u00fcr eine Schritt-f\u00fcr-Schritt-Anleitung mit Beispielen und Erkl\u00e4rungen, wie man das macht!","og_url":"https:\/\/uhp.digital\/en\/blog\/empfangen-von-messages-laravel-echo-socket-io-backends-android\/","og_site_name":"UHP","article_publisher":"https:\/\/www.facebook.com\/uhpdigital\/","article_published_time":"2021-03-22T08:46:45+00:00","article_modified_time":"2021-03-22T08:46:50+00:00","og_image":[{"width":540,"height":540,"url":"https:\/\/uhp.digital\/wp-content\/uploads\/2020\/02\/FB-Logo@3x.png","type":"image\/png"}],"author":"UHP","twitter_card":"summary_large_image","twitter_misc":{"Written by":"UHP","Est. reading time":"8 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/uhp.digital\/blog\/empfangen-von-messages-laravel-echo-socket-io-backends-android\/#article","isPartOf":{"@id":"https:\/\/uhp.digital\/blog\/empfangen-von-messages-laravel-echo-socket-io-backends-android\/"},"author":{"name":"UHP","@id":"https:\/\/uhp.digital\/#\/schema\/person\/82c263f7a03b60653db3cdd2d4301acb"},"headline":"Empfangen von Messages eines Laravel Echo Socket IO-Backends in Android-Anwendungen","datePublished":"2021-03-22T08:46:45+00:00","dateModified":"2021-03-22T08:46:50+00:00","mainEntityOfPage":{"@id":"https:\/\/uhp.digital\/blog\/empfangen-von-messages-laravel-echo-socket-io-backends-android\/"},"wordCount":1244,"publisher":{"@id":"https:\/\/uhp.digital\/#organization"},"image":{"@id":"https:\/\/uhp.digital\/blog\/empfangen-von-messages-laravel-echo-socket-io-backends-android\/#primaryimage"},"thumbnailUrl":"https:\/\/uhp.digital\/wp-content\/uploads\/2021\/03\/img-laravel-echo-socket-1.svg","articleSection":["Tech"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/uhp.digital\/blog\/empfangen-von-messages-laravel-echo-socket-io-backends-android\/","url":"https:\/\/uhp.digital\/blog\/empfangen-von-messages-laravel-echo-socket-io-backends-android\/","name":"Receiving Messages From Laravel Echo Socket IO Backend in Android Application - UHP","isPartOf":{"@id":"https:\/\/uhp.digital\/#website"},"primaryImageOfPage":{"@id":"https:\/\/uhp.digital\/blog\/empfangen-von-messages-laravel-echo-socket-io-backends-android\/#primaryimage"},"image":{"@id":"https:\/\/uhp.digital\/blog\/empfangen-von-messages-laravel-echo-socket-io-backends-android\/#primaryimage"},"thumbnailUrl":"https:\/\/uhp.digital\/wp-content\/uploads\/2021\/03\/img-laravel-echo-socket-1.svg","datePublished":"2021-03-22T08:46:45+00:00","dateModified":"2021-03-22T08:46:50+00:00","inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/uhp.digital\/blog\/empfangen-von-messages-laravel-echo-socket-io-backends-android\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/uhp.digital\/blog\/empfangen-von-messages-laravel-echo-socket-io-backends-android\/#primaryimage","url":"https:\/\/uhp.digital\/wp-content\/uploads\/2021\/03\/img-laravel-echo-socket-1.svg","contentUrl":"https:\/\/uhp.digital\/wp-content\/uploads\/2021\/03\/img-laravel-echo-socket-1.svg","width":636,"height":484},{"@type":"WebSite","@id":"https:\/\/uhp.digital\/#website","url":"https:\/\/uhp.digital\/","name":"UHP","description":"Delivering digital impact.","publisher":{"@id":"https:\/\/uhp.digital\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/uhp.digital\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/uhp.digital\/#organization","name":"UHP","url":"https:\/\/uhp.digital\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/uhp.digital\/#\/schema\/logo\/image\/","url":"https:\/\/uhp.digital\/wp-content\/uploads\/2020\/01\/uhp-logo.svg","contentUrl":"https:\/\/uhp.digital\/wp-content\/uploads\/2020\/01\/uhp-logo.svg","width":88,"height":40,"caption":"UHP"},"image":{"@id":"https:\/\/uhp.digital\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/uhpdigital\/","https:\/\/www.instagram.com\/uhpdigital\/","https:\/\/www.linkedin.com\/company\/uhp-software\/"]},{"@type":"Person","@id":"https:\/\/uhp.digital\/#\/schema\/person\/82c263f7a03b60653db3cdd2d4301acb","name":"UHP","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/uhp.digital\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/c1bc770aea92efb4d58edb8d8e86f9eaa06def97a45852ce534799e57534d6c6?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/c1bc770aea92efb4d58edb8d8e86f9eaa06def97a45852ce534799e57534d6c6?s=96&d=mm&r=g","caption":"UHP"}}]}},"_links":{"self":[{"href":"https:\/\/uhp.digital\/en\/wp-json\/wp\/v2\/posts\/6134","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/uhp.digital\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/uhp.digital\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/uhp.digital\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/uhp.digital\/en\/wp-json\/wp\/v2\/comments?post=6134"}],"version-history":[{"count":7,"href":"https:\/\/uhp.digital\/en\/wp-json\/wp\/v2\/posts\/6134\/revisions"}],"predecessor-version":[{"id":6145,"href":"https:\/\/uhp.digital\/en\/wp-json\/wp\/v2\/posts\/6134\/revisions\/6145"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/uhp.digital\/en\/wp-json\/wp\/v2\/media\/6142"}],"wp:attachment":[{"href":"https:\/\/uhp.digital\/en\/wp-json\/wp\/v2\/media?parent=6134"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/uhp.digital\/en\/wp-json\/wp\/v2\/categories?post=6134"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/uhp.digital\/en\/wp-json\/wp\/v2\/tags?post=6134"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}