Open GoogleCodeExporter opened 9 years ago
[deleted comment]
I'm experiencing the same issue, using Ruby and the subscription proxy. I'm
testing on my own computer and the local web server I'm testing with available
publically (tested with cellular connection from my phone), but I never see any
hits to the web server. I've checked the timeline objects returned and the
callback URL comes back as what I expect (the subscription proxy address and my
own address appended). I've been searching and scratching my head, but nothing
as of yet.
My code is available here: https://github.com/willjasen/dropcam-glass
Original comment by willja...@gmail.com
on 27 Apr 2014 at 7:26
[deleted comment]
Thanks for replying! It seems that the custom menu action does in fact work
using the Google Mirror API playground
(https://developers.google.com/glass/tools-downloads/playground) but NOT when
run from Google Glass (XE16.1.1).
Could this perhaps be a firmware bug? Please let me know if I can provide any
additional assets or resources.
Original comment by ibrahimk...@gmail.com
on 27 Apr 2014 at 8:10
Attachments:
I know that the Glass-Nest app (http://www.glass-nest.com) that I have uses
subscriptions and it is working okay for me, making me think it's less likely a
firmware bug and maybe more of something that I'm just missing, but everything
in my code and what is generated during runtime looks to be okay and I would
expect that an update would trigger something, even an error, but I never see
any of that.
Original comment by willja...@gmail.com
on 2 May 2014 at 9:36
I'm experiencing the same issue in XE16.2.
Finally, I found some errors in LOGCAT. (logs are following.)
That log says function
com.google.glass.sync.AttachmentManager.storePathToIdMapping rise assert at
sync to google. By this error, the update(user selected the menuitem) will
never sync to google server.
I remove attachment-image from 'TimelineItem', then the update was notified to
my server.
>insertTimelineItem($mirror_service, $new_timeline_item, "image/jpeg",
$im->getimageblob()); // will NEVER sync to google, and NOT notify to my server.
>insertTimelineItem($mirror_service, $new_timeline_item,null,null); // will
sync to google, and notify to my server.
That function 'storePathToIdMapping(path, remoteID)' has 2 params.
But 'path' is empty string at that case.
In this funciton, 'android/text/TextUtils;->isEmpty(Ljava/lang/CharSequence;)'
at AttachmentManager:327 and 'invoke-static {v3},
Lcom/google/glass/predicates/Assert;->assertFalse(Z)V', then the item never
sync.
I think this could be a firmware bug.
-----
05-06 01:03:34.577: I/MainTimelineView(688): New timeline database content
loaded; updating views.
05-06 01:03:34.640: I/SyncHelper(688): Requesting sync
[authority=com.google.glass.timeline, syncSource=DEVICE_TIMELINE,
extras=Bundle[{}]].
05-06 01:03:34.726: D/dalvikvm(811): GC_EXPLICIT freed 828K, 16% free
5859K/6904K, paused 16ms+9ms, total 141ms
05-06 01:03:34.749: I/MainTimelineView(688): New timeline database content
loaded; updating views.
05-06 01:03:34.796: I/TimelineSyncAdapter(811): Entering onPerformSync
[authority= com.google.glass.timeline, extras=Bundle[{sync_priority=0}]].
05-06 01:03:34.827: I/DownloadSyncHelper(811): Fetching unsynced items from
server.
05-06 01:03:34.858: I/DownloadSyncHelper(811): Requesting sync
[window=TimelineSyncWindow{startTime=1399305735227001, continuationToken=null}].
05-06 01:03:34.897: I/TimelineHelper(811): Getting unsynced items with sync
protocols: 0, 1
05-06 01:03:34.968: W/GLSUser(919): GoogleAccountDataService.getToken()
05-06 01:03:35.983: I/DownloadSyncHelper(811): Received items from server
[count=0].
05-06 01:03:36.077: W/TimelineSyncHandler(811): Exception waiting for timeline
upload to complete.
05-06 01:03:36.077: W/TimelineSyncHandler(811):
java.util.concurrent.ExecutionException: java.lang.IllegalStateException:
Expected condition to be false.
05-06 01:03:36.077: W/TimelineSyncHandler(811): at
java.util.concurrent.FutureTask.report(FutureTask.java:93)
05-06 01:03:36.077: W/TimelineSyncHandler(811): at
java.util.concurrent.FutureTask.get(FutureTask.java:163)
05-06 01:03:36.077: W/TimelineSyncHandler(811): at
com.google.glass.sync.TimelineSyncHandler.sync(TimelineSyncHandler.java:116)
05-06 01:03:36.077: W/TimelineSyncHandler(811): at
com.google.glass.sync.TimelineSyncAdapter.onPerformSync(TimelineSyncAdapter.java
:55)
05-06 01:03:36.077: W/TimelineSyncHandler(811): at
android.content.AbstractThreadedSyncAdapter$SyncThread.run(AbstractThreadedSyncA
dapter.java:259)
05-06 01:03:36.077: W/TimelineSyncHandler(811): Caused by:
java.lang.IllegalStateException: Expected condition to be false.
05-06 01:03:36.077: W/TimelineSyncHandler(811): at
com.google.glass.predicates.Assert.assertFalse(Assert.java:102)
05-06 01:03:36.077: W/TimelineSyncHandler(811): at
com.google.glass.sync.AttachmentManager.storePathToIdMapping(AttachmentManager.j
ava:327)
05-06 01:03:36.077: W/TimelineSyncHandler(811): at
com.google.glass.sync.UploadSyncHelper.addAttachments(UploadSyncHelper.java:440)
05-06 01:03:36.077: W/TimelineSyncHandler(811): at
com.google.glass.sync.UploadSyncHelper.syncItemToCloud(UploadSyncHelper.java:288
)
05-06 01:03:36.077: W/TimelineSyncHandler(811): at
com.google.glass.sync.UploadSyncHelper.syncNextUnsyncedItem(UploadSyncHelper.jav
a:831)
05-06 01:03:36.077: W/TimelineSyncHandler(811): at
com.google.glass.sync.UploadSyncHelper.sync(UploadSyncHelper.java:203)
05-06 01:03:36.077: W/TimelineSyncHandler(811): at
com.google.glass.sync.TimelineSyncHandler$1.call(TimelineSyncHandler.java:98)
05-06 01:03:36.077: W/TimelineSyncHandler(811): at
com.google.glass.sync.TimelineSyncHandler$1.call(TimelineSyncHandler.java:94)
05-06 01:03:36.077: W/TimelineSyncHandler(811): at
java.util.concurrent.FutureTask.run(FutureTask.java:237)
05-06 01:03:36.077: W/TimelineSyncHandler(811): at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
05-06 01:03:36.077: W/TimelineSyncHandler(811): at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
05-06 01:03:36.077: W/TimelineSyncHandler(811): at
java.lang.Thread.run(Thread.java:841)
05-06 01:03:36.077: W/FormattingLoggers(811): Last logging operation took a
long time (in ms): 71
Original comment by takuhiro...@gmail.com
on 5 May 2014 at 7:31
I changed my code so that the attachments and parameters with the timeline item
aren't executed, and I received a plain text card with the update menu as
expected, but still no hits to my testing web server.
Original comment by willja...@gmail.com
on 6 May 2014 at 8:46
I can confirm that this bug is still happening for me in XE17.
I am using the following to insert the timeline item in PHP:
insert_timeline_item($mirror_service, $new_timeline_item, null, null);
The server notification works fine from the Mirror API playground but not when
running on the device.
Original comment by ibrahimk...@gmail.com
on 8 May 2014 at 1:46
On Glass V2 running XE17.
insertTimelineItem($mirror_service, $new_timeline_item, "image/jpeg",
$im->getimageblob());
V
TimelineItem inserted.
V
Select CUSTOM menu.
V
No hit to my server...
But,
insertTimelineItem($mirror_service, $new_timeline_item, "image/jpeg",
$im->getimageblob());
V
TimelineItem inserted.
V
Select Built-in action(like SHARE) menu.
V
Shared.
V
Select CUSTOM menu at same TimelineItem that already shared.
V
Hit to my server!
Original comment by takuhiro...@gmail.com
on 9 May 2014 at 5:41
Not seeing this issue currently in XE17. To the original poster
ibrahimk...@gmail.com, your PHP is incorrect. You're using setPayload() on a
menu item and that's not the proper method (see the class definition in
Google_MirrorService within the Google API Client). A typical custom menu item
in PHP looks like:
// A custom menu item
$custom_menu_item = new Google_MenuItem();
$custom_menu_value = new Google_MenuValue();
$custom_menu_value->setDisplayName("Test CUSTOM");
$custom_menu_value->setIconUrl("https://something-somewhere/icon.png");
$custom_menu_item->setValues(array($custom_menu_value));
$custom_menu_item->setAction("CUSTOM");
$custom_menu_item->setId("issue491-test");
Attached image shows said code sending notification back to application through
an ngrok tunnel.
Original comment by justin.d...@gmail.com
on 12 May 2014 at 4:20
Attachments:
Justin, could this be working because you are using a local server instead of a
live server?
Still seeing this issue in XE17, but works fine in Mirror API Playground. I
have set up the subscription to ping an HTTPS url on a GoDaddy server. Below
is my Mirror API timeline code (PHP) and the resulting timeline item.
Google_TimelineItem Object
(
[__attachmentsType:protected] => Google_Attachment
[__attachmentsDataType:protected] => array
[attachments] =>
[bundleId] =>
[canonicalUrl] =>
[created] => 2014-05-13T05:00:05.967Z
[__creatorType:protected] => Google_Contact
[__creatorDataType:protected] =>
[creator] =>
[displayTime] =>
[etag] => 1399957205967
[html] =>
[htmlPages] =>
[id] => 40771318-14de-45d7-8a65-68570b999f2e
[inReplyTo] =>
[isBundleCover] =>
[isDeleted] =>
[isPinned] =>
[kind] => mirror#timelineItem
[__locationType:protected] => Google_Location
[__locationDataType:protected] =>
[location] =>
[__menuItemsType:protected] => Google_MenuItem
[__menuItemsDataType:protected] => array
[menuItems] => Array
(
[0] => Google_MenuItem Object
(
[action] => CUSTOM
[id] => Test-ID
[payload] => Test Payload
[removeWhenSelected] =>
[__valuesType:protected] => Google_MenuValue
[__valuesDataType:protected] => array
[values] => Array
(
[0] => Google_MenuValue Object
(
[displayName] => TEST
[iconUrl] => http://gpop-server.com/vip-membership/icon.png
[state] => DEFAULT
)
[1] => Google_MenuValue Object
(
[displayName] => Sending...
[iconUrl] => http://gpop-server.com/vip-membership/icon.png
[state] => PENDING
)
[2] => Google_MenuValue Object
(
[displayName] => Confirmed!
[iconUrl] => http://gpop-server.com/vip-membership/icon.png
[state] => CONFIRMED
)
)
)
)
[__notificationType:protected] => Google_NotificationConfig
[__notificationDataType:protected] =>
[notification] => Google_NotificationConfig Object
(
[deliveryTime] =>
[level] => DEFAULT
)
[pinScore] =>
[__recipientsType:protected] => Google_Contact
[__recipientsDataType:protected] => array
[recipients] =>
[selfLink] => https://www.googleapis.com/mirror/v1/timeline/40771318-14de-45d7-8a65-68570b999f2e
[sourceItemId] =>
[speakableText] =>
[speakableType] =>
[text] => Subscription Test
[title] =>
[updated] => 2014-05-13T05:00:05.967Z
)
$new_timeline_item = new Google_TimelineItem();
$notification = new Google_NotificationConfig();
$notification->setLevel("DEFAULT");
$new_timeline_item->setNotification($notification);
$menu_items = array();
$menu_item = new Google_MenuItem();
$menu_item->setAction("CUSTOM");
$menu_item->setPayload("Test Payload");
$custom_menu_value = new Google_MenuValue();
$custom_menu_value->setIconUrl('http://gpop-server.com/vip-membership/icon.png');
$custom_menu_value->setDisplayName("TEST");
$custom_menu_value->setState("DEFAULT");
$menu_item->setId('Test-ID');
$custom_menu_value_pending = new Google_MenuValue();
$custom_menu_value_pending->setDisplayName("Sending...");
$custom_menu_value_pending->setIconUrl('http://gpop-server.com/vip-membership/icon.png');
$custom_menu_value_pending->setState("PENDING");
$custom_menu_value_confirmed = new Google_MenuValue();
$custom_menu_value_confirmed->setDisplayName("Confirmed!");
$custom_menu_value_confirmed->setState("CONFIRMED");
$custom_menu_value_confirmed->setIconUrl('http://gpop-server.com/vip-membership/icon.png');
$menu_item->setValues(array($custom_menu_value,$custom_menu_value_pending, $custom_menu_value_confirmed));
array_push($menu_items, $menu_item);
$new_timeline_item->setMenuItems($menu_items);
$new_timeline_item->setText('Subscription Test');
$timeline = insert_timeline_item($mirror_service, $new_timeline_item, null, null);
Original comment by ibrahimk...@gmail.com
on 13 May 2014 at 5:05
It works now! No code changes needed, only a Glass reset. I've been having
issues with auto backup that Glass updates weren't fixing, so I did a factory
reset and that issue was fixed, so for kicks, I tried once again for a pingback
and I received one! Who knew..
Original comment by willja...@gmail.com
on 26 May 2014 at 8:22
Works as well for me - thank you Will for the suggestion!
Original comment by ibrahimk...@gmail.com
on 28 May 2014 at 9:59
Hi Guys
We are working on google glass apps with mirror api, native android and hybrid.
Since XE - 16 google update, we are not getting notifications on our php mirror
api apps which are totally dependent on menu actions, sharing with contact etc.
We are authorized and also subscribed
Original comment by sonamsin...@gmail.com
on 29 May 2014 at 12:46
Have you tried factory resetting Glass? Do you have code available somewhere
to review?
Original comment by willja...@gmail.com
on 29 May 2014 at 2:59
Hey all - still having this issue but made a major discovery today.
After doing a factory reset on Glass, I was able to receive notifications to my
server using the following timeline insert:
$timeline = insert_timeline_item($mirror_service, $new_timeline_item, null,
null);
However, I noticed that if you use the image/jpeg method below, it will not
send notifications to the server.
$timeline = insert_timeline_item($mirror_service, $new_timeline_item,
'image/jpeg',
file_get_contents('http://cdn.shopify.com/s/files/1/0251/6611/files/Starter.jpg?
3294'));
Also, most importantly... the above 'image/jpeg' implementation causes all
future timeline subscription notifications (even when properly implemented) to
hang up and will only work again once a factory reset is done.
Hope this is helpful.
Original comment by ibrahimk...@gmail.com
on 29 May 2014 at 10:06
I notice the same problem with updating a subscription if an image is sent with
the timeline item. I'm able to delete the subscription so that I don't have to
perform a factory reset, but still unfortunate.
There has to be some way to do it; for example, Twitter notifications have a
background image and updates still work for those cards, so we're missing
something.
Original comment by willja...@gmail.com
on 30 May 2014 at 2:26
Getting the same problem here. The playground (
https://developers.google.com/glass/tools-downloads/playground ) lets me click
on the custom action on the card fine and the server's notify end point is
called.
If I do the same on the Glass runing XE 18.11, the server never gets called,
and I see a crash in the logs:
I/TimelineItemDatabaseHelper( 2096): Getting unsynced items with sync
protocols: 0, 1
I/TimelineItemDatabaseHelper( 2096): Prioritizing
7648b7fc-64cf-4311-81cc-68a36f3210e9 due to shareCount=1
W/AwContents( 2069): nativeOnDraw failed; clearing to background color.
I/MainTimelineView( 2069): New timeline database content loaded; updating views.
I/MainTimelineView( 2069): New timeline database content loaded; updating views.
I/EyeGestureService( 1829): Retrieving persistent state of detection for
gesture DON.
I/DownloadSyncHelper( 2096): Received items from server [count=0].
W/TimelineSyncHandler( 2096): Exception waiting for timeline upload to complete.
W/TimelineSyncHandler( 2096): java.util.concurrent.ExecutionException:
java.lang.IllegalStateException: Expected condition to be false.
W/TimelineSyncHandler( 2096): at
java.util.concurrent.FutureTask.report(FutureTask.java:93)
W/TimelineSyncHandler( 2096): at
java.util.concurrent.FutureTask.get(FutureTask.java:163)
W/TimelineSyncHandler( 2096): at
com.google.glass.sync.TimelineSyncHandler.sync(TimelineSyncHandler.java:145)
W/TimelineSyncHandler( 2096): at
com.google.glass.sync.TimelineSyncAdapter.onPerformSync(TimelineSyncAdapter.java
:57)
W/TimelineSyncHandler( 2096): at
android.content.AbstractThreadedSyncAdapter$SyncThread.run(AbstractThreadedSyncA
dapter.java:259)
W/TimelineSyncHandler( 2096): Caused by: java.lang.IllegalStateException:
Expected condition to be false.
W/TimelineSyncHandler( 2096): at
com.google.glass.predicates.Assert.assertFalse(Assert.java:102)
W/TimelineSyncHandler( 2096): at
com.google.glass.sync.AttachmentManager.storePathToIdMapping(AttachmentManager.j
ava:329)
W/TimelineSyncHandler( 2096): at
com.google.glass.sync.UploadSyncHelper.addAttachments(UploadSyncHelper.java:432)
W/TimelineSyncHandler( 2096): at
com.google.glass.sync.UploadSyncHelper.syncItemToCloud(UploadSyncHelper.java:279
)
W/TimelineSyncHandler( 2096): at
com.google.glass.sync.UploadSyncHelper.syncNextUnsyncedItem(UploadSyncHelper.jav
a:823)
W/TimelineSyncHandler( 2096): at
com.google.glass.sync.UploadSyncHelper.sync(UploadSyncHelper.java:194)
W/TimelineSyncHandler( 2096): at
com.google.glass.sync.TimelineSyncHandler$1.call(TimelineSyncHandler.java:127)
W/TimelineSyncHandler( 2096): at
com.google.glass.sync.TimelineSyncHandler$1.call(TimelineSyncHandler.java:123)
W/TimelineSyncHandler( 2096): at
java.util.concurrent.FutureTask.run(FutureTask.java:237)
W/TimelineSyncHandler( 2096): at
com.google.glass.async.AsyncThreadExecutorManager$2$1.run(AsyncThreadExecutorMan
ager.java:63)
W/TimelineSyncHandler( 2096): at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
W/TimelineSyncHandler( 2096): at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
W/TimelineSyncHandler( 2096): at java.lang.Thread.run(Thread.java:841)
I/chromium( 2069): [INFO:async_pixel_transfer_manager_android.cc(56)] Async
pixel transfers not supported
W/BluetoothAdapter( 2014): getBluetoothService() called with no
BluetoothManagerCallback
D/BTIF_SOCK( 2161): service_uuid: 0000111f-0000-1000-8000-00805f9b34fb
D/BluetoothSocket( 2014): connect(), SocketState: INIT, mPfd:
{ParcelFileDescriptor: FileDescriptor[75]}
I guess the Glass can click custom action menu items on things without an image
attachment because the crash looks related to the Glass uploading the
attachment. Maybe other people get around the problem by just using HTML cards
that refer to remote images in their src attributes and not having any
attachment?
Original comment by lna...@gmail.com
on 25 Jun 2014 at 3:39
You can tell when your sync is broken because after tapping the action the two
arrows in a circle in the lower right corner get stuck and stay there. After
factory reset and getting actions working again (by not using attachments),
they go away almost immediately after an action. So this is a good indicator to
go factory reset your Glass. I tried removing all the cards from the app and
tried clearing the data on the Home app, but that didn't seem to fix things.
Original comment by lna...@gmail.com
on 25 Jun 2014 at 4:16
I changed my app so that the images were displayed using HTML rather than
uploading. Two problems with this:
1. While the subscription update pings my servers, the image on Glass doesn't
actually update, even though the server has generated the new image at the same
link. Maybe Glass is caching data and not reloading the image correctly? I
could try to add in a date into the link to change up the URL and see what
happens.
2. Other apps, like Twitter, display an attached photo to a tweet as an
uploaded image. The image is less opaque in the background while the tweet
text and user profile picture overlays on top of the background image cleanly,
and assumingly, less style formatting work.
Ultimately, uploading an image is the way to go - I'm just not sure why updates
don't happen as expected.
Original comment by willja...@gmail.com
on 6 Jul 2014 at 5:29
I also don't get notifications. I have Glass with XE 20.1 (I haven't factory
reset it in a while). I run the Mirror API Java Quick Start project of June
out-of-the-box. I deployed it and run it on my server that has a routable IP
address, and I use the subscription proxy for notifications over non-SSL. I get
timeline cards in my Glass and the logs on my server shows "Bootstrapper
inserted subscription timeline". Good.
THIS SCENARIO WORKS:
In the Glassware Starter Project, I select "Insert a card you can reply to", my
Glass gets the card "Tell me what you had for lunch :)", I tap the card and
select "Reply", I speak a message, and after some 10s my server logs show "got
raw notification" with "operation": "INSERT". Good. That proves the
subscription and notifications are going through.
THIS SCENARIO FAILS:
When I tap the same card and select "Drill In", my server does NOT get the
notification. Not good. I'm expecting "operation": "MENU_ACTION" as per the
Mirror API documentation. I also removed the IconUrl from the custom menu item
in case the image was at cause but that didn't help.
PAST TESTS
I have logs from Sept 3 last week when I had tested notifications for the first
time using a custom menu item I had copy/pasted from the Drill In example. The
logs show I had gotten a notification "operation": "UPDATE" [...] "type":
"CUSTOM". (That differs from the MENU_ACTION I expect; nevertheless it was a
positive result.) I don't know if this worked before Sept 3 or not. But since
then, it hasn't worked. I tried reproducing the notification to no avail. I
suspect something broke somewhere in XE or in Mirror API since Sept 3.
Original comment by thibaud....@gmail.com
on 11 Sep 2014 at 3:58
So, I factory reset my Glass based on the previous comments, it's still XE
20.1. I re-ran the same setup. Now I don't get any notifications at all, not
even the "Reply" that I was able to receive up to a few minutes ago before the
factory reset...?!?
Original comment by thibaud....@gmail.com
on 11 Sep 2014 at 5:52
UPDATE. I did some more tests, and I conclude the following: 1) notifications
on custom menu items do work, 2) only if the timeline card is not part of a
bundle, 3) only if the timeline card is not a bundle cover (that was already
known and documented), 4) only if the timeline card does not have an image
attachment, and 5) only if the custom menu item does not have an IconUrl. I
think #4 is what some of the previous comments were trying to say. When I meet
those conditions, I get "operation": "UPDATE", "type": "CUSTOM", and the
payload. I still have to triple-check what I'm saying.
Original comment by thibaud....@gmail.com
on 12 Sep 2014 at 6:18
Hey Thibaud, some menu commands don't go to the server. Although the ones that
do are broken when there's an image attachment. That's what this bug report is
about.
Original comment by lna...@gmail.com
on 12 Sep 2014 at 2:14
It's a tough issue to debug, because once you get that broken, stuck sync
symbol in the bottom right when you start trying to run commands, nothing is
going to go up until you empty out your timeline and reset your Glass. Glass
will always just have some sort of internal crash trying to sync after that
point.
Original comment by lna...@gmail.com
on 12 Sep 2014 at 2:16
Lance, thanks for the response. What does the "broken stuck sync symbol" looks
like? I get "just now" and the circular arrows and that's it. How do you tell
if my Glass is stuck/crashed? /T
Original comment by thibaud....@gmail.com
on 13 Sep 2014 at 5:33
Original issue reported on code.google.com by
ibrahimk...@gmail.com
on 27 Apr 2014 at 7:03