question-mark
Stuck on an issue?

Lightrun Answers was designed to reduce the constant googling that comes with debugging 3rd party libraries. It collects links to all the places you might be looking at while hunting down a tough bug.

And, if you’re still stuck at the end, we’re happy to hop on a call to see how we can help out.

6.1.0 and signalR not working

See original GitHub issue

Description

hello guys, we are trying to upgrade cordova-ios to 6.1.0 since uiwebview is deprecated and wont be accepted on stores anymore. we had everything working on uiwebview. i managed to make XMLHttpRequest work with null origin, and we are able to make api calls again. but we are facing a problem with signalR, it seems that it’s not able to connect. i am not able to figure out the problem.

What is expected to happen?

signalR to connect normally to the server.

What does actually happen?

signal R isn’t able to connect.

Information

for a start i got this call:

Summary
URL: http://192.168.47.105:55554/signalr/connect?transport=serverSentEvents&clientProtocol=1.5&connectionToken=OC0LMC6PzDP%2BbksoG4PF3OlmAX6ScrTdg3yOxtaZFnHAspQjvqfFpDSCIWJGLNME%2FlCUg86Vpg1h12VOoR2uB0b2LyBVPbsRU%2BVo%2BNONkFIgdFfNcVahRec6xURdjwMs&connectionData=%5B%7B%22name%22%3A%22kindoohub%22%7D%5D&tid=9
Status: 200 OK
Source: Network

Request
Accept: text/event-stream
Cache-Control: no-cache
Origin: null
User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 13_5_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148
Pragma: no-cache

Response
Content-Type: text/event-stream
Access-Control-Allow-Origin: null
Pragma: no-cache
Access-Control-Allow-Methods: GET, POST
Expires: -1
Transfer-Encoding: Identity
Access-Control-Allow-Headers: Content-Type
Cache-Control: no-cache
Date: Wed, 15 Jul 2020 12:37:22 GMT
Access-Control-Allow-Credentials: true
X-Content-Type-Options: nosniff
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Server: Microsoft-IIS/7.5

Query String Parameters
transport: serverSentEvents
clientProtocol: 1.5
connectionToken: OC0LMC6PzDP+bksoG4PF3OlmAX6ScrTdg3yOxtaZFnHAspQjvqfFpDSCIWJGLNME/lCUg86Vpg1h12VOoR2uB0b2LyBVPbsRU+Vo+NONkFIgdFfNcVahRec6xURdjwMs
connectionData: [{"name":"kindoohub"}]
tid: 9

although the status is 200 ok, it is marked in red, and the preview shows an error occured trying to load the resource. then i get this in console: XMLHttpRequest cannot load http://192.168.47.105:55554/signalr/abort?transport=serverSentEvents&clientProtocol=1.5&connectionToken=OC0LMC6PzDP%2BbksoG4PF3OlmAX6ScrTdg3yOxtaZFnHAspQjvqfFpDSCIWJGLNME%2FlCUg86Vpg1h12VOoR2uB0b2LyBVPbsRU%2BVo%2BNONkFIgdFfNcVahRec6xURdjwMs&connectionData=%5B%7B%22name%22%3A%22kindoohub%22%7D%5D.

now this is my config.xml:

<?xml version='1.0' encoding='utf-8'?>
<widget id="{{myappid}}" version="3.6.3" xmlns="http://www.w3.org/ns/widgets" xmlns:gap="http://phonegap.com/ns/1.0">
    <name>kindoo</name>
    <description>
        kindoo is an application that transforms any electric lock to a smart lock
    </description>
    <author email="support@codegears.com" href="http://codegears.com">
        Code gears
    </author>
    <content src="index.html" />
    <preference name="permissions" value="none" />
    <preference name="orientation" value="default" />
    <preference name="target-device" value="universal" />
    <preference name="fullscreen" value="true" />
    <preference name="webviewbounce" value="true" />
    <preference name="prerendered-icon" value="true" />
    <preference name="stay-in-webview" value="false" />
    <preference name="ios-statusbarstyle" value="black-opaque" />
    <preference name="detect-data-types" value="true" />
    <preference name="exit-on-suspend" value="false" />
    <preference name="ShowSplashScreenSpinner" value="false" />
    <preference name="AutoHideSplashScreen" value="false" />
    <preference name="disable-cursor" value="false" />
    <preference name="android-minSdkVersion" value="14" />
    <preference name="android-installLocation" value="auto" />
    <preference name="DisallowOverscroll" value="true" />
    <preference name="StatusBarOverlaysWebView" value="false" />
    <preference name="StatusBarBackgroundColor" value="#142515" />
    <preference name="CordovaWebViewEngine" value="CDVWKWebViewEngine" /> 
    
    <gap:plugin name="org.apache.cordova.battery-status" />
    <gap:plugin name="org.apache.cordova.camera" />
    <gap:plugin name="org.apache.cordova.media-capture" />
    <gap:plugin name="org.apache.cordova.console" />
    <gap:plugin name="org.apache.cordova.contacts" />
    <gap:plugin name="org.apache.cordova.device" />
    <gap:plugin name="org.apache.cordova.device-motion" />
    <gap:plugin name="org.apache.cordova.device-orientation" />
    <gap:plugin name="org.apache.cordova.dialogs" />
    <gap:plugin name="org.apache.cordova.file" />
    <gap:plugin name="org.apache.cordova.file-transfer" />
    <gap:plugin name="org.apache.cordova.geolocation" />
    <gap:plugin name="org.apache.cordova.globalization" />
    <gap:plugin name="org.apache.cordova.inappbrowser" />
    <gap:plugin name="org.apache.cordova.media" />
    <gap:plugin name="org.apache.cordova.network-information" />
    <gap:plugin name="org.apache.cordova.splashscreen" />
    <gap:plugin name="org.apache.cordova.vibration" />
    <platform name="ios">
        
        <allow-intent href="itms:*" />
        <allow-intent href="itms-apps:*" />
        <allow-navigation href="http://192.168.47.105:55554/*" />
        <allow-navigation href="http://www.{{mydomainname}}.tech/*" />
        <allow-navigation href="http://*.{{mydomainname}}.tech/*" />
        <allow-navigation href="https://www.{{mydomainname}}.tech/*" />
        <allow-navigation href="https://*.{{mydomainname}}.tech/*" />
        <icon height="20" src="res/icon/ios/icon-20.png" width="20" />
        <icon height="40" src="res/icon/ios/icon-20@2x.png" width="40" />
        <icon height="60" src="res/icon/ios/icon-20@3x.png" width="60" />
        <icon height="29" src="res/icon/ios/icon-29.png" width="29" />
        <icon height="58" src="res/icon/ios/icon-29@2x.png" width="58" />
        <icon height="87" src="res/icon/ios/icon-29@3x.png" width="87" />
        <icon height="40" src="res/icon/ios/icon-40.png" width="40" />
        <icon height="80" src="res/icon/ios/icon-40@2x.png" width="80" />
        <icon height="120" src="res/icon/ios/icon-40@3x.png" width="120" />
        <icon height="50" src="res/icon/ios/icon-50.png" width="50" />
        <icon height="100" src="res/icon/ios/icon-50@2x.png" width="100" />
        <icon height="57" src="res/icon/ios/icon-57.png" width="57" />
        <icon height="114" src="res/icon/ios/icon-57@2x.png" width="114" />
        <icon height="120" src="res/icon/ios/icon-60@2x.png" width="120" />
        <icon height="180" src="res/icon/ios/icon-60@3x.png" width="180" />
        <icon height="72" src="res/icon/ios/icon-72.png" width="72" />
        <icon height="144" src="res/icon/ios/icon-72@2x.png" width="144" />
        <icon height="76" src="res/icon/ios/icon-76.png" width="76" />
        <icon height="152" src="res/icon/ios/icon-76@2x.png" width="152" />
        <icon height="167" src="res/icon/ios/icon-83@2x.png" width="167" />
        <icon height="1024" src="res/icon/ios/icon-1024.jpg" width="1024" />
        <splash src="res/screen/ios/Default@2x~iphone~anyany.png" />
        <splash src="res/screen/ios/Default@2x~iphone~comany.png" />
        <splash src="res/screen/ios/Default@2x~iphone~comcom.png" />
        <splash src="res/screen/ios/Default@3x~iphone~anyany.png" />
        <splash src="res/screen/ios/Default@3x~iphone~anycom.png" />
        <splash src="res/screen/ios/Default@3x~iphone~comany.png" />
        <splash src="res/screen/ios/Default@2x~ipad~anyany.png" />
        <splash src="res/screen/ios/Default@2x~ipad~comany.png" />

        <edit-config file="*-Info.plist" mode="merge" target="NSBluetoothPeripheralUsageDescription">
            <string>Bluetooth is needed to communicate with KINs</string>
        </edit-config>
        <edit-config file="*-Info.plist" mode="merge" target="NSBluetoothAlwaysUsageDescription">
            <string>Bluetooth is needed to communicate with KINs</string>
        </edit-config>
        <edit-config file="*-Info.plist" mode="merge" target="NSCameraUsageDescription">
            <string>Camera is needed to take profile picture</string>
        </edit-config>
        <edit-config file="*-Info.plist" mode="merge" target="NSMicrophoneUsageDescription">
            <string>Microphone is needed to take a video</string>
        </edit-config>
        <edit-config file="*-Info.plist" mode="merge" target="NSPhotoLibraryUsageDescription">
            <string>Library is needed to upload profile picture</string>
        </edit-config>
        <edit-config file="*-Info.plist" mode="merge" target="NSLocationAlwaysUsageDescription">
            <string>Location is needed to communicate with KINs</string>
        </edit-config>
        <edit-config file="*-Info.plist" mode="merge" target="NSLocationWhenInUseUsageDescription">
            <string>Location is needed to communicate with KINs</string>
        </edit-config>
    </platform>
    <access origin='*' allows-arbitrary-loads-for-media='true' allows-arbitrary-loads-in-web-content='true' allows-local-networking='true' />
    <allow-navigation href="*" />
    <allow-intent href="http://*/*" />
    <allow-intent href="https://*/*" />
    <allow-intent href="tel:*" />
    <allow-intent href="sms:*" />
    <allow-intent href="mailto:*" />
    <allow-intent href="geo:*" />
    <feature name="CDVWKWebViewEngine">
    <param name="ios-package" value="CDVWKWebViewEngine" />
    <preference name="scheme" value="http" />
    <preference name="hostname" value="192.168.47.105" />
</feature>
</widget>

i have these customheaders in my server Web.config

<customHeaders>
        <add name="Access-Control-Allow-Headers" value="Content-Type" />
        <add name="Access-Control-Allow-Methods" value="GET, POST" />
        <add name="Access-Control-Allow-Credentials" value="true" />
</customHeaders>

and i have this code in Global.asax.cs to handle the null origin:

protected void Application_BeginRequest(object sender, EventArgs e)
       {
           if (Context.Request.UrlReferrer != null)
               HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", Context.Request.UrlReferrer.GetLeftPart(UriPartial.Authority)); //browser
           else
               HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", "null"); //cordova
       }

and for my startup:

public class Startup
    {

        public void Configuration(IAppBuilder app)
        {
            try
            {
                string redisIP = ConfigurationManager.AppSettings["RedisIP"].ToString();
                int redisPort = int.Parse(ConfigurationManager.AppSettings["RedisPort"].ToString());
                GlobalHost.DependencyResolver.UseRedis(redisIP, redisPort, null, "SignalRChat");

                app.Map("/signalr", map =>
                {

                    //map.UseCors(CorsOptions.AllowAll);
                    var hubConfiguration = new HubConfiguration
                    {
                        EnableDetailedErrors = true,
                        EnableJavaScriptProxies = true,
                    };
                    
                    map.RunSignalR(hubConfiguration);
                });
            }
            catch (Exception ex)
            {
                File.WriteAllText(@"C:\Logs\ex" + DateTime.UtcNow.Ticks.ToString() + ".txt", ex.Message + " " + ex.StackTrace);
            }
        }

    }

i tried enabling signalr cors but with no use and different error thrown about allow credentials to be different than true. i cant find the error or what is causing this problem if anyone can help me.

Environment, Platform, Device

Backend: .Net 4.5 webapi cordova: 9.0.0 cordova-ios: 6.1.0 device: iphonex device ios: 13.5.1 SignalR: 2.2.1.0

Checklist

  • I searched for existing GitHub issues
  • I updated all Cordova tooling to most recent version
  • I included all the necessary information above

Issue Analytics

  • State:open
  • Created 3 years ago
  • Comments:13 (5 by maintainers)

github_iconTop GitHub Comments

1reaction
barakataboujreichcommented, Jul 17, 2020

well for now i used this plugin to sort out our cookies problem, cordova-plugin-wkwebview-inject-cookie . i can work with only IOS 11 for now, better than nothing, till we get a proper solution.

0reactions
gill367commented, Sep 5, 2020
<preference name="scheme" value="http" />
<preference name="hostname" value="192.168.47.105" />

How does the scheme ‘http’ work for you. When I put it in config.xml. it uses the default app scheme instead.

http is a reserved scheme on iOS. Which is why it defaults to the app:// scheme, the cordova default.

and If I use a custom scheme like app:// dummy cookie injection does not work for me. So all subsequent xhr request using session cookies are receiving 401. Anybody is able to use cookie injection with app custom scheme?

Read more comments on GitHub >

github_iconTop Results From Across the Web

connectivity issue with cordova ios 6.1.0 - MSDN - Microsoft
now this problem i am facing is only occurring on ios devices with cordova-ios 6.1.0. on android and safari and chrome working normally....
Read more >
ng2-signalr Freeze web site while going back and forward
If I remove the resolve line, the signalR is canceled and everything work (with no freeze and no signalR), but I need it.....
Read more >
ng2-signalr - npm
ng2-signalr. An angular typescript library that allows you to connect to Asp.Net SignalR. Features: 100% typescript; use rxjs to observe ...
Read more >
Abp.AspNetCore.SignalR 8.0.0 - NuGet
Version Downloads Last updated 8.0.0 822 19 days ago 7.4.0 6,185 2 months ago 7.3.0 61,724 6 months ago
Read more >
SignalR Integration - Articles Tutorials | AspNet Boilerplate
This is generally fine, but there may be cases where you might not want to. You can add these lines just before including...
Read more >

github_iconTop Related Medium Post

No results found

github_iconTop Related StackOverflow Question

No results found

github_iconTroubleshoot Live Code

Lightrun enables developers to add logs, metrics and snapshots to live code - no restarts or redeploys required.
Start Free

github_iconTop Related Reddit Thread

No results found

github_iconTop Related Hackernoon Post

No results found

github_iconTop Related Tweet

No results found

github_iconTop Related Dev.to Post

No results found

github_iconTop Related Hashnode Post

No results found