HTTPS status code 0 while accessing IBM Watson API through Hololens - https

credentials = new Credentials(tokenOptions, _serviceUrl);
if(credentials != null) Debug.Log("Credentials is not null!");
// Wait for tokendata
while (!credentials.HasIamTokenData())
{
Debug.Log("In the while loop"); // INFINITE LOOP ON Hololens
yield return null;
}
I get an infinte loop in the above code. This is in Watson.cs
It works well in Unity editor. This issue occurs when deployed into Hololens. I checked the RESTConnector.cs file from Watson SDK, I am getting a HTTPS status code 0, but I get status code 200 for Unity editor. I am not sure why this is happening. If its a firewall issue, how do I fix it in Hololens?

To enable the network capability of the device, you need to enable [InternetClient] under Publishing Settings/Capabilities. This tutorial shows the specific explanation of these capabilities: Capability. And check Unity guidance for capability setting:Universal Windows Player settings.
In addition, according to the experience of previous cases([WSA] ISNETWORKERROR ALWAYS RETURN TRUE WHEN RUNNING AN UWP APP ON X86 ARCHITECTURE(https://issuetracker.unity3d.com/issues/wsa-isnetworkerror-always-return-true-when-running-an-uwp-app-on-86x-architecture)) ,a few specific versions of unity will make the project get some network issues after the project is built. Therefore, if the issue still occurs after enable [InternetClient], please provide the version of unity that you are using.

Related

Xamarin Android 10 UDP Client In Background (Release Mode Only)

I am having an issue with the UDPClient in Android 10 (worked fine in Android 9) so Im assuming Im missing from Android 10 that I have yet to be able to find so far.
I have a UDPService (background service) running which is a pretty standard implementation (Port is 64200)
m_udpSocket = new UdpClient(m_port);
m_udpSocket.Client.ReceiveTimeout = (int)m_healthTimeout.TotalMilliseconds;
m_healthSocket.Client.SetSocketOption( SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, (int)m_healthTimeout.TotalMilliseconds );
I wont post the sending and receiving code at this stage as I think its more permissions related.
The client periodically sends some UDP data to the server for processing. Its all local network based (not internet) and the data is sent via the WiFi on the device.
In Android 9, it all works as expected with the app in the foreground or the background.
In Android 10, it works perfectly when the app is in the foreground, but when the app goes to the background, when I try to issue the send on the socket
System.Net.Sockets.SocketException (0x80004005): Access denied
This error only happens in release mode on Android 10. If Im running in Debug Mode attached to the device, I can put the app into the background and the UDP traffic works as expected.
Based on all the above, Im assuming there is something else I need to do to allow the socket to work in the background in release mode but I cant seem to put my finger on what it is. Ive read about INTERNET permission and how Debug mode automatically adds this so is there something else I may be missing in the Android Manifest that could cause this.
Any help would be greatly appreciated.
Thanks in advance.
For anyone experiencing similar problems, in the end it had nothing to do with the actual code, but it was the Battery Optimisation Settings in Android.
Once I removed the app from the automatic battery optimisations, everything worked as expected.

Deployment of app to device failed

I have Xamarin Live Player up and running.
When I use it with a newly created Xamarin Forms (Master Details) app, it works fine. I see the app on the device.
However, when I try to run my full-blown app, Visual Studio tells me "Deployment to device failed. Make sure that Xamarin Live Player is open and that the device is in the same network."
Since the new app runs fine, I guess something else is the problem.
I've already set the Android project properties to be same as the newly created app.
Just to make sure, I've made it so that my full-blown app requests all rights.
How could I debug more in detail what's going wrong?
Xamarin Live Player can't run all apps. As soon as you use reflection, embedded resources, a MVVM framework or a custom renderer in Xamarin.Forms it might simply just not run the App.
You can read about the limitations of Xamarin Live Player in the official documentation for it.
You will probably have a much better experience just running directly on the device without Live Player.

ARCore unity debugging

For example I try to print out to the console and it doesn't, my script is attached to my main camera so we can rule that out and yes the script is active also, any help will be appreciated, right now what I am working on is to click on a certain part of my GameObject in AR and while my phone is connected to the computer I want to see the name of the certain part I clicked on in the console.
When you run the app on and Android device the log does not go to the Unity editor console. In order to see it you need to open Android Studio and then use the Logcat tab to see the device log.
Alternatively, you can run logcat from the command line
adb logcat.
More information: https://developer.android.com/studio/command-line/logcat.html
I have worked with ARCore and had the same frustating experience when it comes to debugging.
If you just want console prints, then use Log viewer which can catch and show them on Android too. (https://assetstore.unity.com/packages/tools/log-viewer-12047)
However, because I wanted more control and the ability to test and debug my game logic right inside the editor (without deploying to the phone all the time), I wrote a little plugin that allows me to do just that. This plugin simulates the operation of ARCore inside Unity editor. You can just hit play and ARCore will be simulated for you, so you can freely develop and debug your game logic. Moreover, you can then just build and deploy the project without changing anything, and ARCore will work like normal on your phone.
Using it is very similar to native ARCore, so you will not have much difficulty getting into it. It does not cover ALL features of ARCore yet, but it covers the basics. You can still use native ARCore for the rest.
You can find it here: https://github.com/VR-House/Eazy-ARCore-Interface
In current versions of Unity you can output logs from connected devices to Unity Editor. To do this, build your project in Development Mode and connect the Console to your device.
But I would recommend a more advanced way of testing AR in Editor with a plugin I wrote. I wrote it for my project and decided to make it into a plugin so everyone else can benefit from it.
AR Foundation Editor Remote plugin:
https://forum.unity.com/threads/ar-foundation-editor-remote-test-and-debug-your-ar-project-in-the-editor.898433/
I use debugging like this in C# script:
Debug.Log("Debug message and image name "+Image.Name);
To see this real time, I use Android Device Monitor (it's in Android's sdk folder, usually \Users\AppData\Local\Android\sdk\tools\monitor.bat. If device is connected, it appears on the devices list and it can be selected.
Or if I want to see the debug log in device, I put these lines in script:
private void OnGUI()
{
GUIStyle style = new GUIStyle();
style.fontSize = 50;
GUI.Box(new Rect(350, 0, 500, 500), Image.Name, style);
}
The Rect(350,0 is the position, 500,500 is the width and height of rectangle.

Appium Desktop for Windows: How to call device's browser. Error "...com.android.browser not found"

TL;DR:
When I have an emulator open, and I try to call the browser using Appium, I get an error saying that the browser isn't callable, even though there is a browser in the device. Not sure what it's called, so I can call it in Desired Capabilities.
Long story long:
I'm new to Appium so trying to get a basic emulator session going. I'm new to Java too, but I'm not using Java here and the Appium site video didn't require Java to get a basic session going, so this isn't a "your code is rubbish" Java issue. (Video link I watched: https://youtu.be/IOSUBda2-g4, though this didnt' call a browser on the device so wasn't a helpful guide for newbies like me).
On Win10, I installed Appium Desktop for Windows (current version 1.2.0 beta).
I have Android Studio installed (v2.3.3), and an image for a Pixel device.
I open Android Studio > Tools > Android > AVD Manager > Pixel API 25 (which is set up using Android 7.1.1 and API 25) and I start the emulator.
The emulator opens, and the first thing I see is "Photos has stopped Close app" and an X. Somewhat worrying but hey, I installed the image from AVD Manager so I got what I got.
If I then go to Appium Desktop (host 0.0.0.0, port 4723) and start the server (v1.6.5), I get the console.
I click Start New Session, and the settings screen comes up.
I am on the Automatic Server tab.
I go to Saved capabilities tab.
I have these settings saved:
{
"platformName": "Android",
"deviceName": "Android Emulator",
"browserName": "Browser",
"avd": "Pixel_API_25",
"platformVersion": "7.1.1",
"": ""
}
NOTE: The last empty entry is because the delete button on Appium for the Desired Capabilities has no effect in this version of Appium Desktop.
I click "Start session" in Appium Desktop.
Since the emulator is already started, I get error "An unknown server-side error occurred while processing the command. Original error: Could not find package com.android.browser on the device"
There is a very simple browser on the Pixel phone, but I can't invoke it because I don't know what it is called. There is no Chrome or Firefox installed by default. If I go on the device I can run a Google search in this basic browser, but I don't know what it is called to try to invoke it from Appium.
I'm trying to use the guidance in https://github.com/appium/appium/blob/master/docs/en/writing-running-appium/caps.md but I'm lost, and trying stuff with no success.
QUESTION: What is the browser called so I can invoke it?
Why am I trying to do this?
I actually wanted to invoke a basic Calculator.apk that I have locally, but that didn't work either (it never started when I specified "app": "C:\android\Calculator.apk"), so I thought I should start with a basic browser session rather than APKs.
I tried the same as above with API 26 but that didn't work either.
I haven't solved the APK invoke issue, but that's likely another issue.
Any assistance with the DCs much appreciated.
Mike

How can I test my WP7 app under no Internet connection conditions in emulator?

I am developing a Windows Phone 7 App which is capable to work without internet connection but optionally loads some content from web if network is available.
How can I test this application in Phone Emulator under the condition of having no internet connection?
There is a Settions option available in the main menu, but unlike on real device there is no option to disable data connection. The only solution I came up with is to disable the WiFi adaptor of my development laptop, but this seems to be an ultimate option.
Is there any way to force emulator to run in disconnected environment?
Another option is to use NetLimiter
Not only can you shut off connection to your app, you can change the speeds to simulate a poor connection and see how your app behaves. NetLimiter and Fiddler are sweet tools.
Like you said, I just disconnect my development computer from the internet whenever I want to test a wp7 app under no internet connection. You can't force it from the emulator, but you could probably turn it off using code, but that seems like too much work to me.
Another StackOverflow post.
From WP7 App Hub.
Check out this question. It has some info on the same problem. Also check out this post.
You can use this method in your code for detecting internet connection. If you put it in a static class as a static method, it works nice.
private bool InternetIsAvailable()
{
var available = !NetworkInterface.GetIsNetworkAvailable();
#if DEBUG
available = false;
#endif
if (!available)
{
MessageBox.Show("No internet connection is available. Try again later.");
return false;
}
return true;
}
There is an easy way...
If your app do not require a online login... Desktop, open the "Internet Explorer" > "Settings" > "Connection" and setup a proxy which is of course not valid. Save the changes. Now, you should not be able to browse a website anymore. After these steps, start the simulator...

Resources