Announcement

Collapse
No announcement yet.

Unreal Engine 4 is available for Win10 UWP app dev now

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

    Originally posted by jsyarrow View Post
    OnlineSubsystemUtils is probably a good idea - in particular it contains the platform-independent Blueprint interface to the OnlineSubsystem. But if your build succeeds without it then it's not essential - it certainly isn't related to your sign-in problem.
    Got it. I'm packaging now (UWP64).

    Comment


      [MENTION=494622]jsyarrow[/MENTION] - I got an Unknown Error:

      Code:
      UATHelper: Packaging (UWP (x64-64bit)): Program.Main: ERROR: AutomationTool terminated with exception: AutomationTool.AutomationException:
      Failed to copy
      Engine\Plugins\Online\XboxOne\OnlineSubsystemLive\ThirdParty\XSAPI\UWP\build\native\lib\x64\v140\release\cpprest140_uwp_2_8.dll 
      to
      Saved\StagedBuilds\UWP64\Engine\Plugins\Online\XboxOne\OnlineSubsystemLive\ThirdParty\XSAPI\UWP\build\native\lib\x64\v140\release\cpprest140_uwp_2_8.dll

      The directory contains

      Code:
      Engine\Plugins\Online\XboxOne\OnlineSubsystemLive\ThirdParty\XSAPI\UWP\build\native\lib\x64\v140\Release\cpprest140_uwp_2_9.dll

      I'm trying UWP64 Debug with Cook-on-the-Fly to see if the login works, irrespective of the packaging problem.
      Last edited by Jerry.Richards; 06-14-2017, 04:38 PM.

      Comment


        [MENTION=494622]jsyarrow[/MENTION] - IOnlineSubsystem::Get() is returning null when running from the debugger:

        Code:
        IOnlineSubsystem* oss = IOnlineSubsystem::Get();
        if (oss != nullptr)
        {
            IOnlineExternalUI* pUI = oss->GetExternalUIInterface().Get();
            if (pUI != nullptr)
            {
                LoginPlayerCallbackDelegate.BindUObject(this, &UMyWidget::LoginPlayerCallback);
                pUI->ShowLoginUI(0, true, LoginPlayerCallbackDelegate);
            }
        }

        Thinking that it needed the DLL's I manually copied the files:

        Code:
        From:
        Engine\Plugins\Online\XboxOne\OnlineSubsystemLive\ThirdParty\XSAPI\UWP\build\native\lib\x64\v140\Release
        
        To:
        Binaries\UWP64\AppX\Engine\Plugins\Online\XboxOne\OnlineSubsystemLive\ThirdParty\XSAPI\UWP\build\native\lib\x64\v140\release
        But that didn't work either.

        Comment


          That dll is manually loaded (since it's in an odd path), so the filename matters. You could rename your manual copy . Alternatively there's a hard reference to cpprest_140_2_8.dll in OnlineSubsystemLive.build.cs. If you change that to 2_9 and build (shouldn't need a full rebuild, just incremental) then that will get the new version packaged and loaded in the 'proper' way.

          Comment


            Does that imply the change to build.cs will fix the packaging issue too?

            Comment


              [MENTION=494622]jsyarrow[/MENTION] - success:

              Click image for larger version

Name:	XSSuccess.jpg
Views:	1
Size:	51.6 KB
ID:	1129505


              What have I learned from this exercise:

              Code:
              1. Microsoft Server is way, way, way out :D
              2. We need the latest $xsapiVersionUwp = "2017.05.20170517.001"
              3. A change to Install-LivePackage is needed:
              	$nativeReleasePackage = $installLocation + "\" + $packageName + ".Native.Release." + $packageVersion
              	if (Test-Path $nativeReleasePackage)
              	{
              		$actualPath = $nativeReleasePackage
              	}
              	else
              	{
              		$actualPath = $installLocation + "\" + $packageName + "." + $packageVersion
              	}
              4. OnlineSubsystemLive.build.cs needs to be changed:
              	const string CppRestVersion = "2_9";

              Did I miss anything for this part of it?

              Comment


                [MENTION=494622]jsyarrow[/MENTION] - After logging in, an exception was thrown in UWP code. I'm not exactly sure where, as I continued my application wanting to see if my callback was called. It was, but PlayerId was null.

                Unfortunately I'm not able to login again, the call to ShowLoginUI is ignored, even after stopping and restarting the debugger, the UI is not displayed.

                Do I need to Logout first?
                Is there a way to always show the UI so that players can change to a different gamertag?

                [EDIT]
                Even after a complete reboot the UI doesn't show. Is it that since I'm already logged in the Xbox Live services already know the account info?

                Unfortunately PlayerId is still null
                Last edited by Jerry.Richards; 06-14-2017, 06:24 PM.

                Comment


                  Hurrah!

                  That summary looks right to me. I will make sure to apply those changes next time I have a chance to get the fork updated. Thanks again for working through them with me, and your patience!

                  To log out you can use the Windows 10 Xbox app. After logging out there and then relaunching your game it should trigger the UI again. There is also a method in the core Xbox Live SDK that supports changing user in-game, but there's no wrapper for it in OnlineSubsystemLive currently.

                  As for exceptions, note that there are some internal retry paths where the Xbox Live SDK code may throw an exception, catch it itself, and ultimately return a successful result from an API. Though if you're getting a null user id it sounds as though this isn't one of those cases.

                  Comment


                    Originally posted by jsyarrow View Post
                    To log out you can use the Windows 10 Xbox app. After logging out there and then relaunching your game it should trigger the UI again.
                    That is a nice one


                    Originally posted by jsyarrow View Post
                    As for exceptions, note that there are some internal retry paths where the Xbox Live SDK code may throw an exception, catch it itself, and ultimately return a successful result from an API.
                    Okay, that is useful information.


                    Originally posted by jsyarrow View Post
                    Though if you're getting a null user id it sounds as though this isn't one of those cases.
                    I'll try to track this down, without this working, I can't use the services.


                    Btw, the packaging worked too.

                    Comment


                      [MENTION=494622]jsyarrow[/MENTION] - the returned value for the asynchronous call is 3, which is an error:

                      Click image for larger version

Name:	01.StatusCode.03.jpg
Views:	1
Size:	114.5 KB
ID:	1129708


                      Given this, the PickedUser is never set. Where is the log written to? It wasn't in AppData\Local, and I didn't see it under Binaries, and Saved\Logs don't seem to have the SystemUI error in it.

                      Comment


                        If you're running with latest and using cookonthefly, the logs get written through the cook server connection and land in (the slightly odd) Saved/Cooked/UWP64/[Game]/UWPLocalAppData folder. With pre-cooked content they get written to the standard UWP local appdata directory: %localappdata%/Packages/[Package_Family_Name]/LocalState

                        Given your symptoms, the core sign in seems to be going through (and so getting cached, preventing UI from showing up subsequently), but the follow-up operation that retrieves the user's Xbox Live profile is failing. Some of this code lives in OnlineSubsystemLive/ThirdParty/EraAdapter/Source/SystemUI.cpp and OnlineSubsystemLive/ThirdParty/EraAdapter/User.cpp.

                        Comment


                          That was funny, I was using disassembly and I came up with 0x80070057, which I don't know is correct or not:

                          Click image for larger version

Name:	02.ErrorCode.01.jpg
Views:	1
Size:	270.3 KB
ID:	1129709



                          But I did found the logs, a lot easier I might add, and the below shows what was available:

                          Code:
                          [2017.06.14-23.47.04:183][  0]LogOnline:Warning: LIVE: No SecureDeviceAssociationTemplateName specified in the engine ini file.
                          [2017.06.14-23.47.04:183][  0]LogOnline:Warning: LIVE: FOnlineAchievementsLive: Failed to find json OSS achievements config: ../../../LongshotHero/Config/OSS/Live/Achievements.json
                          [2017.06.14-23.47.04:677][  0]LogOnline:Warning: LIVE: FOnlineSessionLive::GetSessionSettings: couldn't find session 'Game'

                          "Error in SystemUI" was not found. I'm still searching.
                          Last edited by Jerry.Richards; 06-14-2017, 08:08 PM.

                          Comment


                            That line is emitted at 'Log' level, which might be filtered out before it reaches the file. 0x80070057 is a credible code though - it is of course 'invalid parameter'.

                            One thought on where this might be coming from - the EraAdapter library has some dependencies on the public interface exposed by XSAPI. It may need a rebuild to pick up changes in the new Live SDK version you're using. The vcxproj is part of the fork in the OnlineSubsystemLive/ThirdParty/EraAdapter/Source folder, but it will need some tweaking to account for that XSAPI path change you ran into earlier. If you get a building version, you should drop the output .dll and .winmd in the OnlineSubsystemLive/ThirdParty/EraAdapter/Binaries/UWPxx folders.

                            Comment


                              Originally posted by jsyarrow View Post
                              (EraAdapter) may need a rebuild to pick up changes in the new Live SDK version you're using. The vcxproj is part of the fork in the OnlineSubsystemLive/ThirdParty/EraAdapter/Source folder, but it will need some tweaking to account for that XSAPI path change you ran into earlier.
                              I wasn't able to add the EraAdapter project file to the UEUWP solution. Also, when I tried to double-click on it Visual Studio couldn't determine the type it is. Now I'm looking at the Xml Settings of the project to see if I can recreate a new solution for it, then add the source files for it.


                              Originally posted by jsyarrow View Post
                              If you get a building version, you should drop the output .dll and .winmd in the OnlineSubsystemLive/ThirdParty/EraAdapter/Binaries/UWPxx folders.
                              If I understand you correctly, copy the files from a successful build to the directory listed above.

                              Comment


                                Right, I wouldn't try to add it to the UE4 sln, just build it independently and copy the binaries. I found it wouldn't open in VS2017 for some reason, but VS2015 was able to open the vcxproj. Anyway, as you fix up the MSBuild xml you'll want to deal with the HintPath in the reference to Microsoft.Xbox.Services - it's using an old path structure to locate XSAPI and will need edits to find your new Live SDK version.

                                Comment

                                Working...
                                X