Google Fit session not appearing in history - google-fit

I am trying to create a workout session using the Google Fit REST api and it's not appearing in the user's history on the Fit Android app.
I am following their guide here and using the OAuth playground here with the following steps:
I have granted access to the playground for fitness.activity.read and fitness.activity.write and obtained the necessary tokens
I'm making a call to https://www.googleapis.com/fitness/v1/users/me/sessions/example-fit-1411053997 with the following payload
{
"id": "example-fit-1411053997",
"name": "My example workout",
"description": "A very intense workout",
"startTimeMillis": 1396710000000,
"endTimeMillis": 1396713600000,
"version": 1,
"lastModifiedToken": "exampleToken",
"application": {
"detailsUrl": "http://example.com",
"name": "Foo Example App",
"version": "1.0"
},
"activityType": 1
}
I can see a 200 response code meaning my session was created and I can confirm the session gets listed when I call https://www.googleapis.com/fitness/v1/users/me/sessions
The session doesn't appear in the Google Fit mobile app for the same user account.
However, if I switch to a different user account on the device and switch back the session appears. This happens every time and I cannot make the session appear right away. I have also tried recording sessions from Android directly and those appear instantly in the Fit app. Am I missing extra steps necessary for the REST Api?
Edit
I tried the same on iOS and I can see my workout in the history. Could this be a bug on Android?
Edit 2
So I've tested on 3 devices - 2 androids and one iOS. iOS works as expected - all sessions are listed there and when I create a session from the Google Fit app it gets returned by the API.
However, on Android on both phones when I create sessions from the Fit app they don't even get sent it seems because I'm not receiving them from the Api. Definitely starting to look like a sync issue on their Android end.

Related

Facebook Graph Api returns empty array on gorup feed call

I'm trying to get the feed from a closed group which I am an administrator using facebook Graph Explorer API, so I followed the instructions in this documentation
But the response json is just an empty array like this
{"data": []}
Here is my request image
First I gave the token only the permission described in the documentation, then i gave all permissons and yet it doesn't work
https://developers.facebook.com/docs/graph-api/changelog/breaking-changes#groups-4-4:
Groups API
App Review — All apps, including formerly approved apps, must undergo App Review in order to gain access to the API.
Until you submit your app for review and get it approved, this will only work if you put your app in “dev” mode. As soon as you set it “live”, you will only get an empty result if you did not get your app reviewed yet.

Google Chrome GCM registration doesn't work

I have problem with GCM registration in Google Chrome. I've created minimal example:
manifest.json
{
"name": "TestGCM",
"version": "0.1",
"description": "Desc.",
"permissions": ["gcm"],
"background": {
"scripts": ["background.js"],
"persistent": true
},
"manifest_version": 2
}
background.js
var gcmSenderId = "782709818071";
var registerGcm = function(gcmRegistrationId) {
console.log("registerGcm start");
var lastError = chrome.runtime.lastError;
if (lastError) {
console.error("Error during registering GCM token: ", lastError.message);
}
console.log("registerGcm end");
};
var senderIds = [gcmSenderId];
console.log("registering GCM...");
chrome.gcm.register(senderIds, registerGcm);
console.log("...");
var lastError = chrome.runtime.lastError;
if (lastError) {
console.error("Error: ", lastError.message);
}
After I load this extension I only see:
registering GCM...
...
Registration doesn't work. I tried resetting Google Chrome settings to factory, reinstalling Chrome, restarting PC.
In chrome://gcm-internals/ I see that GCM client state is UNINITIALIZED:
Android Id
User Profile Service Created true
GCM Enabled true
GCM Client Created true
GCM Client State UNINITIALIZED
Connection Client Created false
Connection State
Registered App Ids
Send Message Queue Size 0
Resend Message Queue Size 0
There is a chance that you are dealing with corrupted GCM store. If this is a signed-in (see below) profile, and GCM Client is still shown as UNINITIALIZED, that would be the case. A way to deal with that is to go a corresponding profile's folder and delete the GCM Store folder. Restarting Chrome should reinitialize GCM for the signed in profile, and your application should be able to work.
My only concern about that solution is that you mentioned that you reinstalled Chrome, which I would expect to delete the folders and this solution would not address the problem. On an off chance that you are using the old profile and it happens to be corrupted, please try these steps.
GCM Client in desktop Chrome is built in a way, that you don't need to be signed-in to have GCM running, it is enough to have an app/extension using GCM, but signing in and enabling Chrome Sync is an easy way to test that GCM works properly. That is the only reason I am recommending it.
Check this documentation about Implementing GCM Client on Chrome, to know the basic steps you need to obtain GCM registration token.
It's explained here the steps and key points that you need to register the GCM. It has a sample code that you can use or serve as a guide for your project.
Also make sure that the enable API that you use is "Google Cloud Messaging for Android". Because "Google Cloud Messaging for Android" will give you access to the normal GCM API. "Google Cloud Messaging for Chrome" won’t (it’s used for Chrome Apps in the Chrome Web Store).
Also check this tutorial on how to use Google Cloud Messaging in Chrome.

Set up Google Calendar V3 API Push notification via my Google Apps script

I want to use Google CAL API v3 to watch multiple calendars and thus to update all those events from those calendars to a Master Calendar, so I need to use WATCH/PUSH notification in order that whenever there is a new event in those cal’s, those events shd be automatically be pushed/created in my master calendar.
But, I am facing the following issue :Under APIs Explorer. Most of the services return 200 OK, except the Watch request not working.
Services > Calendar API v3 > calendar.events.watch
i got the below request and response
Request
POST https://www.googleapis.com/calendar/v3/calendars/mailid%40domain.com/events/watch?key={YOUR_API_KEY}
{
}
Response
400 OK
{
"error": {
"errors": [
{
"domain": "global",
"reason": "required",
"message": "entity.resource"
}
],
"code": 400,
"message": "entity.resource"
}
}
And then i followed as per the below google documentation
https://developers.google.com/google-apps/calendar/v3/push
Registering Your domain:
Step 1: Verify that you own the domain
Step 2: Register your domain
I verified my domain/notifications in google webmaster tools.
My verified domain look like this:
http://my-domain.com/notifications
And have added my domain name in the webhooks under the PUSH in Google Developer Console, as explained in the doc.
Is there anything i am missing here, plz is there an issue in SSL certificate fr my domain, how can i atleast test in the API explorer, so that i get a return code 200 OK. After that, I need to implement this push/WATCH via Google Apps Script.
Is there any documentation for apps script to use push notification.
Any hint, tip will help me, I am tired with this for the past 1 week in trial and error method.
In the request that you posted the body is empty. In the documentation there is an example where you need to provide the calendar ID, the web_hook and other information:
{
"id": "01234567-89ab-cdef-0123456789ab", // Your channel ID.
"type": "web_hook",
"address": "https://example.com/notifications", // Your receiving URL.
...
"token": "target=myApp-myCalendarChannelDest", // (Optional) Your channel token.
"expiration": 1426325213000 // (Optional) Your requested channel expiration time.
}
Add this information when creating the push notification.
For using apps script you can use URLfetch service with the method "fetch()" then you would need to provide the parameters mentions and make the call as a POST.
Hope this helps.
UPDATE: I will write here to have more space.
Push notifications work in this way.
-You create a push notification with the id, the resource you want to watch, the address where you want to receive the notification and the optional parameters.
-if successful, the server will watch that resource and will send a notification to the address mentioned in the request describing the changes when a change is made to the resource.
-The server needs to know that you received the notification, so from the address mentioned in #1, you need to tell the server that you received the notification returning a HTTP 200 response. (for this you need an app that is listening to the notifications and sending the responses)
for your questions
1.- As the server will make a HTTP request to a url (your web_hook address) Google requires it to be secure, that's why it is required to be HTTPS.
2.- Yes, without that url you won't be able to receive the notification.
3.- Google also needs to verify that the url you provided is actually yours, so you will need to provide the url, then Google will provide you a file, you have to make this file available in that url, then Google will call the url an will retrieve that file. Then you can prove that the URL is yours. I'm not sure if this step can be done with apps script. You can actually deploy a script as web app but i'm not sure if you can use it for this purpose.(here you can find more info and different ways to verify the url)
4.- That's created by yourself. In the documentation is pointed out the recommendations for it.
I hope this clarifies your questions.
You can check here how push notifications work, this example is for Drive but the concept is the same.

Suddenly getting "403 Access not configured. Access Not Configured. Use Google Developers Console to activate the API" accessing Drive

I have a long standing Drive/Appengine project ("Live") which is working.
I'm doing some upgrades to the Email interface, which means I need to create a second Appengine project ("Dev"), using the same project ID, to test email.
Up until an hour ago, both projects were working. Now I'm getting 403 errors when I try to access Drive from Javascript in Dev.
So the usual "go to cloud console and enable blah blah" doesn't apply. This was all enabled over a year ago and works fine for Live.
I've run the access token through the tokeninfo endpoint
https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=ya29.1.AADtN_WIxVB6qhrUW0j7qdZwUcRIJyGGObG4ltsVymLQ-hqamjwCwCXE0Vqum
and I get
{
"issued_to": "698624257.apps.googleusercontent.com",
"audience": "698624257.apps.googleusercontent.com", "user_id":
"1167149762340142", "scope":
"https://www.googleapis.com/auth/drive.file
https://www.googleapis.com/auth/drive.install
https://www.googleapis.com/auth/plus.me
https://www.googleapis.com/auth/userinfo.email
", "expires_in": 2660, "email":
"my.email#gmail.com", "verified_email": true, "access_type":
"offline" }
Which seems healthy enough.
Any suggestions?
A definitive list of the problems that can cause this error would be helpful.
To repeat, (because I know somebody will suggest this answer) this app is WORKING for the majority of users and has Drive API and SDK enabled in the API Console

Google Drive authentication issues

I'm having an issue using Google Drive using Ruby.
I can create an OAuth2 client and start making authenticated calls.
I have to query the Google Documents List first in order to fetch a list of files, once I have the file IDs I try to query the Google Drive API like this:
GET https://www.googleapis.com/drive/v1/files/0B9N873iFyYR7MkRfeTAxxxxxxx?access_token=ya29.AHES6ZRckKZ2jZfC6risUtH9ZZxxxxxxxxx
However I'm getting this:
{
"error": {
"errors": [
{
"domain": "global",
"reason": "appNotInstalled",
"message": "The authenticated user has not installed the app with client id xxxxx.apps.googleusercontent.com"
}
],
"code": 403,
"message": "The authenticated user has not installed the app with client id xxxxx.apps.googleusercontent.com"
}
}
This client id refers to an application I created via Google API Dashboard, not the Chrome Web Store.
Anyway I tried to setup a hosted Chrome Web App, configured (and paid) everything to allow a list of test users, but still I get the same error message although the app is installed correctly from the market (not local copy).
With the same client and credentials I'm able to call https://docs.google.com/feeds/ endpoints but not drive ones.
My scopes are rather complete: 'https://docs.google.com/feeds/,https://docs.googleusercontent.com/,https://spreadsheets.google.com/feeds/,http://gdata.youtube.com,plus.me,drive.file,userinfo.email,userinfo.profile'(don't look at the format, it gets fixed automatically afterwards) and they works well.
I'm not using the Drive UI, I just want to use server-side APIs. Thanks for any hints.
Have you set the "api_console_project_id" : "xxxxxxxxxxxxx" argument in your manifest ?
An example is provided here: manifest.json