• Hey Guest! Ever feel like entering a Game Jam, but the time limit is always too much pressure? We get it... You lead a hectic life and dedicating 3 whole days to make a game just doesn't work for you! So, why not enter the GMC SLOW JAM? Take your time! Kick back and make your game over 4 months! Interested? Then just click here!
  • Hello [name]! Thanks for joining the GMC. Before making any posts in the Tech Support forum, can we suggest you read the forum rules? These are simple guidelines that we ask you to follow so that you can get the best help possible for your issue.

Google Play Cloud Game Saves - Anyone got this working?

Jon

Member
I feel like I'm really close on this, but I am still seeing
I've checked the boxes on the Social tab of the Android/Fire tab in GGS that says "Enable Google Cloud Saving" and "Enable Google Services" and included my app ID

If I don't check the box, I get this exception in the log: "Must include Drive.SCOPE_APPFOLDER to use snapshots!"

If I do check the box, I get this exception in the log: "cloudSynchronise called when not logged in to appropriate service" and "cloud_string_save() called when not logged in to appropriate service"
So I think we can surmise the checkbox is controlling the manifest entry.

I have the Drive API, Google+ API enabled on the Google API manager site for this app ID.
I am signed in for Google Play Services and my achievements and leaderboards all work.

What am I missing here to get cloud saving to work? Anyone have words of wisdom on this?
How do I log in?
Am I missing something in the manifest? Seems like I need this in my manifest but I'm not sure how to add it:
<meta-data android:name="com.google.android.apps.drive.APP_ID" android:value="id=@string/gp_app_id" />​
Right now I see this in there, but I think this is wrong as appstate is gone now:
<meta-data android:name="com.google.android.gms.appstate.APP_ID" android:value="@string/gp_app_id" />​

Something in my code?
 
Last edited:
H

Howard Lehr

Guest
I feel like I'm really close on this, but I am still seeing
I've checked the boxes on the Social tab of the Android/Fire tab in GGS that says "Enable Google Cloud Saving" and "Enable Google Services" and included my app ID

If I don't check the box, I get this exception in the log: "Must include Drive.SCOPE_APPFOLDER to use snapshots!"

If I do check the box, I get this exception in the log: "cloudSynchronise called when not logged in to appropriate service" and "cloud_string_save() called when not logged in to appropriate service"
So I think we can surmise the checkbox is controlling the manifest entry.

I have the Drive API, Google+ API enabled on the Google API manager site for this app ID.
I am signed in for Google Play Services and my achievements and leaderboards all work.

What am I missing here to get cloud saving to work? Anyone have words of wisdom on this?
How do I log in?
Am I missing something in the manifest? Seems like I need this in my manifest but I'm not sure how to add it:
<meta-data android:name="com.google.android.apps.drive.APP_ID" android:value="id=@string/gp_app_id" />​
Right now I see this in there, but I think this is wrong as appstate is gone now:
<meta-data android:name="com.google.android.gms.appstate.APP_ID" android:value="@string/gp_app_id" />​

Something in my code?
Jon,

Did you ever figure this out? It's strange that the check-box exists but doesn't seem to have a use. In the manual, under "Cloud Services" it says:

"NOTE: Currently only Amazon WhisperSync is supported and you must activate it through the Android Tab of the Global Game Settings."

Perhaps it's just that the "Enable Google Cloud Saving" button is just to enable "Whisper Synch?"

Any info about your experience with this is appreciated. Lots of other games appear to be able to save in Game Center and Google Play Games. It's a pretty big miss if Game Maker Studio Pro doesn't include this.
 

zbox

Member
GMC Elder
This has to be broken permanently for sure, I only read about cloud sync working one time andd haven't seen the slightest of mentions since
 

Appsurd

Member
Altough I haven't tested it thoroughly, I got something working on Android. In case I have more details I will post them here.
 
H

Howard Lehr

Guest
Just the cmd output during debug, sorry don't know the name of it. Here's an example of my save game output:

My save game code looks like this:
Code:
ds_map_secure_save(save_map, "NN.sav");
    if os_type = os_android
    {
        save_check = cloud_file_save("NN.sav","NN_save_file");
    }
    //destroy map to re-claim memory
    ds_map_destroy(save_map);
The console shows the following:

I/yoyo (19974): AchievementLogin()
I/yoyo (19974): Calling connect on googleapiclient
I/yoyo (19974): Sign In Succeeded
I/yoyo (19974): Found displayname 4chktest8 with id g17784194982866290041
I/yoyo (19974): Google onGSStringSave called
I/yoyo (19974): saving snapshot:30c1f8e5014b78be7318b47be15ebc1c4736ec74f9d2d619138e53a5e36c6a536b76c33bd4b1b60ceyAic3F1aXNoX29mZiI6IDAuMDAwMDAwLCAiYmFzZV9hcnJheVs3MiwyXSI6IDEwMjAuMDAwMDAwLCAiYmFzZV9hcnJheVs3MCw4XSI6IDAuMDAwMDAwLCAiYmFzZV9hcnJheVsyMCwxMF0iOiAwLjAwMDAwMCwgImJhc2VfYXJyYXlbNjgsOV0iOiAwLjAwMDAwMCwgImJhc2VfYXJyYXlbODIsMTBdIjogMC4wMDAwMDAsICJiYXNlX2FycmF5WzE1Niw4XSI6IDAuMDAwMDAwLCAiYmFzZV9hcnJheVsxNTQsMl0iOiAxNDcwLjAwMDAwMCwgImJhc2VfYXJyYXlbMTUzLDEwXSI6IDAuMDAwMDAwLCAiYmFzZV9hcnJheVs1OSw3XSI6IDAuMDAwMDAwLCAiYmFzZV9hcnJheVsxNTMsOF0iOiAwLjAwMDAwMCwgImJhc2VfYXJyYXlbMTUxLDJdIjogMTM5NS4wMDAwMDAsICJuZXdfbGV2ZWwiOiAwLjAwMDAwMCwgImJhc2VfYXJyYXlbMTQ5LDNdIjogMC4wMDAwMDAsICJiYXNlX2FycmF5WzEwOSw0XSI6IDAuMDAwMDAwLCAiYmFzZV9hcnJheVsxNzgsMTBdIjogMC4wMDAwMDAsICJiYXNlX2FycmF5Wzc3LDJdIjogMTAyMC4wMDAwMDAsICJiYXNlX2FycmF5Wzc1LDhdIjogMC4wMDAwMDAsICJiYXNlX2FycmF5Wzg4LDRdIjogMC4wMDAwMDAsICJiYXNlX2FycmF5WzI1LDRdIjogMC4wMDAwMDAsICJiYXNlX2FycmF5WzY1LDNdIjogMC4wMDAwMDAsICJiYXNlX2FycmF5WzY3LDldIjogMC4wMDAwMDAsICJiYXNlX2FycmF5WzE1OSw4XSI6IDAuMDAwMDAwLCAiYmFzZV9hcnJheVs1Myw3XSI6IDAuMDAwMDAwLCAiYmFzZV9hcnJheVsxMDMsNF0iOiAwLjAwMDAwMCwgImJhc2VfYXJyYXlbMTQxLDldIjogMC4wMDAwMDAsICJiYXNlX2FycmF5WzE0MywzXSI6IDAuMDAwMDAwLCAiYmFzZV9hcnJheVsxOTMsMTBdIjogMC4wMDAwMDAsICJiYXNlX2FycmF5WzgyLDRdIjogMC4wMDAwMDAsICJiYXNlX2FycmF5WzE3NSw3XSI6IDAuMDAwMDAwLCAiYmFzZV9hcnJheVsxMzEsMTBdIjogMC4wMDAwMDAsICJiYXNlX2FycmF5WzEwNiw0XSI6IDAuMDAwMDAwLCAiYmFzZV9hcnJheVsxNDQsOV0iOiAwLjAwMDAwMCwgImJhc2VfYXJyYXlbMTQ2LDNdIjogMC4wMDAwMDAsICJiYXNlX2FycmF5Wzc4LDJdIjogMTAyMC4wMDAwMDAsICJiYXNlX2FycmF5Wzg3LDRdIjogMC4wMDAwMDAsICJiYXNlX2FycmF5WzQyLDEwXSI6IDAuMDAwMDAwLCAiYmFzZV9hcnJheVsxNzAsN10iOiAwLjAwMDAwMCwgInR1dF9za2lwcGVkIjogMC4wMDAwMDAsICJiYXNlX2FycmF5WzIwLDRdIjogMC4wMDAwMDAsICJiYXNlX2FycmF5WzY5LDEwXSI6IDAuMDAwMDAwLCAiYmFzZV9hcnJheVs2MCwzXSI6IDAuMDAwMDAwLCAiYmFzZV9hcnJheVs2Miw5XSI6IDAuMDAwMDAwLCAiYmFzZV9hcnJheVs1Niw3XSI6IDAuMDAwMDAwLCAiYmFzZV9hcnJheVsxMDgsMTBdIjogMC4wMDAwMDAsICJiYXNlX2FycmF5WzEwNSw4XSI6IDAuMDAwMDAwLCAiYmFzZV9hcnJheVsxMDcsMl0iOiAxMjQ1LjAwMDAwMCwgImJhc2VfYXJyYXlbODYsMl0iOiAxMDk1LjAwMDAwMCwgImFjaF9hcnJbMiw1XSI6IDAuMDAwMDAwLCAiYmFzZV9hcnJheVs3OSw0XSI6IDAuMDAwMDAwLCAiYmFzZV9hcnJheVs4NCw4XSI6IDAuMDAwMDAwLCAiYmFzZV9hcnJheVszOSwzXSI6IDAuMDAwMDAwLCAibHZsX3N0YXRzX2FyclsxMywwXSI6IDAuMDAwMDAwLCAiYmFzZV9hcnJheVsyMSwyXSI6IDU3MC4wMDAwMDAsICJsdmxfc3RhdHNfYXJyWzMsMF0iOiAwLjAwMDAwMCwgImJhc2VfYXJyYXlbMjMsOF0iOiAwLjAwMDAwMCwgImJhc2VfYXJyYXlbMTI5LDddIjogMC4wMDAwMDAsICJiYXNlX2FycmF5WzEyMywxMF0iOiAwLjAwMDAwMCwgImJhc2VfYXJyYXlbMTgxLDEwXSI6IDAuMDAwMDAwLCAiYmFzZV9hcnJheVsyNCwyXSI6IDY0NS4wMDAwMDAsICJsdmxfc3RhdHNfYXJyWzYsMF0iOiAwLjAwMDAwMCwgImJhc2VfYXJyYXlbMjYsOF0iOiAwLjAwMDAwMCwgImx2bF9zdGF0c19hcnJbMTYsMF0iOiAwLjAwMDAwMCwgImJhc2VfYXJyYXlbOTksOV0iOiAwLjAwMDAwMCwgImx2bF9zdGF0c19hcnJbMjAsNF0iOiAwLjAwMDAwMCwgImJhc2VfYXJyYXlbNTAsMTBdIjogMC4wMDAwMDAsICJiYXNlX2FycmF5WzExOCw5XSI6IDAuMDAwMDAwLCAiYmFzZV9hcnJheVsxMDAsOF0iOiAwLjAwMDAwMCwgImJhc2VfYXJyYXlbMTAyLDJdIjogMTE3MC4wMDAwMDAsICJiYXNlX2FycmF5WzgzLDJdIjogMTA5NS4wMDAwMDAsICJiYXNlX2FycmF5WzgxLDhdIjogMC4wMDAwMDAsICJnZWFyX2Fycls1LDNdIjogMC4wMDAwMDAsICJiYXNlX2FycmF5WzkxLDNdIjogMC4wMDAwMDAsICJiYXNlX2FycmF5WzkzLDldIjogMC4wMDAwMDAsICJiYXNlX2FycmF5WzEyNiw3XSI6IDAuMDAwMDAwLCAiYmFzZV9hcnJheVsxMTIsOV0iOiAwLjAwMDAwMCwgImJhc2VfYXJyYXlbMTEwLDNdIjogMC4wMDAwMDAsICJnb2xkX25vb2JbMTUsMF0iOiA3ODAuMDAwMDAwLCAiYmFzZV9hcnJheVsxNTAsNF0iOiAwLjAwMDAwMCwgImJhc2VfYXJyYXlbMTksMTBdIjogMC4wMDAwMDAsICJiYXNlX2FycmF5WzkwLDEwXSI6IDAuMDAwMDAwLCAiYmFzZV9hcnJheVsxMDgsMl0iOiAxMjQ1LjAwMDAwMCwgImJhc2VfYXJyYXlbMzIsMTBdIjogMC4wMDAwMDAsICJiYXNlX2FycmF5WzM2LDNdIjogMC4wMDAwMDAsICJiYXNlX2FycmF5WzM0LDldIjogMC4wMDAwMDAsICJiYXNlX2FycmF5WzE4MSw3XSI6IDAuMDAwMDAwLCAiYmFzZV9hcnJheVs4OSwyXSI6IDEwOTUuMDAwMDAwLCAiYmFzZV9hcnJheVs3Niw0XSI6IDAuMDAwMDAwLCAiYmFzZV9hcnJheVsxNDEsMTBdIjogMC4wMDAwMDAsICJiYXNlX2FycmF5WzMzLDNdIjogMC4wMDAwMDAsICJiYXNlX2FycmF5WzMxLDldIjogMC4wMDAwMDAsICJiYXNlX2FycmF5WzE4NCw3XSI6IDAuMDAwMDAwLCAiYmFzZV9hcnJheVs3Myw0XSI6IDAuMDAwMDAwLCAiYmFzZV9hcnJheVs5NCwzXSI6IDAuMDAwMDAwLCAiYmFzZV9hcnJheVs5Niw5XSI6IDAuMDAwMDAwLCAiYmFzZV9hcnJheVsxMjMsN10iOiAwLjAwMDAwMCwgImdlYXJfYXJyWzAsM10iOiAwL
I/yoyo (19974): Commit Snapshot success
I/yoyo (19974): onGSStringSaves completed with 0

However, recovering that isn't working... that's why I asked about the "snapshot success" (second line from the bottom):

My recovery code (in the Cloud Asynchronous event) looks like this:
Code:
if ds_map_find_value(async_load, "status") == 0
        {
            var recovered_data = ds_map_find_value(async_load, "resultString");
            save_file_index = file_text_open_write("NN.sav");
            file_text_write_string(save_file_index,recovered_data);
            file_text_close(save_file_index);
            scr_save_read();
So, write the result string into a text file with the normal name, then run the read code as per normal like this:
Code:
if file_exists("NN.sav")
    {
        loaded_map = ds_map_secure_load("NN.sav");
        //options
            music_on = ds_map_find_value(loaded_map, "music_on");
            ... lots of lines of fetching ds_map data...
This all appears to work, but when my load script "scr_save_read()" tries to import the first item "music_on" it throws an error saying that the file's contents aren't in the correct format. In other words, the ds_map_secure_load of the new file created from the retrieved string isn't converting back into a valid save DS_MAP. This code works perfectly fine without the cloud_save / write to a text file process. In other words, the ds_map_secure_* save/load works great, but it appears the string that comes back after cloud save isn't exactly the same as the one saved up to the cloud via cloud_file_save("file","description").

Any idea what the correct way to retrieve the cloud save data is? It would be preferable to preserve the secure save to make the game harder to hack.

Thanks very much for all the help!
 
H

Howard Lehr

Guest
I am unsure with "Console" you are talking about @Howard Lehr . Could you please explain?
To follow up, here is the output mentioned in my other detailed post, but this is the console output from trying to retrieve the saved game:

I/yoyo (28181): onGSCloudSync called with id=2
I/yoyo (28181): get save game data result :Status{statusCode=STATUS_OK, resolution=null} status=0
I/yoyo (28181): Save Result status: 0
I/yoyo (28181): got save game data:30c1f8e5014b78be7318b47be15ebc1c4736ec74f9d2d619138e53a5e36c6a536b76c33bd4b1b60ceyAic3F1aXNoX29mZiI6IDAuMDAwMDAwLCAiYmFzZV9hcnJheVs3MiwyXSI6IDEwMjAuMDAwMDAwLCAiYmFzZV9hcnJheVs3MCw4XSI6IDAuMDAwMDAwLCAiYmFzZV9hcnJheVsyMCwxMF0iOiAwLjAwMDAwMCwgImJhc2VfYXJyYXlbNjgsOV0iOiAwLjAwMDAwMCwgImJhc2VfYXJyYXlbODIsMTBdIjogMC4wMDAwMDAsICJiYXNlX2FycmF5WzE1Niw4XSI6IDAuMDAwMDAwLCAiYmFzZV9hcnJheVsxNTQsMl0iOiAxNDcwLjAwMDAwMCwgImJhc2VfYXJyYXlbMTUzLDEwXSI6IDAuMDAwMDAwLCAiYmFzZV9hcnJheVs1OSw3XSI6IDAuMDAwMDAwLCAiYmFzZV9hcnJheVsxNTMsOF0iOiAwLjAwMDAwMCwgImJhc2VfYXJyYXlbMTUxLDJdIjogMTM5NS4wMDAwMDAsICJuZXdfbGV2ZWwiOiAwLjAwMDAwMCwgImJhc2VfYXJyYXlbMTQ5LDNdIjogMC4wMDAwMDAsICJiYXNlX2FycmF5WzEwOSw0XSI6IDAuMDAwMDAwLCAiYmFzZV9hcnJheVsxNzgsMTBdIjogMC4wMDAwMDAsICJiYXNlX2FycmF5Wzc3LDJdIjogMTAyMC4wMDAwMDAsICJiYXNlX2FycmF5Wzc1LDhdIjogMC4wMDAwMDAsICJiYXNlX2FycmF5Wzg4LDRdIjogMC4wMDAwMDAsICJiYXNlX2FycmF5WzI1LDRdIjogMC4wMDAwMDAsICJiYXNlX2FycmF5WzY1LDNdIjogMC4wMDAwMDAsICJiYXNlX2FycmF5WzY3LDldIjogMC4wMDAwMDAsICJiYXNlX2FycmF5WzE1OSw4XSI6IDAuMDAwMDAwLCAiYmFzZV9hcnJheVs1Myw3XSI6IDAuMDAwMDAwLCAiYmFzZV9hcnJheVsxMDMsNF0iOiAwLjAwMDAwMCwgImJhc2VfYXJyYXlbMTQxLDldIjogMC4wMDAwMDAsICJiYXNlX2FycmF5WzE0MywzXSI6IDAuMDAwMDAwLCAiYmFzZV9hcnJheVsxOTMsMTBdIjogMC4wMDAwMDAsICJiYXNlX2FycmF5WzgyLDRdIjogMC4wMDAwMDAsICJiYXNlX2FycmF5WzE3NSw3XSI6IDAuMDAwMDAwLCAiYmFzZV9hcnJheVsxMzEsMTBdIjogMC4wMDAwMDAsICJiYXNlX2FycmF5WzEwNiw0XSI6IDAuMDAwMDAwLCAiYmFzZV9hcnJheVsxNDQsOV0iOiAwLjAwMDAwMCwgImJhc2VfYXJyYXlbMTQ2LDNdIjogMC4wMDAwMDAsICJiYXNlX2FycmF5Wzc4LDJdIjogMTAyMC4wMDAwMDAsICJiYXNlX2FycmF5Wzg3LDRdIjogMC4wMDAwMDAsICJiYXNlX2FycmF5WzQyLDEwXSI6IDAuMDAwMDAwLCAiYmFzZV9hcnJheVsxNzAsN10iOiAwLjAwMDAwMCwgInR1dF9za2lwcGVkIjogMC4wMDAwMDAsICJiYXNlX2FycmF5WzIwLDRdIjogMC4wMDAwMDAsICJiYXNlX2FycmF5WzY5LDEwXSI6IDAuMDAwMDAwLCAiYmFzZV9hcnJheVs2MCwzXSI6IDAuMDAwMDAwLCAiYmFzZV9hcnJheVs2Miw5XSI6IDAuMDAwMDAwLCAiYmFzZV9hcnJheVs1Niw3XSI6IDAuMDAwMDAwLCAiYmFzZV9hcnJheVsxMDgsMTBdIjogMC4wMDAwMDAsICJiYXNlX2FycmF5WzEwNSw4XSI6IDAuMDAwMDAwLCAiYmFzZV9hcnJheVsxMDcsMl0iOiAxMjQ1LjAwMDAwMCwgImJhc2VfYXJyYXlbODYsMl0iOiAxMDk1LjAwMDAwMCwgImFjaF9hcnJbMiw1XSI6IDAuMDAwMDAwLCAiYmFzZV9hcnJheVs3OSw0XSI6IDAuMDAwMDAwLCAiYmFzZV9hcnJheVs4NCw4XSI6IDAuMDAwMDAwLCAiYmFzZV9hcnJheVszOSwzXSI6IDAuMDAwMDAwLCAibHZsX3N0YXRzX2FyclsxMywwXSI6IDAuMDAwMDAwLCAiYmFzZV9hcnJheVsyMSwyXSI6IDU3MC4wMDAwMDAsICJsdmxfc3RhdHNfYXJyWzMsMF0iOiAwLjAwMDAwMCwgImJhc2VfYXJyYXlbMjMsOF0iOiAwLjAwMDAwMCwgImJhc2VfYXJyYXlbMTI5LDddIjogMC4wMDAwMDAsICJiYXNlX2FycmF5WzEyMywxMF0iOiAwLjAwMDAwMCwgImJhc2VfYXJyYXlbMTgxLDEwXSI6IDAuMDAwMDAwLCAiYmFzZV9hcnJheVsyNCwyXSI6IDY0NS4wMDAwMDAsICJsdmxfc3RhdHNfYXJyWzYsMF0iOiAwLjAwMDAwMCwgImJhc2VfYXJyYXlbMjYsOF0iOiAwLjAwMDAwMCwgImx2bF9zdGF0c19hcnJbMTYsMF0iOiAwLjAwMDAwMCwgImJhc2VfYXJyYXlbOTksOV0iOiAwLjAwMDAwMCwgImx2bF9zdGF0c19hcnJbMjAsNF0iOiAwLjAwMDAwMCwgImJhc2VfYXJyYXlbNTAsMTBdIjogMC4wMDAwMDAsICJiYXNlX2FycmF5WzExOCw5XSI6IDAuMDAwMDAwLCAiYmFzZV9hcnJheVsxMDAsOF0iOiAwLjAwMDAwMCwgImJhc2VfYXJyYXlbMTAyLDJdIjogMTE3MC4wMDAwMDAsICJiYXNlX2FycmF5WzgzLDJdIjogMTA5NS4wMDAwMDAsICJiYXNlX2FycmF5WzgxLDhdIjogMC4wMDAwMDAsICJnZWFyX2Fycls1LDNdIjogMC4wMDAwMDAsICJiYXNlX2FycmF5WzkxLDNdIjogMC4wMDAwMDAsICJiYXNlX2FycmF5WzkzLDldIjogMC4wMDAwMDAsICJiYXNlX2FycmF5WzEyNiw3XSI6IDAuMDAwMDAwLCAiYmFzZV9hcnJheVsxMTIsOV0iOiAwLjAwMDAwMCwgImJhc2VfYXJyYXlbMTEwLDNdIjogMC4wMDAwMDAsICJnb2xkX25vb2JbMTUsMF0iOiA3ODAuMDAwMDAwLCAiYmFzZV9hcnJheVsxNTAsNF0iOiAwLjAwMDAwMCwgImJhc2VfYXJyYXlbMTksMTBdIjogMC4wMDAwMDAsICJiYXNlX2FycmF5WzkwLDEwXSI6IDAuMDAwMDAwLCAiYmFzZV9hcnJheVsxMDgsMl0iOiAxMjQ1LjAwMDAwMCwgImJhc2VfYXJyYXlbMzIsMTBdIjogMC4wMDAwMDAsICJiYXNlX2FycmF5WzM2LDNdIjogMC4wMDAwMDAsICJiYXNlX2FycmF5WzM0LDldIjogMC4wMDAwMDAsICJiYXNlX2FycmF5WzE4MSw3XSI6IDAuMDAwMDAwLCAiYmFzZV9hcnJheVs4OSwyXSI6IDEwOTUuMDAwMDAwLCAiYmFzZV9hcnJheVs3Niw0XSI6IDAuMDAwMDAwLCAiYmFzZV9hcnJheVsxNDEsMTBdIjogMC4wMDAwMDAsICJiYXNlX2FycmF5WzMzLDNdIjogMC4wMDAwMDAsICJiYXNlX2FycmF5WzMxLDldIjogMC4wMDAwMDAsICJiYXNlX2FycmF5WzE4NCw3XSI6IDAuMDAwMDAwLCAiYmFzZV9hcnJheVs3Myw0XSI6IDAuMDAwMDAwLCAiYmFzZV9hcnJheVs5NCwzXSI6IDAuMDAwMDAwLCAiYmFzZV9hcnJheVs5Niw5XSI6IDAuMDAwMDAwLCAiYmFzZV9hcnJheVsxMjMsN10iOiAwLjAwMDAwMCwgImdlYXJfYXJyWzAsM10iOi
I/yoyo (28181): New cloud save system onPostExecute called with status0
I/yoyo (28181): ShowMessage("
I/yoyo (28181): ___________________________________________
I/yoyo (28181): ############################################################################################
I/yoyo (28181): ERROR in
I/yoyo (28181): action number 1
I/yoyo (28181): of Async Event: Cloud
I/yoyo (28181): for object controller:
I/yoyo (28181):
I/yoyo (28181): Data structure with index does not exist.
I/yoyo (28181): at gml_Script_scr_save_read (line 118) - music_on = ds_map_find_value(loaded_map, "music_on");
I/yoyo (28181): ############################################################################################
I/yoyo (28181): --------------------------------------------------------------------------------------------
I/yoyo (28181): stack frame is
I/yoyo (28181): gml_Script_scr_save_read (line 118)
I/yoyo (28181): called from - gml_Object_controller_WebCloudEvent_1 (line 17) - scr_save_read();
I/yoyo (28181): ")

The only thing that seems to be different in the recovered string and the saved string is the front-end tag "snapshot" or in the case of the recovery "data:". For lack of a better plan, I tried adding a string delete command to remove this from the front of the recovered string before saving to the file for unpacking. It looked like this, tried with 9 and 5 as the last value (5 shown) to see if removing the text from the start of the string helped.
Code:
if ds_map_find_value(async_load, "status") == 0
        {
            var recovered_data = ds_map_find_value(async_load, "resultString");
            string_delete(recovered_data, 0, 5);
            save_file_index = file_text_open_write("NN.sav");
            file_text_write_string(save_file_index,recovered_data);
            file_text_close(save_file_index);
            scr_save_read();
Unsurprisingly, this didn't help, but hopefully this gives you insight into my thinking and maybe makes it obvious how it's flawed??

Thanks again for the help!
 
H

Howard Lehr

Guest
Thanks! Looking forward to hearing from you. You mean the "conversations" system, right?
 

Qual

Member
I've something working on android too, but I can't get any callback for pushing data to google cloud.
So I can't tell the user if the push was succesfull or not.

Retreiving data however seems to send correclty a callback wich you can use. but the data in description is totally missleading regarding the documentation and Yoyogames seems to not be concerned about this issue since it was discovered.

:/
 
Hi.
I have got it working correctly, however, there are two things that I would like to confirm:

1. The only thing that fires the Cloud event seems to be cloud_synchronise(); -- committing data will NOT fire a callback, as also stated above. (This looks like a bug, or even an unimplemented call in the JNI library for the runner)
2. On sync, the data is NOT present under the "result" key (also stated above). It is held under the "description" key, the description itself seemingly either never being submitted, or just being lost when the return is done using the wrong keys.

This seems to be a trend regarding Android functionality in the runner. I am referring to the issue of passing the wrong strings as arguments / keys in a hash map. There is currently a similar issue in the HTTP module on Android, where the payload is never being sent, instead just sending out a "null".

They are either reading the arguments in inline assembly or someone is really, really clumsy.
 
Top