diff --git a/AndroidStudioExample/app/src/main/java/com/playfab/PlayFabClientAPI.java b/AndroidStudioExample/app/src/main/java/com/playfab/PlayFabClientAPI.java index 9b8969058..160a762b3 100644 --- a/AndroidStudioExample/app/src/main/java/com/playfab/PlayFabClientAPI.java +++ b/AndroidStudioExample/app/src/main/java/com/playfab/PlayFabClientAPI.java @@ -1298,6 +1298,68 @@ private static PlayFabResult privateGetPlayerCombin return pfResult; } + /** + * Retrieves the player's profile + * @param request GetPlayerProfileRequest + * @return Async Task will return GetPlayerProfileResult + */ + @SuppressWarnings("unchecked") + public static FutureTask> GetPlayerProfileAsync(final GetPlayerProfileRequest request) { + return new FutureTask(new Callable>() { + public PlayFabResult call() throws Exception { + return privateGetPlayerProfileAsync(request); + } + }); + } + + /** + * Retrieves the player's profile + * @param request GetPlayerProfileRequest + * @return GetPlayerProfileResult + */ + @SuppressWarnings("unchecked") + public static PlayFabResult GetPlayerProfile(final GetPlayerProfileRequest request) { + FutureTask> task = new FutureTask(new Callable>() { + public PlayFabResult call() throws Exception { + return privateGetPlayerProfileAsync(request); + } + }); + try { + task.run(); + return task.get(); + } catch(Exception e) { + return null; + } + } + + /** + * Retrieves the player's profile + */ + @SuppressWarnings("unchecked") + private static PlayFabResult privateGetPlayerProfileAsync(final GetPlayerProfileRequest request) throws Exception { + if (_authKey == null) throw new Exception ("Must be logged in to call this method"); + + FutureTask task = PlayFabHTTP.doPost(PlayFabSettings.GetURL() + "/Client/GetPlayerProfile", request, "X-Authorization", _authKey); + task.run(); + Object httpResult = task.get(); + if(httpResult instanceof PlayFabError) { + PlayFabError error = (PlayFabError)httpResult; + if (PlayFabSettings.GlobalErrorHandler != null) + PlayFabSettings.GlobalErrorHandler.callback(error); + PlayFabResult result = new PlayFabResult(); + result.Error = error; + return result; + } + String resultRawJson = (String) httpResult; + + PlayFabJsonSuccess resultData = gson.fromJson(resultRawJson, new TypeToken>(){}.getType()); + GetPlayerProfileResult result = resultData.data; + + PlayFabResult pfResult = new PlayFabResult(); + pfResult.Result = result; + return pfResult; + } + /** * Retrieves the unique PlayFab identifiers for the given set of Facebook identifiers. * @param request GetPlayFabIDsFromFacebookIDsRequest diff --git a/AndroidStudioExample/app/src/main/java/com/playfab/PlayFabClientModels.java b/AndroidStudioExample/app/src/main/java/com/playfab/PlayFabClientModels.java index b3b4cdbea..27679d247 100644 --- a/AndroidStudioExample/app/src/main/java/com/playfab/PlayFabClientModels.java +++ b/AndroidStudioExample/app/src/main/java/com/playfab/PlayFabClientModels.java @@ -1038,7 +1038,7 @@ public static class ExecuteCloudScriptResult { */ public Object FunctionResult; /** - * Flag indicating if the FunctionResult was too large and was subsequently dropped from this event + * Flag indicating if the FunctionResult was too large and was subsequently dropped from this event. This only occurs if the total event size is larger than 350KB. */ public Boolean FunctionResultTooLarge; /** @@ -1046,7 +1046,7 @@ public static class ExecuteCloudScriptResult { */ public ArrayList Logs; /** - * Flag indicating if the logs were too large and were subsequently dropped from this event + * Flag indicating if the logs were too large and were subsequently dropped from this event. This only occurs if the total event size is larger than 350KB after the FunctionResult was removed. */ public Boolean LogsTooLarge; public Double ExecutionTimeSeconds; @@ -1746,6 +1746,14 @@ public static class GetPlayerCombinedInfoRequestParams { * Specific statistics to retrieve. Leave null to get all keys. Has no effect if GetPlayerStatistics is false */ public ArrayList PlayerStatisticNames; + /** + * Whether to get player profile. Defaults to false. + */ + public Boolean GetPlayerProfile; + /** + * Specifies the properties to return from the player profile. Defaults to returning the player's display name. + */ + public PlayerProfileViewConstraints ProfileConstraints; } @@ -1811,6 +1819,30 @@ public static class GetPlayerCombinedInfoResultPayload { * List of statistics for this player. */ public ArrayList PlayerStatistics; + /** + * The profile of the players. This profile is not guaranteed to be up-to-date. For a new player, this profile will not exist. + */ + public PlayerProfileModel PlayerProfile; + + } + + public static class GetPlayerProfileRequest { + /** + * Unique PlayFab assigned ID of the user on whom the operation will be performed. + */ + public String PlayFabId; + /** + * If non-null, this determines which properties of the profile to return. If null, playfab will only include display names. On client, only ShowDisplayName, ShowStatistics, ShowAvatarUrl are allowed. + */ + public PlayerProfileViewConstraints ProfileConstraints; + + } + + public static class GetPlayerProfileResult { + /** + * The profile of the player. This profile is not guaranteed to be up-to-date. For a new player, this profile will not exist. + */ + public PlayerProfileModel PlayerProfile; } @@ -2063,11 +2095,6 @@ public static class GetPurchaseResult { * Date and time of the purchase. */ public Date PurchaseDate; - /** - * @deprecated Please use instead. - */ - @Deprecated - public ArrayList Items; } @@ -3745,8 +3772,9 @@ public static class ReportPlayerClientRequest { public static class ReportPlayerClientResult { /** - * Indicates whether this action completed successfully. + * @deprecated Do not use */ + @Deprecated public Boolean Updated; /** * The number of remaining reports which may be filed today. diff --git a/AndroidStudioExample/app/src/main/java/com/playfab/PlayFabErrors.java b/AndroidStudioExample/app/src/main/java/com/playfab/PlayFabErrors.java index 77f5f60ed..1d60d61b6 100644 --- a/AndroidStudioExample/app/src/main/java/com/playfab/PlayFabErrors.java +++ b/AndroidStudioExample/app/src/main/java/com/playfab/PlayFabErrors.java @@ -303,7 +303,10 @@ public static enum PlayFabErrorCode { InvalidEnvironmentForReceipt(1300), EncryptedRequestNotAllowed(1301), SignedRequestNotAllowed(1302), - RequestViewConstraintParamsNotAllowed(1303); + RequestViewConstraintParamsNotAllowed(1303), + BadPartnerConfiguration(1304), + XboxBPCertificateFailure(1305), + XboxXASSExchangeFailure(1306); public int id; diff --git a/AndroidStudioExample/app/src/main/java/com/playfab/PlayFabSettings.java b/AndroidStudioExample/app/src/main/java/com/playfab/PlayFabSettings.java index 8a768cf33..b4789b673 100644 --- a/AndroidStudioExample/app/src/main/java/com/playfab/PlayFabSettings.java +++ b/AndroidStudioExample/app/src/main/java/com/playfab/PlayFabSettings.java @@ -4,9 +4,9 @@ import com.playfab.PlayFabErrors.ErrorCallback; public class PlayFabSettings { - public static String SdkVersion = "0.49.170508"; + public static String SdkVersion = "0.50.170530"; public static String BuildIdentifier = "jbuild_javasdk_0"; - public static String SdkVersionString = "JavaSDK-0.49.170508"; + public static String SdkVersionString = "JavaSDK-0.50.170530"; public static String TitleId = null; // You must set this value for PlayFabSdk to work properly (Found in the Game Manager for your title, at the PlayFab Website) public static ErrorCallback GlobalErrorHandler; diff --git a/JavaGettingStarted.md b/JavaGettingStarted.md index 39c91d466..daf4b8e9b 100644 --- a/JavaGettingStarted.md +++ b/JavaGettingStarted.md @@ -1,31 +1,41 @@ # Java Getting Started Guide -This guide will help you make your first API call in Java. - -## Java Project Setup - -* OS: This guide is written for Windows 10, however it should also work fine with a Mac -* Installation - * Download and install [Apache Maven](https://maven.apache.org/download.cgi) - * You must add the {apache-maven-dir}/bin directory to your Windows Environment PATH variable - * Download and install the [latest Java Development Kit (JDK)](http://www.oracle.com/technetwork/java/javase/downloads/index.html) - * Download the [PlayFab JavaSDK](https://api.playfab.com/sdks/download/java) - * Download the zip file, and extract it to a location of your choice {PlayFabJavaLocation} -* New Project Setup - * Create a new empty folder for your JavaGettingStarted project {NewProjectFolder} - * Import the PlayFab JavaSDK into this project - * In Windows-Explorer, navigate to [{PlayFabJavaLocation}/PlayFabClientSDK/](https://github.com/PlayFab/JavaSDK/tree/master/PlayFabClientSDK/) - * Select the src folder, and copy it to {NewProjectFolder} - * Create a new empty text file called pom.xml in {NewProjectFolder} - * We will modify this file in the next section - * Create a new empty text file called testTitleData.json in {NewProjectFolder} - * We will modify this file in the next section - * Create a new Windows Environment variable called: PF_TEST_TITLE_DATA_JSON - * The value is the full path of your new {NewProjectFolder}/testTitleData.json file - * Navigate to: {NewProjectFolder}/src/main/java - * Create a new empty text file called GettingStarted.java (Full path: {NewProjectFolder}/src/main/java/GettingStarted.java ) - * We will modify this file in the next section -* PlayFab Installation Complete! +This tutorial aims to help you get up and running with PlayFab JavaSDK and simple Java program. The goals we persue in this tutorial: +* Acquire necessary JAR files +* Add JAR files to the classpath +* Create minimal Java console application that executes Custom ID Login API Call + +## Acquire necessary JAR files + +In order to utilize PlayFab JavaSDK we will need PlayFab Client JavaSDK and it's dependency Google GSON. +You may download PlayFab Client JavaSDK JAR library [here](https://github.com/PlayFab/JavaSDK/tree/versioned/builds). Look for client-sdk-\*.jar and the corresponding Java Doc [Optional but useful]. +You may download latest Google GSON [here](http://repo1.maven.org/maven2/com/google/code/gson/gson/2.8.0/). Look for gson-\*.jar. + +## Project Setup with Intellij Idea + +Once you have initialized simple Intellij Idea Java Project, make sure to place necessary JAR files as shown on the picture: + +![Java Image](images/Java/Java-Getting-Started-1.png) + +The next step is adding JAR files to the classpath. Navigate to File -> Project Structure... as shown on the picture: + +![Java Image](images/Java/Java-Getting-Started-2.png) + +Navigate to Libraries and add new Java library as shown on the picture: + +![Java Image](images/Java/Java-Getting-Started-3.png) + +Select the JAR files you have added to the libs folder, then click OK as shown on the picture: + +![Java Image](images/Java/Java-Getting-Started-4.png) + +If asked for the Module, select the first one in the list. Ensure that all the JAR files were added to the libraries list: + +![Java Image](images/Java/Java-Getting-Started-6.png) + +## Project Setup with any IDE + +The main requirement is to have JAR files added to the classpath. Please, consult with the guide for your IDE on how to add jar files to classpath. ## Set up your first API call @@ -106,84 +116,11 @@ public class GettingStarted } ``` -In your favorite text-editor, update the contents of {NewProjectFolder}/pom.xml as follows: - -```XML - - - 4.0.0 - com.example - PlayFabExample - 1.0.0 - - 3.1.9 - - - - UTF-8 - - 1.7 - GettingStarted - - - - junit - junit - 4.12 - test - - - com.google.code.gson - gson - 2.8.0 - - - - - org.assertj - assertj-core - 3.6.2 - test - - - - - - org.apache.maven.plugins - maven-compiler-plugin - 3.6.1 - - ${javaLanguage.version} - ${javaLanguage.version} - - - - - -``` - -In your favorite text-editor, update the contents of {NewProjectFolder}/testTitleData.json as follows: - -```Json -{ - "titleId": "6195", - "userEmail": "test@playfab.com" -} -``` - ## Finish and Execute -* Open a new command window in the {NewProjectFolder} folder - * ![Java Image](images/Java/CmdExe.png) -* In the command window, enter the following command: - * mvn verify exec:java - * You will see a bunch of logs, including PlayFab test results, and finally near the end: - * Congratulations, you made your first successful API call! - * If everything succeeds, and you see the indicated success line, you've succeeded -* At this point, you can start making other api calls, and building your game -* For a list of all available client API calls, see our documentation: - * https://api.playfab.com/ -* Happy coding! +![Java Image](images/Java/Java-Getting-Started-7.png) + +To run the application, hit the play button in the top right corner **(1)**. This will start program execution, and output panel will pop up. Locate the debug message **(2)**. This indicates that API call was succesful. At this point, you can start making other api calls, and building your game. For a list of all available client API calls, see our documentation: [https://api.playfab.com/](https://api.playfab.com/) ## Deconstruct the code @@ -224,16 +161,3 @@ This optional last section describes every line in GettingStarted.java in detail * PlayFab server issue. As with all software, there can be issues. See our [release notes](https://api.playfab.com/releaseNotes/) for updates. * The internet is not 100% reliable. Sometimes the message is corrupted or fails to reach the PlayFab server. * If you are having difficulty debugging an issue, and the information within the error callback is not sufficient, please visit us on our [forums](https://community.playfab.com/index.html) - -pom.xml is a complicated beast - -* There are a few lines relevant to our example - * <exec.mainClass>GettingStarted</exec.mainClass> - * This tells Maven to run our GettingStarted example when we call "mvn exec:java" - * <dependency>...<groupId>com.google.code.gson</groupId> - * PlayFab requires Google gson to operate - * <dependency>...<groupId>junit</groupId>...<scope>test</scope> - * The PlayFab tests included with the project require JUnit to run [Optional, but included for simpler steps] -* Everything else is standard stuff in a Maven pom.xml, and you should [dive into the documentation](https://maven.apache.org/guides/introduction/introduction-to-the-pom.html) for details. - -Finally, see our separate [testTitleData.json documentation](https://github.com/PlayFab/SDKGenerator/blob/master/JenkinsConsoleUtility/testTitleData.md) diff --git a/PlayFabClientSDK/pom.xml b/PlayFabClientSDK/pom.xml index 0b6d5fcd2..58bda05aa 100644 --- a/PlayFabClientSDK/pom.xml +++ b/PlayFabClientSDK/pom.xml @@ -4,7 +4,7 @@ 2016 com.playfab client-sdk - 0.49.170508 + 0.50.170530 PlayFab Client API PlayFab is the unified backend platform for games — everything you need to build and operate your game, all in one place, so you can focus on creating and delivering a great player experience. http://api.playfab.com/ diff --git a/PlayFabClientSDK/src/main/java/com/playfab/PlayFabClientAPI.java b/PlayFabClientSDK/src/main/java/com/playfab/PlayFabClientAPI.java index b3c8e2f8d..91c5f8644 100644 --- a/PlayFabClientSDK/src/main/java/com/playfab/PlayFabClientAPI.java +++ b/PlayFabClientSDK/src/main/java/com/playfab/PlayFabClientAPI.java @@ -1297,6 +1297,68 @@ private static PlayFabResult privateGetPlayerCombin return pfResult; } + /** + * Retrieves the player's profile + * @param request GetPlayerProfileRequest + * @return Async Task will return GetPlayerProfileResult + */ + @SuppressWarnings("unchecked") + public static FutureTask> GetPlayerProfileAsync(final GetPlayerProfileRequest request) { + return new FutureTask(new Callable>() { + public PlayFabResult call() throws Exception { + return privateGetPlayerProfileAsync(request); + } + }); + } + + /** + * Retrieves the player's profile + * @param request GetPlayerProfileRequest + * @return GetPlayerProfileResult + */ + @SuppressWarnings("unchecked") + public static PlayFabResult GetPlayerProfile(final GetPlayerProfileRequest request) { + FutureTask> task = new FutureTask(new Callable>() { + public PlayFabResult call() throws Exception { + return privateGetPlayerProfileAsync(request); + } + }); + try { + task.run(); + return task.get(); + } catch(Exception e) { + return null; + } + } + + /** + * Retrieves the player's profile + */ + @SuppressWarnings("unchecked") + private static PlayFabResult privateGetPlayerProfileAsync(final GetPlayerProfileRequest request) throws Exception { + if (_authKey == null) throw new Exception ("Must be logged in to call this method"); + + FutureTask task = PlayFabHTTP.doPost(PlayFabSettings.GetURL() + "/Client/GetPlayerProfile", request, "X-Authorization", _authKey); + task.run(); + Object httpResult = task.get(); + if(httpResult instanceof PlayFabError) { + PlayFabError error = (PlayFabError)httpResult; + if (PlayFabSettings.GlobalErrorHandler != null) + PlayFabSettings.GlobalErrorHandler.callback(error); + PlayFabResult result = new PlayFabResult(); + result.Error = error; + return result; + } + String resultRawJson = (String) httpResult; + + PlayFabJsonSuccess resultData = gson.fromJson(resultRawJson, new TypeToken>(){}.getType()); + GetPlayerProfileResult result = resultData.data; + + PlayFabResult pfResult = new PlayFabResult(); + pfResult.Result = result; + return pfResult; + } + /** * Retrieves the unique PlayFab identifiers for the given set of Facebook identifiers. * @param request GetPlayFabIDsFromFacebookIDsRequest diff --git a/PlayFabClientSDK/src/main/java/com/playfab/PlayFabClientModels.java b/PlayFabClientSDK/src/main/java/com/playfab/PlayFabClientModels.java index b3b4cdbea..27679d247 100644 --- a/PlayFabClientSDK/src/main/java/com/playfab/PlayFabClientModels.java +++ b/PlayFabClientSDK/src/main/java/com/playfab/PlayFabClientModels.java @@ -1038,7 +1038,7 @@ public static class ExecuteCloudScriptResult { */ public Object FunctionResult; /** - * Flag indicating if the FunctionResult was too large and was subsequently dropped from this event + * Flag indicating if the FunctionResult was too large and was subsequently dropped from this event. This only occurs if the total event size is larger than 350KB. */ public Boolean FunctionResultTooLarge; /** @@ -1046,7 +1046,7 @@ public static class ExecuteCloudScriptResult { */ public ArrayList Logs; /** - * Flag indicating if the logs were too large and were subsequently dropped from this event + * Flag indicating if the logs were too large and were subsequently dropped from this event. This only occurs if the total event size is larger than 350KB after the FunctionResult was removed. */ public Boolean LogsTooLarge; public Double ExecutionTimeSeconds; @@ -1746,6 +1746,14 @@ public static class GetPlayerCombinedInfoRequestParams { * Specific statistics to retrieve. Leave null to get all keys. Has no effect if GetPlayerStatistics is false */ public ArrayList PlayerStatisticNames; + /** + * Whether to get player profile. Defaults to false. + */ + public Boolean GetPlayerProfile; + /** + * Specifies the properties to return from the player profile. Defaults to returning the player's display name. + */ + public PlayerProfileViewConstraints ProfileConstraints; } @@ -1811,6 +1819,30 @@ public static class GetPlayerCombinedInfoResultPayload { * List of statistics for this player. */ public ArrayList PlayerStatistics; + /** + * The profile of the players. This profile is not guaranteed to be up-to-date. For a new player, this profile will not exist. + */ + public PlayerProfileModel PlayerProfile; + + } + + public static class GetPlayerProfileRequest { + /** + * Unique PlayFab assigned ID of the user on whom the operation will be performed. + */ + public String PlayFabId; + /** + * If non-null, this determines which properties of the profile to return. If null, playfab will only include display names. On client, only ShowDisplayName, ShowStatistics, ShowAvatarUrl are allowed. + */ + public PlayerProfileViewConstraints ProfileConstraints; + + } + + public static class GetPlayerProfileResult { + /** + * The profile of the player. This profile is not guaranteed to be up-to-date. For a new player, this profile will not exist. + */ + public PlayerProfileModel PlayerProfile; } @@ -2063,11 +2095,6 @@ public static class GetPurchaseResult { * Date and time of the purchase. */ public Date PurchaseDate; - /** - * @deprecated Please use instead. - */ - @Deprecated - public ArrayList Items; } @@ -3745,8 +3772,9 @@ public static class ReportPlayerClientRequest { public static class ReportPlayerClientResult { /** - * Indicates whether this action completed successfully. + * @deprecated Do not use */ + @Deprecated public Boolean Updated; /** * The number of remaining reports which may be filed today. diff --git a/PlayFabClientSDK/src/main/java/com/playfab/PlayFabErrors.java b/PlayFabClientSDK/src/main/java/com/playfab/PlayFabErrors.java index 77f5f60ed..1d60d61b6 100644 --- a/PlayFabClientSDK/src/main/java/com/playfab/PlayFabErrors.java +++ b/PlayFabClientSDK/src/main/java/com/playfab/PlayFabErrors.java @@ -303,7 +303,10 @@ public static enum PlayFabErrorCode { InvalidEnvironmentForReceipt(1300), EncryptedRequestNotAllowed(1301), SignedRequestNotAllowed(1302), - RequestViewConstraintParamsNotAllowed(1303); + RequestViewConstraintParamsNotAllowed(1303), + BadPartnerConfiguration(1304), + XboxBPCertificateFailure(1305), + XboxXASSExchangeFailure(1306); public int id; diff --git a/PlayFabClientSDK/src/main/java/com/playfab/PlayFabSettings.java b/PlayFabClientSDK/src/main/java/com/playfab/PlayFabSettings.java index 75b8c0d37..2551e4da8 100644 --- a/PlayFabClientSDK/src/main/java/com/playfab/PlayFabSettings.java +++ b/PlayFabClientSDK/src/main/java/com/playfab/PlayFabSettings.java @@ -3,9 +3,9 @@ import com.playfab.PlayFabErrors.ErrorCallback; public class PlayFabSettings { - public static String SdkVersion = "0.49.170508"; + public static String SdkVersion = "0.50.170530"; public static String BuildIdentifier = "jbuild_javasdk_0"; - public static String SdkVersionString = "JavaSDK-0.49.170508"; + public static String SdkVersionString = "JavaSDK-0.50.170530"; public static String TitleId = null; // You must set this value for PlayFabSdk to work properly (Found in the Game Manager for your title, at the PlayFab Website) public static ErrorCallback GlobalErrorHandler; diff --git a/PlayFabSDK/pom.xml b/PlayFabSDK/pom.xml index ea278dc60..3af791ddb 100644 --- a/PlayFabSDK/pom.xml +++ b/PlayFabSDK/pom.xml @@ -4,7 +4,7 @@ 2016 com.playfab combo-sdk - 0.49.170508 + 0.50.170530 PlayFab Combo API PlayFab is the unified backend platform for games — everything you need to build and operate your game, all in one place, so you can focus on creating and delivering a great player experience. http://api.playfab.com/ diff --git a/PlayFabSDK/src/main/java/com/playfab/PlayFabAdminModels.java b/PlayFabSDK/src/main/java/com/playfab/PlayFabAdminModels.java index 14d350e07..796eb0657 100644 --- a/PlayFabSDK/src/main/java/com/playfab/PlayFabAdminModels.java +++ b/PlayFabSDK/src/main/java/com/playfab/PlayFabAdminModels.java @@ -1151,7 +1151,7 @@ public static class ExecuteCloudScriptResult { */ public Object FunctionResult; /** - * Flag indicating if the FunctionResult was too large and was subsequently dropped from this event + * Flag indicating if the FunctionResult was too large and was subsequently dropped from this event. This only occurs if the total event size is larger than 350KB. */ public Boolean FunctionResultTooLarge; /** @@ -1159,7 +1159,7 @@ public static class ExecuteCloudScriptResult { */ public ArrayList Logs; /** - * Flag indicating if the logs were too large and were subsequently dropped from this event + * Flag indicating if the logs were too large and were subsequently dropped from this event. This only occurs if the total event size is larger than 350KB after the FunctionResult was removed. */ public Boolean LogsTooLarge; public Double ExecutionTimeSeconds; diff --git a/PlayFabSDK/src/main/java/com/playfab/PlayFabClientAPI.java b/PlayFabSDK/src/main/java/com/playfab/PlayFabClientAPI.java index b3c8e2f8d..91c5f8644 100644 --- a/PlayFabSDK/src/main/java/com/playfab/PlayFabClientAPI.java +++ b/PlayFabSDK/src/main/java/com/playfab/PlayFabClientAPI.java @@ -1297,6 +1297,68 @@ private static PlayFabResult privateGetPlayerCombin return pfResult; } + /** + * Retrieves the player's profile + * @param request GetPlayerProfileRequest + * @return Async Task will return GetPlayerProfileResult + */ + @SuppressWarnings("unchecked") + public static FutureTask> GetPlayerProfileAsync(final GetPlayerProfileRequest request) { + return new FutureTask(new Callable>() { + public PlayFabResult call() throws Exception { + return privateGetPlayerProfileAsync(request); + } + }); + } + + /** + * Retrieves the player's profile + * @param request GetPlayerProfileRequest + * @return GetPlayerProfileResult + */ + @SuppressWarnings("unchecked") + public static PlayFabResult GetPlayerProfile(final GetPlayerProfileRequest request) { + FutureTask> task = new FutureTask(new Callable>() { + public PlayFabResult call() throws Exception { + return privateGetPlayerProfileAsync(request); + } + }); + try { + task.run(); + return task.get(); + } catch(Exception e) { + return null; + } + } + + /** + * Retrieves the player's profile + */ + @SuppressWarnings("unchecked") + private static PlayFabResult privateGetPlayerProfileAsync(final GetPlayerProfileRequest request) throws Exception { + if (_authKey == null) throw new Exception ("Must be logged in to call this method"); + + FutureTask task = PlayFabHTTP.doPost(PlayFabSettings.GetURL() + "/Client/GetPlayerProfile", request, "X-Authorization", _authKey); + task.run(); + Object httpResult = task.get(); + if(httpResult instanceof PlayFabError) { + PlayFabError error = (PlayFabError)httpResult; + if (PlayFabSettings.GlobalErrorHandler != null) + PlayFabSettings.GlobalErrorHandler.callback(error); + PlayFabResult result = new PlayFabResult(); + result.Error = error; + return result; + } + String resultRawJson = (String) httpResult; + + PlayFabJsonSuccess resultData = gson.fromJson(resultRawJson, new TypeToken>(){}.getType()); + GetPlayerProfileResult result = resultData.data; + + PlayFabResult pfResult = new PlayFabResult(); + pfResult.Result = result; + return pfResult; + } + /** * Retrieves the unique PlayFab identifiers for the given set of Facebook identifiers. * @param request GetPlayFabIDsFromFacebookIDsRequest diff --git a/PlayFabSDK/src/main/java/com/playfab/PlayFabClientModels.java b/PlayFabSDK/src/main/java/com/playfab/PlayFabClientModels.java index b3b4cdbea..27679d247 100644 --- a/PlayFabSDK/src/main/java/com/playfab/PlayFabClientModels.java +++ b/PlayFabSDK/src/main/java/com/playfab/PlayFabClientModels.java @@ -1038,7 +1038,7 @@ public static class ExecuteCloudScriptResult { */ public Object FunctionResult; /** - * Flag indicating if the FunctionResult was too large and was subsequently dropped from this event + * Flag indicating if the FunctionResult was too large and was subsequently dropped from this event. This only occurs if the total event size is larger than 350KB. */ public Boolean FunctionResultTooLarge; /** @@ -1046,7 +1046,7 @@ public static class ExecuteCloudScriptResult { */ public ArrayList Logs; /** - * Flag indicating if the logs were too large and were subsequently dropped from this event + * Flag indicating if the logs were too large and were subsequently dropped from this event. This only occurs if the total event size is larger than 350KB after the FunctionResult was removed. */ public Boolean LogsTooLarge; public Double ExecutionTimeSeconds; @@ -1746,6 +1746,14 @@ public static class GetPlayerCombinedInfoRequestParams { * Specific statistics to retrieve. Leave null to get all keys. Has no effect if GetPlayerStatistics is false */ public ArrayList PlayerStatisticNames; + /** + * Whether to get player profile. Defaults to false. + */ + public Boolean GetPlayerProfile; + /** + * Specifies the properties to return from the player profile. Defaults to returning the player's display name. + */ + public PlayerProfileViewConstraints ProfileConstraints; } @@ -1811,6 +1819,30 @@ public static class GetPlayerCombinedInfoResultPayload { * List of statistics for this player. */ public ArrayList PlayerStatistics; + /** + * The profile of the players. This profile is not guaranteed to be up-to-date. For a new player, this profile will not exist. + */ + public PlayerProfileModel PlayerProfile; + + } + + public static class GetPlayerProfileRequest { + /** + * Unique PlayFab assigned ID of the user on whom the operation will be performed. + */ + public String PlayFabId; + /** + * If non-null, this determines which properties of the profile to return. If null, playfab will only include display names. On client, only ShowDisplayName, ShowStatistics, ShowAvatarUrl are allowed. + */ + public PlayerProfileViewConstraints ProfileConstraints; + + } + + public static class GetPlayerProfileResult { + /** + * The profile of the player. This profile is not guaranteed to be up-to-date. For a new player, this profile will not exist. + */ + public PlayerProfileModel PlayerProfile; } @@ -2063,11 +2095,6 @@ public static class GetPurchaseResult { * Date and time of the purchase. */ public Date PurchaseDate; - /** - * @deprecated Please use instead. - */ - @Deprecated - public ArrayList Items; } @@ -3745,8 +3772,9 @@ public static class ReportPlayerClientRequest { public static class ReportPlayerClientResult { /** - * Indicates whether this action completed successfully. + * @deprecated Do not use */ + @Deprecated public Boolean Updated; /** * The number of remaining reports which may be filed today. diff --git a/PlayFabSDK/src/main/java/com/playfab/PlayFabErrors.java b/PlayFabSDK/src/main/java/com/playfab/PlayFabErrors.java index 77f5f60ed..1d60d61b6 100644 --- a/PlayFabSDK/src/main/java/com/playfab/PlayFabErrors.java +++ b/PlayFabSDK/src/main/java/com/playfab/PlayFabErrors.java @@ -303,7 +303,10 @@ public static enum PlayFabErrorCode { InvalidEnvironmentForReceipt(1300), EncryptedRequestNotAllowed(1301), SignedRequestNotAllowed(1302), - RequestViewConstraintParamsNotAllowed(1303); + RequestViewConstraintParamsNotAllowed(1303), + BadPartnerConfiguration(1304), + XboxBPCertificateFailure(1305), + XboxXASSExchangeFailure(1306); public int id; diff --git a/PlayFabSDK/src/main/java/com/playfab/PlayFabServerAPI.java b/PlayFabSDK/src/main/java/com/playfab/PlayFabServerAPI.java index 7fc300c26..facad1954 100644 --- a/PlayFabSDK/src/main/java/com/playfab/PlayFabServerAPI.java +++ b/PlayFabSDK/src/main/java/com/playfab/PlayFabServerAPI.java @@ -140,6 +140,68 @@ private static PlayFabResult privateBanUsersAsync(final BanUsers return pfResult; } + /** + * Retrieves the player's profile + * @param request GetPlayerProfileRequest + * @return Async Task will return GetPlayerProfileResult + */ + @SuppressWarnings("unchecked") + public static FutureTask> GetPlayerProfileAsync(final GetPlayerProfileRequest request) { + return new FutureTask(new Callable>() { + public PlayFabResult call() throws Exception { + return privateGetPlayerProfileAsync(request); + } + }); + } + + /** + * Retrieves the player's profile + * @param request GetPlayerProfileRequest + * @return GetPlayerProfileResult + */ + @SuppressWarnings("unchecked") + public static PlayFabResult GetPlayerProfile(final GetPlayerProfileRequest request) { + FutureTask> task = new FutureTask(new Callable>() { + public PlayFabResult call() throws Exception { + return privateGetPlayerProfileAsync(request); + } + }); + try { + task.run(); + return task.get(); + } catch(Exception e) { + return null; + } + } + + /** + * Retrieves the player's profile + */ + @SuppressWarnings("unchecked") + private static PlayFabResult privateGetPlayerProfileAsync(final GetPlayerProfileRequest request) throws Exception { + if (PlayFabSettings.DeveloperSecretKey == null) throw new Exception ("Must have PlayFabSettings.DeveloperSecretKey set to call this method"); + + FutureTask task = PlayFabHTTP.doPost(PlayFabSettings.GetURL() + "/Server/GetPlayerProfile", request, "X-SecretKey", PlayFabSettings.DeveloperSecretKey); + task.run(); + Object httpResult = task.get(); + if(httpResult instanceof PlayFabError) { + PlayFabError error = (PlayFabError)httpResult; + if (PlayFabSettings.GlobalErrorHandler != null) + PlayFabSettings.GlobalErrorHandler.callback(error); + PlayFabResult result = new PlayFabResult(); + result.Error = error; + return result; + } + String resultRawJson = (String) httpResult; + + PlayFabJsonSuccess resultData = gson.fromJson(resultRawJson, new TypeToken>(){}.getType()); + GetPlayerProfileResult result = resultData.data; + + PlayFabResult pfResult = new PlayFabResult(); + pfResult.Result = result; + return pfResult; + } + /** * Retrieves the unique PlayFab identifiers for the given set of Facebook identifiers. * @param request GetPlayFabIDsFromFacebookIDsRequest diff --git a/PlayFabSDK/src/main/java/com/playfab/PlayFabServerModels.java b/PlayFabSDK/src/main/java/com/playfab/PlayFabServerModels.java index 4c2c60efe..f2b425e6f 100644 --- a/PlayFabSDK/src/main/java/com/playfab/PlayFabServerModels.java +++ b/PlayFabSDK/src/main/java/com/playfab/PlayFabServerModels.java @@ -1090,7 +1090,7 @@ public static class ExecuteCloudScriptResult { */ public Object FunctionResult; /** - * Flag indicating if the FunctionResult was too large and was subsequently dropped from this event + * Flag indicating if the FunctionResult was too large and was subsequently dropped from this event. This only occurs if the total event size is larger than 350KB. */ public Boolean FunctionResultTooLarge; /** @@ -1098,7 +1098,7 @@ public static class ExecuteCloudScriptResult { */ public ArrayList Logs; /** - * Flag indicating if the logs were too large and were subsequently dropped from this event + * Flag indicating if the logs were too large and were subsequently dropped from this event. This only occurs if the total event size is larger than 350KB after the FunctionResult was removed. */ public Boolean LogsTooLarge; public Double ExecutionTimeSeconds; @@ -1694,6 +1694,14 @@ public static class GetPlayerCombinedInfoRequestParams { * Specific statistics to retrieve. Leave null to get all keys. Has no effect if GetPlayerStatistics is false */ public ArrayList PlayerStatisticNames; + /** + * Whether to get player profile. Defaults to false. + */ + public Boolean GetPlayerProfile; + /** + * Specifies the properties to return from the player profile. Defaults to returning the player's display name. + */ + public PlayerProfileViewConstraints ProfileConstraints; } @@ -1759,6 +1767,30 @@ public static class GetPlayerCombinedInfoResultPayload { * List of statistics for this player. */ public ArrayList PlayerStatistics; + /** + * The profile of the players. This profile is not guaranteed to be up-to-date. For a new player, this profile will not exist. + */ + public PlayerProfileModel PlayerProfile; + + } + + public static class GetPlayerProfileRequest { + /** + * Unique PlayFab assigned ID of the user on whom the operation will be performed. + */ + public String PlayFabId; + /** + * If non-null, this determines which properties of the profile to return. If null, playfab will only include display names. On client, only ShowDisplayName, ShowStatistics, ShowAvatarUrl are allowed. + */ + public PlayerProfileViewConstraints ProfileConstraints; + + } + + public static class GetPlayerProfileResult { + /** + * The profile of the player. This profile is not guaranteed to be up-to-date. For a new player, this profile will not exist. + */ + public PlayerProfileModel PlayerProfile; } @@ -3211,13 +3243,9 @@ public static class ReportPlayerServerRequest { */ public String ReporterId; /** - * PlayFabId of the reported player. + * Unique PlayFab identifier of the reported player. */ public String ReporteeId; - /** - * Title player was reported in, optional if report not for specific title. - */ - public String TitleId; /** * Optional additional comment by reporting player. */ @@ -3227,8 +3255,9 @@ public static class ReportPlayerServerRequest { public static class ReportPlayerServerResult { /** - * Indicates whether this action completed successfully. + * @deprecated Do not use */ + @Deprecated public Boolean Updated; /** * The number of remaining reports which may be filed today by this reporting player. diff --git a/PlayFabSDK/src/main/java/com/playfab/PlayFabSettings.java b/PlayFabSDK/src/main/java/com/playfab/PlayFabSettings.java index 0b743e300..12edf86aa 100644 --- a/PlayFabSDK/src/main/java/com/playfab/PlayFabSettings.java +++ b/PlayFabSDK/src/main/java/com/playfab/PlayFabSettings.java @@ -3,9 +3,9 @@ import com.playfab.PlayFabErrors.ErrorCallback; public class PlayFabSettings { - public static String SdkVersion = "0.49.170508"; + public static String SdkVersion = "0.50.170530"; public static String BuildIdentifier = "jbuild_javasdk_0"; - public static String SdkVersionString = "JavaSDK-0.49.170508"; + public static String SdkVersionString = "JavaSDK-0.50.170530"; public static String TitleId = null; // You must set this value for PlayFabSdk to work properly (Found in the Game Manager for your title, at the PlayFab Website) public static ErrorCallback GlobalErrorHandler; diff --git a/PlayFabServerSDK/pom.xml b/PlayFabServerSDK/pom.xml index 63ecd6c33..557c2a0e1 100644 --- a/PlayFabServerSDK/pom.xml +++ b/PlayFabServerSDK/pom.xml @@ -4,7 +4,7 @@ 2016 com.playfab server-sdk - 0.49.170508 + 0.50.170530 PlayFab Server API PlayFab is the unified backend platform for games — everything you need to build and operate your game, all in one place, so you can focus on creating and delivering a great player experience. http://api.playfab.com/ diff --git a/PlayFabServerSDK/src/main/java/com/playfab/PlayFabAdminModels.java b/PlayFabServerSDK/src/main/java/com/playfab/PlayFabAdminModels.java index 14d350e07..796eb0657 100644 --- a/PlayFabServerSDK/src/main/java/com/playfab/PlayFabAdminModels.java +++ b/PlayFabServerSDK/src/main/java/com/playfab/PlayFabAdminModels.java @@ -1151,7 +1151,7 @@ public static class ExecuteCloudScriptResult { */ public Object FunctionResult; /** - * Flag indicating if the FunctionResult was too large and was subsequently dropped from this event + * Flag indicating if the FunctionResult was too large and was subsequently dropped from this event. This only occurs if the total event size is larger than 350KB. */ public Boolean FunctionResultTooLarge; /** @@ -1159,7 +1159,7 @@ public static class ExecuteCloudScriptResult { */ public ArrayList Logs; /** - * Flag indicating if the logs were too large and were subsequently dropped from this event + * Flag indicating if the logs were too large and were subsequently dropped from this event. This only occurs if the total event size is larger than 350KB after the FunctionResult was removed. */ public Boolean LogsTooLarge; public Double ExecutionTimeSeconds; diff --git a/PlayFabServerSDK/src/main/java/com/playfab/PlayFabErrors.java b/PlayFabServerSDK/src/main/java/com/playfab/PlayFabErrors.java index 77f5f60ed..1d60d61b6 100644 --- a/PlayFabServerSDK/src/main/java/com/playfab/PlayFabErrors.java +++ b/PlayFabServerSDK/src/main/java/com/playfab/PlayFabErrors.java @@ -303,7 +303,10 @@ public static enum PlayFabErrorCode { InvalidEnvironmentForReceipt(1300), EncryptedRequestNotAllowed(1301), SignedRequestNotAllowed(1302), - RequestViewConstraintParamsNotAllowed(1303); + RequestViewConstraintParamsNotAllowed(1303), + BadPartnerConfiguration(1304), + XboxBPCertificateFailure(1305), + XboxXASSExchangeFailure(1306); public int id; diff --git a/PlayFabServerSDK/src/main/java/com/playfab/PlayFabServerAPI.java b/PlayFabServerSDK/src/main/java/com/playfab/PlayFabServerAPI.java index 7fc300c26..facad1954 100644 --- a/PlayFabServerSDK/src/main/java/com/playfab/PlayFabServerAPI.java +++ b/PlayFabServerSDK/src/main/java/com/playfab/PlayFabServerAPI.java @@ -140,6 +140,68 @@ private static PlayFabResult privateBanUsersAsync(final BanUsers return pfResult; } + /** + * Retrieves the player's profile + * @param request GetPlayerProfileRequest + * @return Async Task will return GetPlayerProfileResult + */ + @SuppressWarnings("unchecked") + public static FutureTask> GetPlayerProfileAsync(final GetPlayerProfileRequest request) { + return new FutureTask(new Callable>() { + public PlayFabResult call() throws Exception { + return privateGetPlayerProfileAsync(request); + } + }); + } + + /** + * Retrieves the player's profile + * @param request GetPlayerProfileRequest + * @return GetPlayerProfileResult + */ + @SuppressWarnings("unchecked") + public static PlayFabResult GetPlayerProfile(final GetPlayerProfileRequest request) { + FutureTask> task = new FutureTask(new Callable>() { + public PlayFabResult call() throws Exception { + return privateGetPlayerProfileAsync(request); + } + }); + try { + task.run(); + return task.get(); + } catch(Exception e) { + return null; + } + } + + /** + * Retrieves the player's profile + */ + @SuppressWarnings("unchecked") + private static PlayFabResult privateGetPlayerProfileAsync(final GetPlayerProfileRequest request) throws Exception { + if (PlayFabSettings.DeveloperSecretKey == null) throw new Exception ("Must have PlayFabSettings.DeveloperSecretKey set to call this method"); + + FutureTask task = PlayFabHTTP.doPost(PlayFabSettings.GetURL() + "/Server/GetPlayerProfile", request, "X-SecretKey", PlayFabSettings.DeveloperSecretKey); + task.run(); + Object httpResult = task.get(); + if(httpResult instanceof PlayFabError) { + PlayFabError error = (PlayFabError)httpResult; + if (PlayFabSettings.GlobalErrorHandler != null) + PlayFabSettings.GlobalErrorHandler.callback(error); + PlayFabResult result = new PlayFabResult(); + result.Error = error; + return result; + } + String resultRawJson = (String) httpResult; + + PlayFabJsonSuccess resultData = gson.fromJson(resultRawJson, new TypeToken>(){}.getType()); + GetPlayerProfileResult result = resultData.data; + + PlayFabResult pfResult = new PlayFabResult(); + pfResult.Result = result; + return pfResult; + } + /** * Retrieves the unique PlayFab identifiers for the given set of Facebook identifiers. * @param request GetPlayFabIDsFromFacebookIDsRequest diff --git a/PlayFabServerSDK/src/main/java/com/playfab/PlayFabServerModels.java b/PlayFabServerSDK/src/main/java/com/playfab/PlayFabServerModels.java index 4c2c60efe..f2b425e6f 100644 --- a/PlayFabServerSDK/src/main/java/com/playfab/PlayFabServerModels.java +++ b/PlayFabServerSDK/src/main/java/com/playfab/PlayFabServerModels.java @@ -1090,7 +1090,7 @@ public static class ExecuteCloudScriptResult { */ public Object FunctionResult; /** - * Flag indicating if the FunctionResult was too large and was subsequently dropped from this event + * Flag indicating if the FunctionResult was too large and was subsequently dropped from this event. This only occurs if the total event size is larger than 350KB. */ public Boolean FunctionResultTooLarge; /** @@ -1098,7 +1098,7 @@ public static class ExecuteCloudScriptResult { */ public ArrayList Logs; /** - * Flag indicating if the logs were too large and were subsequently dropped from this event + * Flag indicating if the logs were too large and were subsequently dropped from this event. This only occurs if the total event size is larger than 350KB after the FunctionResult was removed. */ public Boolean LogsTooLarge; public Double ExecutionTimeSeconds; @@ -1694,6 +1694,14 @@ public static class GetPlayerCombinedInfoRequestParams { * Specific statistics to retrieve. Leave null to get all keys. Has no effect if GetPlayerStatistics is false */ public ArrayList PlayerStatisticNames; + /** + * Whether to get player profile. Defaults to false. + */ + public Boolean GetPlayerProfile; + /** + * Specifies the properties to return from the player profile. Defaults to returning the player's display name. + */ + public PlayerProfileViewConstraints ProfileConstraints; } @@ -1759,6 +1767,30 @@ public static class GetPlayerCombinedInfoResultPayload { * List of statistics for this player. */ public ArrayList PlayerStatistics; + /** + * The profile of the players. This profile is not guaranteed to be up-to-date. For a new player, this profile will not exist. + */ + public PlayerProfileModel PlayerProfile; + + } + + public static class GetPlayerProfileRequest { + /** + * Unique PlayFab assigned ID of the user on whom the operation will be performed. + */ + public String PlayFabId; + /** + * If non-null, this determines which properties of the profile to return. If null, playfab will only include display names. On client, only ShowDisplayName, ShowStatistics, ShowAvatarUrl are allowed. + */ + public PlayerProfileViewConstraints ProfileConstraints; + + } + + public static class GetPlayerProfileResult { + /** + * The profile of the player. This profile is not guaranteed to be up-to-date. For a new player, this profile will not exist. + */ + public PlayerProfileModel PlayerProfile; } @@ -3211,13 +3243,9 @@ public static class ReportPlayerServerRequest { */ public String ReporterId; /** - * PlayFabId of the reported player. + * Unique PlayFab identifier of the reported player. */ public String ReporteeId; - /** - * Title player was reported in, optional if report not for specific title. - */ - public String TitleId; /** * Optional additional comment by reporting player. */ @@ -3227,8 +3255,9 @@ public static class ReportPlayerServerRequest { public static class ReportPlayerServerResult { /** - * Indicates whether this action completed successfully. + * @deprecated Do not use */ + @Deprecated public Boolean Updated; /** * The number of remaining reports which may be filed today by this reporting player. diff --git a/PlayFabServerSDK/src/main/java/com/playfab/PlayFabSettings.java b/PlayFabServerSDK/src/main/java/com/playfab/PlayFabSettings.java index 34835875e..41ceefae0 100644 --- a/PlayFabServerSDK/src/main/java/com/playfab/PlayFabSettings.java +++ b/PlayFabServerSDK/src/main/java/com/playfab/PlayFabSettings.java @@ -3,9 +3,9 @@ import com.playfab.PlayFabErrors.ErrorCallback; public class PlayFabSettings { - public static String SdkVersion = "0.49.170508"; + public static String SdkVersion = "0.50.170530"; public static String BuildIdentifier = "jbuild_javasdk_0"; - public static String SdkVersionString = "JavaSDK-0.49.170508"; + public static String SdkVersionString = "JavaSDK-0.50.170530"; public static String TitleId = null; // You must set this value for PlayFabSdk to work properly (Found in the Game Manager for your title, at the PlayFab Website) public static ErrorCallback GlobalErrorHandler; diff --git a/README.md b/README.md index 34f06a04b..0393a4f8a 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,6 @@ # Java SDK for PlayFab README + ## 1. Overview: This document describes the process of configuring and building the PlayFab Java SDK. @@ -61,7 +62,7 @@ The Example PlayFabApiTests can be run from the console. These instructions ass * This will build the project, execute tests, build documentation, and verify the package -## 7. Troubleshooting: +## 6. Troubleshooting: For a complete list of available APIs, check out the [online documentation](http://api.playfab.com/Documentation/). @@ -74,14 +75,14 @@ Our Developer Success Team can assist with answering any questions as well as pr [Forums, Support and Knowledge Base](https://community.playfab.com/index.html) -## 8. Acknowlegements +## 7. Acknowlegements The PlayFab Java SDK was initially created and submitted to PlayFab by [nicosio2](https://github.com/nicosio2) The PlayFab Java SDK has been restructured for Maven support by Will Iverson at [Game Studio One](https://gamestudioone.com/) -## 9. Copyright and Licensing Information: +## 8. Copyright and Licensing Information: Apache License -- Version 2.0, January 2004 diff --git a/builds/client-sdk-0.49.170508-javadoc.jar b/builds/client-sdk-0.49.170508-javadoc.jar deleted file mode 100644 index ea50b63a9..000000000 Binary files a/builds/client-sdk-0.49.170508-javadoc.jar and /dev/null differ diff --git a/builds/client-sdk-0.49.170508.jar b/builds/client-sdk-0.49.170508.jar deleted file mode 100644 index f530f696f..000000000 Binary files a/builds/client-sdk-0.49.170508.jar and /dev/null differ diff --git a/builds/client-sdk-0.50.170530-javadoc.jar b/builds/client-sdk-0.50.170530-javadoc.jar new file mode 100644 index 000000000..a25321cb5 Binary files /dev/null and b/builds/client-sdk-0.50.170530-javadoc.jar differ diff --git a/builds/client-sdk-0.50.170530.jar b/builds/client-sdk-0.50.170530.jar new file mode 100644 index 000000000..84b9737bf Binary files /dev/null and b/builds/client-sdk-0.50.170530.jar differ diff --git a/builds/combo-sdk-0.49.170508-javadoc.jar b/builds/combo-sdk-0.49.170508-javadoc.jar deleted file mode 100644 index d8e37a309..000000000 Binary files a/builds/combo-sdk-0.49.170508-javadoc.jar and /dev/null differ diff --git a/builds/combo-sdk-0.49.170508.jar b/builds/combo-sdk-0.49.170508.jar deleted file mode 100644 index e57b50364..000000000 Binary files a/builds/combo-sdk-0.49.170508.jar and /dev/null differ diff --git a/builds/combo-sdk-0.50.170530-javadoc.jar b/builds/combo-sdk-0.50.170530-javadoc.jar new file mode 100644 index 000000000..f517b0dba Binary files /dev/null and b/builds/combo-sdk-0.50.170530-javadoc.jar differ diff --git a/builds/combo-sdk-0.50.170530.jar b/builds/combo-sdk-0.50.170530.jar new file mode 100644 index 000000000..a5d37e36d Binary files /dev/null and b/builds/combo-sdk-0.50.170530.jar differ diff --git a/builds/server-sdk-0.49.170508-javadoc.jar b/builds/server-sdk-0.49.170508-javadoc.jar deleted file mode 100644 index 0922cf9d7..000000000 Binary files a/builds/server-sdk-0.49.170508-javadoc.jar and /dev/null differ diff --git a/builds/server-sdk-0.50.170530-javadoc.jar b/builds/server-sdk-0.50.170530-javadoc.jar new file mode 100644 index 000000000..43b52d47e Binary files /dev/null and b/builds/server-sdk-0.50.170530-javadoc.jar differ diff --git a/builds/server-sdk-0.49.170508.jar b/builds/server-sdk-0.50.170530.jar similarity index 51% rename from builds/server-sdk-0.49.170508.jar rename to builds/server-sdk-0.50.170530.jar index c3d93eb6f..0aea8b91e 100644 Binary files a/builds/server-sdk-0.49.170508.jar and b/builds/server-sdk-0.50.170530.jar differ diff --git a/images/Java/Java-Getting-Started-1.png b/images/Java/Java-Getting-Started-1.png new file mode 100644 index 000000000..785d70aed Binary files /dev/null and b/images/Java/Java-Getting-Started-1.png differ diff --git a/images/Java/Java-Getting-Started-2.png b/images/Java/Java-Getting-Started-2.png new file mode 100644 index 000000000..70d2a234e Binary files /dev/null and b/images/Java/Java-Getting-Started-2.png differ diff --git a/images/Java/Java-Getting-Started-3.png b/images/Java/Java-Getting-Started-3.png new file mode 100644 index 000000000..6367b299a Binary files /dev/null and b/images/Java/Java-Getting-Started-3.png differ diff --git a/images/Java/Java-Getting-Started-4.png b/images/Java/Java-Getting-Started-4.png new file mode 100644 index 000000000..ca6d964b7 Binary files /dev/null and b/images/Java/Java-Getting-Started-4.png differ diff --git a/images/Java/Java-Getting-Started-6.png b/images/Java/Java-Getting-Started-6.png new file mode 100644 index 000000000..c2a699068 Binary files /dev/null and b/images/Java/Java-Getting-Started-6.png differ diff --git a/images/Java/Java-Getting-Started-7.png b/images/Java/Java-Getting-Started-7.png new file mode 100644 index 000000000..78b76a3fe Binary files /dev/null and b/images/Java/Java-Getting-Started-7.png differ