Allow external users edit google sheets in my drive through flutter app - flutter

Im designing a small interface in flutter where several groups of people manage a google spreadsheet.
Each group of users manage their own google spreadsheet
Each spreadsheet lives in a single drive (let's say my drive)
What is the best way to authorize people to manage those sheets? I've seen:
Using googleapi and google_sign_in (https://pub.dev/packages/googleapis)
Using google service accounts through gsheets library (https://pub.dev/packages/gsheets)
I was thinking of using method 2, where each group has access to a service account which reads/writes into an specific sheet. I would then require people to sign in on my app to make sure which service account they have access to.
I was wondering if there's a better practice on how to provide access to the users to edit sheets in my drive? I've been searching other options but haven't had any luck.

Related

Sharing google sheet with service account when 'Sharing outside of organization is OFF'

I'm using GSpread to download data from Google sheets and store them in a Postgres DB for different organisations.
Unfortunately one organisation has activated G Suite's strict sharing setting which makes it impossible for users to share documents outside their organisation.
This affects my ability to share Google sheets in this organisation with service accounts which are required for GSpread.
Note: I created the service account within the respective organisation and also already delegated domain-wide authority to the service account.
Any idea on how to share the Google sheet with the account?

How to determine if users with different home domains are part of same google apps org?

In Google Apps, there is always a base/primary organization. But Google Apps can have subdomains and suborganizations both (or combination of those).
We want to be able to identify the currently logged-in user as being part of the overall organization, whether it be the primary org/domain or some subdomain or suborg. But when you get user info or license info, it returns the home domain of the currently logged in user as the ID for their organization. No ID is consistent across all subdomains or suborgs.
I've also tried listing all orgs using the organization apis, but that doesn't seem to work when trying to get the org info of the root org: https://developers.google.com/admin-sdk/directory/v1/guides/manage-org-units
Is there a way, given a particular Google Apps user, to determine what the primary organization is?
The only alternative we have is to treat every domain/subdomain in the Google Apps org as it's own independent org. This is less than ideal because now a Google Apps admin who manages all of their sub-orgs/subdomains in one place in Google will now have to manage a separate organization in our app for each domain in their overall org. This uses up extra resources in our system for creating these additional orgs, but more importantly creates a very confusing organization/user management model.
When you look at the Users resource for the two users, compare the customerId attribute. If they match, the two users are in the same Google Apps account. If they don't they're not.
Also, don't assume two logged in users are in the same Apps account. One could be an Apps account and one could be a consumer account even though they have the same SMTP domain.

What is the difference of internalWebPropertyId, defaultProfileId and profileId in a Google Analytics account?

I am playing with Google Analytics API and found that it's really complicated.
A GA user can have more than one accounts.
Each accounts can have more than one Web Properties
Each Property can have "internalWebPropertyId", "defaultProfileId" and ordinary profile id.
I might have already made some mistakes by listing them out.
Is there any tutorial/manual that I can read to understand the whole structure better?
Thanks!
A user can have access to more then one Google Analytics accounts -> Each account can have one or more Web Propertys -> each Web property can have one or more Views (profiles)
Don't rely to much on DefaultProfileid its not set for every webProperty and I haven't been able to find any documentation as to how that's set.
You can read a little about it here: Accounts and Views (Profiles) as well as What Is The Management API - Overview
I just found this in answer:
https://www.googleapis.com/analytics/v3/management/accounts/~all/webproperties/~all/profiles?oauth_token={Token}
There should be away of working that to make one request for accounts, one to get all the Web Properties , then one to get all the Profiles.

Automate distribution of redemption codes for Custom B2B app

I have built a Custom B2B app for one of our clients. My question is how to automate the distribution of the redemption codes.
I have already looked at some of the MDM providers. Their solutions are too expensive and all we really need is a way to distribute the app from a webserver, not manage a bunch of mobile devices.
As you probably already know, when a client buys a Custom B2B app through the Apple VPP program, they get a spreadsheet with valid redemption codes for the number of licenses they have built. This spreadsheet has 2 columns: 1) redemption code 2) URL to redeem the code
I want to provide my client with a URL where they can send their users to download the app. They just don't have the expertise/infrastructure to distribute the app themselves. And emailing clients is not going to work.
I'm not a web guy, but it seems to me that we could write a webpage that would look at the spreadsheet for the next available activation code and then redirect the user to the associated URL. I'm not concerned with the number of licenses they distribute since I have another way of auditing the real number of users (Flurry). So I want this to be as painless as possible.
In fact, I have multiple clients and want to provide them each with their own URL for their clients. It seems like this shouldn't be too difficult to code.
The problem is, I'm not the guy to write that code. Any ideas on how best to do this?
Assuming that you don't want to show the user a website you should be able to do this with an online service like parse.com and the features it offers.
From a user POV you would supply them with a link which directed them to parse.com with a path and parameters indicating the action to be taken (get app) and what account is associated. This would redirect the users browser to the appropriate destination.
The main issue (and this applies to any solution) is knowing if the user actually followed through and used the code. i.e. should it be removed from the DB so it isn't offered to another user in future. Then you would update the DB each time you get a new spreadsheet.
Anyway, this could be achieved with a little javascript in parse.com, specifically, by using cloud code which can interrogate and modify the DB and then redirect the user.
Obviously if you need user authentication of some kind or other restrictions then you would need to start adding some web interface on top of this in order to collect the details.

What is Google Apps?

What is google apps and why are so many startup companies using it?
Google Apps is a collection of business software components delivered as a service, saving you from having to install Exchange, Office and the usual business stuff. Plus Google Apps allows people to write their own apps and install them on Google's servers. A lot of companies use Google Apps for email and calendering instead of Exchange these days. It saves costs.
One useful feature of Google apps is that it allows you to use the gmail interface to host email on google's servers for your own domain. So you can send/recieve email with an #example.com address (if your startup was called example.com).
Unlike many apps, the Google Business Apps are intuitive. Calendars, email, file sharing, contacts, and more are simple to use and will work virtually on any internet connected device.
basic benefits of google apps are -
1. It is Cost Efficient - For only $5 a month, you will receive email addresses for your team with your company's name, 30 GB storage you can use for file storage and sharing, online calendars, and the ability to easily create online spreadsheets, slides, text documents, and more. All these great features including admin controls and security from a name you can trust. If you prepay for a year you will actually save $10.
Security - The company is FISMA-Moderate level certified -- this is the same level of certification for the internal email usage within the United State's government. Google is also capable of supporting HIPAA compliance. Google is trusted by millions to virtually secure their email from any threats through routinely checking emails before downloading a document for any threats of viruses, pshing emails, malware and more.
User friendly and intutive interface.
Google Apps are...
“A set of intelligent apps including Gmail, Docs, Drive, and Calendar to connect the people in your company, no matter where in the world they are.”
Source: https://gsuite.google.com/together/
Examples: Google Calendar, Google Drive, Google Hangouts, Google Slides, Google Spreadsheets - those are all web-based applications ("apps").
G Suite is the name given by Google for their collection of applications. Formerly named “Google Apps for Work” and “Google Apps for Your Domain”, G Suite is resource implemented by I.T. Administrators, to enable access to Google Apps, through a domain (and their aliases).
For Example: Rather than using your standard Gmail address (username#gmail.com), users in a business or organization would login to access those web-apps using an email address with their own domain, like (username#example.com).
The interface is the same as for standard Google Account holders, yet G Suite admins have the ability to add some branding, and control features - through the G Suite Admin Console.
I'm going to stop here before this post starts to resemble a pitch - let's just say that I really enjoy the fact that my workplace has implemented G Suite for our organization - it has made my duties, that much easier!