licensing.verify - getting an error type "network" back?

Why would Corona licensing.verify (to Google) be returning me an error type of “network”, and how would I fix / fault find this?

 

Notes:

* code for my test android app I’m using to try to get licensing work & the output is below

* I am testing via being tethered from my Android device to my iPhone for network connectivity

 

Q1 - Main question is above, but as an aside:

 

Q2 - Does the error type of “network” come from Google (indicating they did receive the verify request), or is it in fact just a response from the Corona isVerified code after a timeout (in which case the request never got to Google)???

 

Q3 - why do I see the event contents when I use my “dump” routine, but direct access to the event attributes (e.g. like “event.isVerified”) don’t return anything?

 

Q4 -  I note I get a “WARNING: licensing.init() was already called for google.” after calling init on my device, even after I stopped the test corona program I may then restarted? not an issue I assume?

 

 

OUTPUT

V/Corona &nbsp;(20681): \> Class.forName: network.LuaLoader V/Corona &nbsp;(20681): \< Class.forName: network.LuaLoader V/Corona &nbsp;(20681): Loading via reflection: network.LuaLoader V/Corona &nbsp;(20681): \> Class.forName: CoronaProvider.licensing.google.LuaLoader V/Corona &nbsp;(20681): \< Class.forName: CoronaProvider.licensing.google.LuaLoader V/Corona &nbsp;(20681): Loading via reflection: CoronaProvider.licensing.google.LuaLoader I/Corona &nbsp;(20681): WARNING: licensing.init() was already called for google. I/Corona &nbsp;(20681): . I/Corona &nbsp;(20681): . I/Corona &nbsp;(20681):&nbsp; I/Corona &nbsp;(20681): Called licensing.verify I/Corona &nbsp;(20681): . I/Corona &nbsp;(20681): RESPONSE RECEIVED!!! I/Corona &nbsp;(20681): DUMP OF EVENT: &nbsp; &nbsp;isError = &nbsp;&nbsp;&nbsp;&nbsp;true&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;boolean I/Corona &nbsp;(20681): DUMP OF EVENT: &nbsp; &nbsp;isVerified = &nbsp;&nbsp;&nbsp;&nbsp;false&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;boolean I/Corona &nbsp;(20681): DUMP OF EVENT: &nbsp; &nbsp;name = &nbsp;&nbsp;&nbsp;&nbsp;licensing&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string I/Corona &nbsp;(20681): DUMP OF EVENT: &nbsp; &nbsp;errorType = &nbsp;&nbsp;&nbsp;&nbsp;network&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string I/Corona &nbsp;(20681): DUMP OF EVENT: &nbsp; &nbsp;provider = &nbsp;&nbsp;&nbsp;&nbsp;google&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string I/Corona &nbsp;(20681): DUMP OF EVENT: &nbsp; &nbsp;expiration = &nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;number I/Corona &nbsp;(20681): DUMP OF EVENT: &nbsp; &nbsp;expansionFiles = &nbsp;&nbsp;&nbsp;&nbsp;table: 0x30b720&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;table I/Corona &nbsp;(20681): DUMP OF EVENT: &nbsp; &nbsp;response = &nbsp;&nbsp;&nbsp;&nbsp;Error contacting server&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string I/Corona &nbsp;(20681): isVerified =&nbsp; I/Corona &nbsp;(20681): networkError =&nbsp; I/Corona &nbsp;(20681): isVerified:NIL I/Corona &nbsp;(20681): address:NIL I/Corona &nbsp;(20681): name:NIL I/Corona &nbsp;(20681): provider:NIL I/Corona &nbsp;(20681): isError:NIL I/Corona &nbsp;(20681): errorType:NIL I/Corona &nbsp;(20681): response:NIL &nbsp;

 

CODE

local widget = require( "widget" ) display.setStatusBar( display.HiddenStatusBar ) -- Status Text local text = display.newText("About to Call Google Play", 0, 0, display.contentWidth, display.contentHeight, native.systemFont, 16 ) text:setTextColor(255, 0, 0) function updateDisplay(newText) &nbsp;&nbsp;&nbsp;&nbsp;text.text = text.text .. newText &nbsp;&nbsp;&nbsp;&nbsp;print(newText) end -- debug help - to print out table contents function dump(path,t,depth) &nbsp;&nbsp;&nbsp;&nbsp;-- pairs loop &nbsp;&nbsp;&nbsp;&nbsp;for k,v in pairs(t) do &nbsp;&nbsp;&nbsp;&nbsp; print(path..k..' = ', v, " &nbsp; &nbsp;", type(v)) &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;if (type(v) == "table") then &nbsp;&nbsp;&nbsp;&nbsp; &nbsp; if depth \<= 0 then return end &nbsp;&nbsp;&nbsp;&nbsp; &nbsp; dump(path..k..'.',v,depth-1) &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;end &nbsp;&nbsp;&nbsp;&nbsp;end end local function licensingListener( event ) &nbsp;&nbsp;&nbsp;&nbsp;updateDisplay("RESPONSE RECEIVED!!!") &nbsp;&nbsp;&nbsp;&nbsp;dump("DUMP OF EVENT: &nbsp; &nbsp;", event, 3) &nbsp;&nbsp;&nbsp;&nbsp;local verified = event.isVerified &nbsp;&nbsp;&nbsp;&nbsp;local networkError = (event.errorType == "network") &nbsp;&nbsp;&nbsp;&nbsp;updateDisplay("isVerified = ", isVerified) &nbsp;&nbsp;&nbsp;&nbsp;updateDisplay("networkError = ", networkError) &nbsp;&nbsp;&nbsp;&nbsp;-- print all states out &nbsp;&nbsp;&nbsp;&nbsp;local keysArray={"isVerified", "address", "name", "provider", "isError", "errorType", "response"} &nbsp;&nbsp;&nbsp;&nbsp;local str = "" &nbsp;&nbsp;&nbsp;&nbsp;for i,keyToUse in ipairs(keysArray) do &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local valueStr&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if keysArray[keyToUse] then &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;valueStr = tostring(keysArray[keyToUse]) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;valueStr = "NIL" &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;str = str .. keyToUse .. ":" .. valueStr .. "\n" &nbsp;&nbsp;&nbsp;&nbsp;end &nbsp;&nbsp;&nbsp;&nbsp;updateDisplay(str) end -- Call Google&nbsp; local licensing = require( "licensing" ) licensing.init( "google" ) -- Status Indicator Updating timer.performWithDelay( &nbsp;&nbsp;&nbsp;&nbsp;2000,&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;function(event) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;updateDisplay(".") &nbsp;&nbsp;&nbsp;&nbsp;end, &nbsp;&nbsp;&nbsp;&nbsp;0 ) -- Button to Initiate local myButton = widget.newButton { &nbsp; &nbsp; left = 10, &nbsp; &nbsp; top = display.contentHeight \* 0.8, &nbsp; &nbsp; width = display.contentWidth - 20, &nbsp; &nbsp; height = display.contentHeight \* 0.2, &nbsp; &nbsp; id = "button\_1", &nbsp; &nbsp; label = "Push to Initiate Verify", &nbsp; &nbsp; onRelease = function(event) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;licensing.verify( licensingListener ) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;updateDisplay("\nCalled licensing.verify") &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;end } &nbsp;

 

A1 In your case the response string is “Error contacting server” which *could* mean it wasn’t able to contact Google’s servers for validation. I say “could” because it’s possible to set that Test Response code in the Google dashboard. What have you set it to? (The “License Test Response” is found in the settings page under the text box where you specified your google test accounts). Otherwise I’m not sure why. Maybe it’s some problem with the tethering with your iPhone.

A2: It depends on the response string. For example if you turn off WiFi I would assume you’d get a “network” error even if it didn’t contact Google.

A3: For “isVerified”: your local variable name is called “verified” and you’re trying to display “isVerified”. For “networkError” I’m not sure…can’t see a reason why, but it usually means a scoping problem…

A4: Nothing to worry about. I get the same warning in my logs. Not sure why, but it doesn’t seem to affect anything.

Update:

* Have had the google play dashboard response set to RESPOND_NORMALLY so this should have been ok I think

* Found the typo in my test code so fixed this (this doesn’t change the test results, was just the printout of values)

* So I have now had some “isVerified = true” responses, however they’re not consistent.  I think will have to wait until I can get back to normal internet and off tethering perhaps

* Noted Corona does give you a listener response when there is a connection error, tested this.  So you should always get a response then I think.

* Noted that if you “kill” your internet connection and do another “licensing.verify” you get isVerified=true, so your app caches the value.  However if you kill/restart the app this cache is cleared.

* Overall things may be fine, hoping it’s just some inconsistency with my connection 

Wondering whether the final check in our code should be:

i)  if not event.isVerified, or

 

ii) if (not event.isVerified) and (not event.errorType == “network”)

I have a feeling the first would cover things off?

My update test code for what it’s worth:

local widget = require( "widget" ) display.setStatusBar( display.HiddenStatusBar ) -- Status Text local text = display.newText("About to Call Google Play", 0, 0, display.contentWidth, display.contentHeight, native.systemFont, 20 ) text:setTextColor(255, 0, 0) function updateDisplay(newText) &nbsp;&nbsp;&nbsp;&nbsp;text.text = text.text .. newText &nbsp;&nbsp;&nbsp;&nbsp;print(newText) end local function licensingListener( event ) &nbsp;&nbsp;&nbsp;&nbsp;updateDisplay("licensingListener - start") &nbsp;&nbsp;&nbsp;&nbsp;updateDisplay("\n") &nbsp;&nbsp;&nbsp;&nbsp;for k,item in pairs(event) do &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;updateDisplay(k .. " = " .. tostring(item) .. "\n") &nbsp;&nbsp;&nbsp;&nbsp;end end -- Call Google&nbsp; local licensing = require( "licensing" ) licensing.init( "google" ) -- Status Indicator Updating timer.performWithDelay( &nbsp;&nbsp;&nbsp;&nbsp;2000,&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;function(event) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;updateDisplay(".") &nbsp;&nbsp;&nbsp;&nbsp;end, &nbsp;&nbsp;&nbsp;&nbsp;0 ) -- Button to Initiate local myButton = widget.newButton { &nbsp; &nbsp; left = 10, &nbsp; &nbsp; top = display.contentHeight \* 0.8, &nbsp; &nbsp; width = display.contentWidth - 20, &nbsp; &nbsp; height = display.contentHeight \* 0.2, &nbsp; &nbsp; id = "button\_1", &nbsp; &nbsp; label = "Push to Initiate Verify", &nbsp; &nbsp; onRelease = function(event) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;licensing.verify( licensingListener ) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;updateDisplay("\nCalled licensing.verify") &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;end } &nbsp;

I’d opt for option ii). That’s what I use.

The reason being that if Google have some problems with their servers then your app would think it’s not verified with option i).

With option ii) it would gracefully allow the app to run even though it’s not officially verified due to some network error.

See your point. But why in that case then in fact would you go with

" if (not event.isVerified) and (not event.isError) then"

Good question! 

At the moment I guess that might be even better  :slight_smile:

Actually would be nice to know how Corona labs mapped the Android error codes back to what is in their API. I note their codes are:

http://developer.android.com/google/play/licensing/licensing-reference.html

I think that one of the values in the event table returned by Corona did change.

You can experiment by changing the Test response in the Google dashboard, and check the returned event table.

Back to non-tethered network & things are working consistently now  :blink:

I’m going to run with “if (not event.isVerified) and (not event.isError) then”  as the check then. 

Some testing outputs if anyone is interested.  In each case I changed the response on the Google Play test page and then copied out what my Corona app responded with.

-------- NO ERRORS - VERIFIED PASSED -------- LICENSED I/Corona &nbsp;( 3667): isVerified = true I/Corona &nbsp;( 3667): name = licensing I/Corona &nbsp;( 3667): provider = google I/Corona &nbsp;( 3667): expiration = 1379227389226 I/Corona &nbsp;( 3667): expansionFiles = table: 0x293018 I/Corona &nbsp;( 3667): response = Licensed LICENSED\_OLD\_KEY I/Corona &nbsp;( 3667): isVerified = true I/Corona &nbsp;( 3667): name = licensing I/Corona &nbsp;( 3667): provider = google I/Corona &nbsp;( 3667): expiration = 1379227446103 I/Corona &nbsp;( 3667): expansionFiles = table: 0x34a240 I/Corona &nbsp;( 3667): response = Licensed -------- NO ERRORS - VERIFIED FAILED -------- NOT\_LICENSED I/Corona &nbsp;( 3667): isVerified = false I/Corona &nbsp;( 3667): name = licensing I/Corona &nbsp;( 3667): provider = google I/Corona &nbsp;( 3667): expiration = 0 I/Corona &nbsp;( 3667): expansionFiles = table: 0x365e68 I/Corona &nbsp;( 3667): response = Not licensed ---------- ERRORS: &nbsp;Error Type = CONFIGURATION -------- ERROR\_NOT\_MARKET\_MANAGED I/Corona &nbsp;( 3667): isError = true I/Corona &nbsp;( 3667): isVerified = false I/Corona &nbsp;( 3667): name = licensing I/Corona &nbsp;( 3667): errorType = configuration I/Corona &nbsp;( 3667): provider = google I/Corona &nbsp;( 3667): expiration = 1379227025349 I/Corona &nbsp;( 3667): expansionFiles = table: 0x13c620 I/Corona &nbsp;( 3667): response = Not market managed ERROR\_INVALID\_PACKAGE\_NAME I/Corona &nbsp;( 3667): isError = true I/Corona &nbsp;( 3667): isVerified = false I/Corona &nbsp;( 3667): name = licensing I/Corona &nbsp;( 3667): errorType = configuration I/Corona &nbsp;( 3667): provider = google I/Corona &nbsp;( 3667): expiration = 1379227025349 I/Corona &nbsp;( 3667): expansionFiles = table: 0x2a2b50 I/Corona &nbsp;( 3667): response = Invalid package name ERROR\_NON\_MATCHING\_UID I/Corona &nbsp;( 3667): isError = true I/Corona &nbsp;( 3667): isVerified = false I/Corona &nbsp;( 3667): name = licensing I/Corona &nbsp;( 3667): errorType = configuration I/Corona &nbsp;( 3667): provider = google I/Corona &nbsp;( 3667): expiration = 1379227025349 I/Corona &nbsp;( 3667): expansionFiles = table: 0x29b8e8 I/Corona &nbsp;( 3667): response = Non matching UID ---------- ERRORS: &nbsp;Error Type = NETWORK -------- ERROR - SERVER FAILURE I/Corona &nbsp;( 3667):&nbsp; I/Corona &nbsp;( 3667): isError = true I/Corona &nbsp;( 3667): isVerified = false I/Corona &nbsp;( 3667): name = licensing I/Corona &nbsp;( 3667): errorType = network I/Corona &nbsp;( 3667): provider = google I/Corona &nbsp;( 3667): expiration = 1379227025349 I/Corona &nbsp;( 3667): expansionFiles = table: 0x3281b0 I/Corona &nbsp;( 3667): response = Error contacting server ERROR\_CONTACTING\_SERVER I/Corona &nbsp;( 3667): isError = true I/Corona &nbsp;( 3667): isVerified = false I/Corona &nbsp;( 3667): name = licensing I/Corona &nbsp;( 3667): errorType = network I/Corona &nbsp;( 3667): provider = google I/Corona &nbsp;( 3667): expiration = 1379227025349 I/Corona &nbsp;( 3667): expansionFiles = table: 0x357ab8 I/Corona &nbsp;( 3667): response = Error contacting server &nbsp;

A1 In your case the response string is “Error contacting server” which *could* mean it wasn’t able to contact Google’s servers for validation. I say “could” because it’s possible to set that Test Response code in the Google dashboard. What have you set it to? (The “License Test Response” is found in the settings page under the text box where you specified your google test accounts). Otherwise I’m not sure why. Maybe it’s some problem with the tethering with your iPhone.

A2: It depends on the response string. For example if you turn off WiFi I would assume you’d get a “network” error even if it didn’t contact Google.

A3: For “isVerified”: your local variable name is called “verified” and you’re trying to display “isVerified”. For “networkError” I’m not sure…can’t see a reason why, but it usually means a scoping problem…

A4: Nothing to worry about. I get the same warning in my logs. Not sure why, but it doesn’t seem to affect anything.

Update:

* Have had the google play dashboard response set to RESPOND_NORMALLY so this should have been ok I think

* Found the typo in my test code so fixed this (this doesn’t change the test results, was just the printout of values)

* So I have now had some “isVerified = true” responses, however they’re not consistent.  I think will have to wait until I can get back to normal internet and off tethering perhaps

* Noted Corona does give you a listener response when there is a connection error, tested this.  So you should always get a response then I think.

* Noted that if you “kill” your internet connection and do another “licensing.verify” you get isVerified=true, so your app caches the value.  However if you kill/restart the app this cache is cleared.

* Overall things may be fine, hoping it’s just some inconsistency with my connection 

Wondering whether the final check in our code should be:

i)  if not event.isVerified, or

 

ii) if (not event.isVerified) and (not event.errorType == “network”)

I have a feeling the first would cover things off?

My update test code for what it’s worth:

local widget = require( "widget" ) display.setStatusBar( display.HiddenStatusBar ) -- Status Text local text = display.newText("About to Call Google Play", 0, 0, display.contentWidth, display.contentHeight, native.systemFont, 20 ) text:setTextColor(255, 0, 0) function updateDisplay(newText) &nbsp;&nbsp;&nbsp;&nbsp;text.text = text.text .. newText &nbsp;&nbsp;&nbsp;&nbsp;print(newText) end local function licensingListener( event ) &nbsp;&nbsp;&nbsp;&nbsp;updateDisplay("licensingListener - start") &nbsp;&nbsp;&nbsp;&nbsp;updateDisplay("\n") &nbsp;&nbsp;&nbsp;&nbsp;for k,item in pairs(event) do &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;updateDisplay(k .. " = " .. tostring(item) .. "\n") &nbsp;&nbsp;&nbsp;&nbsp;end end -- Call Google&nbsp; local licensing = require( "licensing" ) licensing.init( "google" ) -- Status Indicator Updating timer.performWithDelay( &nbsp;&nbsp;&nbsp;&nbsp;2000,&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;function(event) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;updateDisplay(".") &nbsp;&nbsp;&nbsp;&nbsp;end, &nbsp;&nbsp;&nbsp;&nbsp;0 ) -- Button to Initiate local myButton = widget.newButton { &nbsp; &nbsp; left = 10, &nbsp; &nbsp; top = display.contentHeight \* 0.8, &nbsp; &nbsp; width = display.contentWidth - 20, &nbsp; &nbsp; height = display.contentHeight \* 0.2, &nbsp; &nbsp; id = "button\_1", &nbsp; &nbsp; label = "Push to Initiate Verify", &nbsp; &nbsp; onRelease = function(event) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;licensing.verify( licensingListener ) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;updateDisplay("\nCalled licensing.verify") &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;end } &nbsp;

I’d opt for option ii). That’s what I use.

The reason being that if Google have some problems with their servers then your app would think it’s not verified with option i).

With option ii) it would gracefully allow the app to run even though it’s not officially verified due to some network error.

See your point. But why in that case then in fact would you go with

" if (not event.isVerified) and (not event.isError) then"

Good question! 

At the moment I guess that might be even better  :slight_smile:

Actually would be nice to know how Corona labs mapped the Android error codes back to what is in their API. I note their codes are:

http://developer.android.com/google/play/licensing/licensing-reference.html

I think that one of the values in the event table returned by Corona did change.

You can experiment by changing the Test response in the Google dashboard, and check the returned event table.

Back to non-tethered network & things are working consistently now  :blink:

I’m going to run with “if (not event.isVerified) and (not event.isError) then”  as the check then. 

Some testing outputs if anyone is interested.  In each case I changed the response on the Google Play test page and then copied out what my Corona app responded with.

-------- NO ERRORS - VERIFIED PASSED -------- LICENSED I/Corona &nbsp;( 3667): isVerified = true I/Corona &nbsp;( 3667): name = licensing I/Corona &nbsp;( 3667): provider = google I/Corona &nbsp;( 3667): expiration = 1379227389226 I/Corona &nbsp;( 3667): expansionFiles = table: 0x293018 I/Corona &nbsp;( 3667): response = Licensed LICENSED\_OLD\_KEY I/Corona &nbsp;( 3667): isVerified = true I/Corona &nbsp;( 3667): name = licensing I/Corona &nbsp;( 3667): provider = google I/Corona &nbsp;( 3667): expiration = 1379227446103 I/Corona &nbsp;( 3667): expansionFiles = table: 0x34a240 I/Corona &nbsp;( 3667): response = Licensed -------- NO ERRORS - VERIFIED FAILED -------- NOT\_LICENSED I/Corona &nbsp;( 3667): isVerified = false I/Corona &nbsp;( 3667): name = licensing I/Corona &nbsp;( 3667): provider = google I/Corona &nbsp;( 3667): expiration = 0 I/Corona &nbsp;( 3667): expansionFiles = table: 0x365e68 I/Corona &nbsp;( 3667): response = Not licensed ---------- ERRORS: &nbsp;Error Type = CONFIGURATION -------- ERROR\_NOT\_MARKET\_MANAGED I/Corona &nbsp;( 3667): isError = true I/Corona &nbsp;( 3667): isVerified = false I/Corona &nbsp;( 3667): name = licensing I/Corona &nbsp;( 3667): errorType = configuration I/Corona &nbsp;( 3667): provider = google I/Corona &nbsp;( 3667): expiration = 1379227025349 I/Corona &nbsp;( 3667): expansionFiles = table: 0x13c620 I/Corona &nbsp;( 3667): response = Not market managed ERROR\_INVALID\_PACKAGE\_NAME I/Corona &nbsp;( 3667): isError = true I/Corona &nbsp;( 3667): isVerified = false I/Corona &nbsp;( 3667): name = licensing I/Corona &nbsp;( 3667): errorType = configuration I/Corona &nbsp;( 3667): provider = google I/Corona &nbsp;( 3667): expiration = 1379227025349 I/Corona &nbsp;( 3667): expansionFiles = table: 0x2a2b50 I/Corona &nbsp;( 3667): response = Invalid package name ERROR\_NON\_MATCHING\_UID I/Corona &nbsp;( 3667): isError = true I/Corona &nbsp;( 3667): isVerified = false I/Corona &nbsp;( 3667): name = licensing I/Corona &nbsp;( 3667): errorType = configuration I/Corona &nbsp;( 3667): provider = google I/Corona &nbsp;( 3667): expiration = 1379227025349 I/Corona &nbsp;( 3667): expansionFiles = table: 0x29b8e8 I/Corona &nbsp;( 3667): response = Non matching UID ---------- ERRORS: &nbsp;Error Type = NETWORK -------- ERROR - SERVER FAILURE I/Corona &nbsp;( 3667):&nbsp; I/Corona &nbsp;( 3667): isError = true I/Corona &nbsp;( 3667): isVerified = false I/Corona &nbsp;( 3667): name = licensing I/Corona &nbsp;( 3667): errorType = network I/Corona &nbsp;( 3667): provider = google I/Corona &nbsp;( 3667): expiration = 1379227025349 I/Corona &nbsp;( 3667): expansionFiles = table: 0x3281b0 I/Corona &nbsp;( 3667): response = Error contacting server ERROR\_CONTACTING\_SERVER I/Corona &nbsp;( 3667): isError = true I/Corona &nbsp;( 3667): isVerified = false I/Corona &nbsp;( 3667): name = licensing I/Corona &nbsp;( 3667): errorType = network I/Corona &nbsp;( 3667): provider = google I/Corona &nbsp;( 3667): expiration = 1379227025349 I/Corona &nbsp;( 3667): expansionFiles = table: 0x357ab8 I/Corona &nbsp;( 3667): response = Error contacting server &nbsp;