Published Gmail Add-On Not Showing on Mobile Gmail App - gmail

On the Google Developers page here, it says "G Suite add-ons that extend Gmail do so on both desktop and mobile clients."
My published add-on linked here is on the Marketplace. It is just extending gmail (I've included my manifest file below). However, my add-on only appears on the web. I can't get it to show up on mobile.
What am I doing wrong or is there a bug? Why is my published Gmail add-on not showing up on the mobile gmail app?
Thank you for all your help!
Manifest File (appscript.json):
{
"timeZone": "GMT",
"dependencies": {
},
"gmail": {
"name": "Smarty",
"logoUrl": "https://images.squarespace-cdn.com/content/v1/5e55a48565fc4c78f503ac25/1586923750635-O2EA9H2ZLCH4B926L8T3/ke17ZwdGBToddI8pDm48kJK4Mm1kch8SFO9ZNkN1NT97gQa3H78H3Y0txjaiv_0fDoOvxcdMmMKkDsyUqMSsMWxHk725yiiHCCLfrh8O1z5QHyNOqBUUEtDDsRWrJLTmN9YSRtfoTLg6dUq-6F17A0FFZK5fArcnK1IqGweyunyWChwIwkIJ_P7MaZif-uMs/SmartyDescriptor.png",
"contextualTriggers": [{
"unconditional": {
},
"onTriggerFunction": "getContextualAddOn"
}],
"primaryColor": "#40c2ff",
"secondaryColor": "#e84f81"
},
"oauthScopes": [
"https://www.googleapis.com/auth/calendar",
"https://www.googleapis.com/auth/gmail.addons.execute",
"https://www.googleapis.com/auth/gmail.addons.current.message.readonly",
"https://www.googleapis.com/auth/userinfo.email",
"https://www.googleapis.com/auth/script.external_request",
"https://www.google.com/m8/feeds"
],
"urlFetchWhitelist": [
"https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment-with-locales.js",
"https://cdnjs.cloudflare.com/ajax/libs/moment-timezone/0.5.28/moment-timezone-with-data.js",
"https://api.wit.ai/"
],
"runtimeVersion": "V8"
}

just to make sure what is meant by mobile: it is the mobile gmail app (android/iOS) not a mobile web browser. because it is not working in the latter
you need to open an email on your gmail app, scroll to the bottom and click on the addon icon next to the text "Available add-ons", see https://developers.google.com/gsuite/add-ons/how-tos/starting-addons#on_mobile_gmail_only
and currently thats the only way. as there is this restriction that you can only open it from within an email, so there is no homepage or view outside of an email. so there the add-on is simply not available. see https://developers.google.com/gsuite/add-ons/how-tos/starting-addons#on_mobile_gmail_only
that likely may have been why you did not find it

Related

SharePoint page not loading in personal tab of static app (MS Teams desktop client)

When adding a SharePoint page as a static tab in my custom personal app, the added SharePoint page is not loaded in the MS Teams desktop client, but works as expected in the web client.
Also, when switching to Developer Preview the tab starts to work. Even when switching out of Developer Preview the web page still loads as expected.
Steps to Reproduce
Create a page in SharePoint online
Create a new MS Teams app (e.g. in App Studio's Manifest editor)
Add a new Personal tab, linking to the SharePoint page
Install the MS Teams app (e.g. with App Studio's Test and Distribute)
Open the MS Teams app
--> The SharePoint page is not loaded (nothing is shown, just a blank screen)
Switch to developer preview (& sign in if needed)
Open the MS Teams app
--> The SharePoint page is loaded correctly
Switch out of developer preview (& sign in if needed)
Open the MS Teams app
--> The SharePoint page is still loaded correctly
PS: it seems initially there is a redirect happening to /_layouts/15/Authenticate.aspx, which redirects to the MS login page. However, this redirect is not happening when the switch to or from developer preview has occured. So, it looks like initially MS Teams does not pass authenticated correctly?
https://github.com/SharePoint/sp-dev-docs/issues/4512
Could you please try adding following in your App Manifest as workaround and let us know if you are facing any issue?
"staticTabs": [
{
"entityId": "TestTabId",
"name": "Test Tab",
"contentUrl": "https://microsoft.sharepoint.com/teams/MyTestSite/_layouts/15/teamslogon.aspx?spfx=true&dest=/teams/MyTestSite/SitePages/Test.aspx",
"scopes": ["personal"],
"websiteUrl": "https://fullwebsite.website.com/about"
}
],
"validDomains": [
"*.login.microsoftonline.com",
"microsoft.sharepoint.com",
"microsoft.sharepoint-df.com",
"spoppe-a.akamaihd.net",
"spoprod-a.akamaihd.net",
"resourceseng.blob.core.windows.net",
"msft.spoppe.com"
],
"webApplicationInfo": {
"resource": "https://microsoft.sharepoint.com",
"id": "00000003-0000-0ff1-ce00-000000000000"
}

Where's the official manifest.json documentation for Chrome Hosted Apps? (bookmark/shortcut apps)

The simplest Google Chrome apps seem to be those that just act as a bookmark or shortcut to a Web site. They have a manifest.json that is something like this:
{
"manifest_version": 2,
"version": "0.1",
"short_name": "stackoverflow",
"name": "stackoverflow shortcut",
"description": "stackoverflow bookmark chrome app",
"icons": { "128": "img/128.png" },
"minimum_chrome_version":"37.0.0.0",
"app": {
"urls": [ "http://stackoverflow.com/" ],
"launch": { "web_url": "http://stackoverflow.com/" }
},
}
The basics of this are documented in the Getting Started Tutorial Sample and in the Create a private Chrome app page this type of app appears to be referred to there as a bookmark app.
My questions are:
Is bookmark app is an official term for this kind of Chrome app? As I am having difficulty finding any other official place it is referred to in such a way
Where is manifest.json fully documented? The extension manifest.json documentation does not even contain info for the app name tag, and the main manifest.json doc doesn't mention the urls, launch, and web_url elements?
The tags are fairly self explanatory and used in many tutorials all over the Web but it seems odd there is no official documentation for them, especially when app is used for more complex Chrome apps - I just want to make sure I am not somehow missing some official and more complete documentation as I am referring to this type of app wrongly.
Maybe it is simply that the code is the documentation and I simply need to find where the manifest.json is parsed in the Chromium code. I thought it was worth asking here first though, and even if I end up being told to check the code then someone might give me a pointer there to get me started.
The "bookmark" apps you describe are officially called hosted apps. Here you have a description of both:
Apps
Contains installable web apps. An installable web app can be a normal website with a bit of extra metadata; this type of app is called a hosted app. Alternatively, an installable web app can bundle all its content into an archive that users download when they install the app; this is a packaged app. Both hosted and packaged apps have icons in Chrome's New Tab page, and most users shouldn't be able to tell the difference between them without looking at the address bar.
The documentation for app manifest only describes the options for packaged apps. As #wOxxOm notes in the comments, the only place currently describing a manifest for a hosted app seems to be the Getting Started tutorial.

How to get chrome extension's meta information (e.g. version, name) from Chrome Web Store?

I want to get chrome extension's version, name from chrome web store.
For example, I can see the app name "Do Not Merge WIP for GitHub" and the app version "1.0.6" in application's detail html page.
How to get these meta data?
I can find only publish API.
Using the Chrome Web Store Publish API - Google Chrome
Html page uses ajax/detail API, but I feel this API is too internal.
E.g. ajax/detail API
Related:
API call for user count in Chrome Web Store? - Stack Overflow
Chrome webstore search API to lookup by name to get app id - Stack Overflow
I'm afraid you can't do that with public APIs.
The Publish API doesn't work with this metadata, this is what it can extract.
So usually people just scrape the Web Store page.
I built npm modules for gathering metadata by scraping.
chrome-web-store-item-property
chrome-web-store-item-property-cli
Example:
$ chrome-web-store-item-property-cli nimelepbpejjlbmoobocpfnjhihnpked | jq .
{
"name": "Do Not Merge WIP for GitHub",
"url": "https://chrome.google.com/webstore/detail/do-not-merge-wip-for-gith/nimelepbpejjlbmoobocpfnjhihnpked",
"image": "https://ssl.gstatic.com/chrome/webstore/images/thumb.png",
"version": "1.0.6",
"price": "$0",
"priceCurrency": "USD",
"interactionCount": {
"UserDownloads": 421
},
"operatingSystems": "Chrome",
"ratingValue": 4.5,
"ratingCount": 2,
"id": "nimelepbpejjlbmoobocpfnjhihnpked"
}

Chrome PNaCl app inline installation

I want to distribute a PNaCl app, inline installation and use the app without leaving the current page. I have published the app on CWS. The app needs some user permissions. Inline installation works and the app appears in the Chrome browser apps section. But, I get this error :
"NaCl module load failed: could not load manifest url"
when I try to load the app using:
<embed id="testapp"
width=0 height=0
src="testapp.nmf"
type="application/x-pnacl" />
This is the testapp.nmf file which is located in the .zip pkg that I uploaded to developers dashboard.
{
"program": {
"portable": {
"pnacl-translate": {
"url": "testapp.pexe"
},
"pnacl-debug": {
"url": "testapp_unstripped.bc"
}
}
}
}
Manifest.json in the package file looks like :
{
"name": "testapp",
"version": "0.0.0.2",
"manifest_version": 2,
"description": "TCP/UDP test",
"offline_enabled": true,
"icons": {
"128": "icon128.png"
},
"app": {
"background": {
"scripts": ["background.js"]
}
},
"permissions": [
{
"socket": [
"tcp-listen:*:*",
"tcp-connect",
"resolve-host",
"udp-bind:*:*",
"udp-send-to:*:*"
]
}
]
}
The HTML page is on Google's blogspot.com and verified successfully.
Observations:
You can't use socket APIs outside a packaged app (since there is no way to get permissions for them otherwise).
A packaged app is mostly self-contained: it's not something interacting with the normal browser, it's a preset collection of resources that is displayed in a separate window.
A certain website can still communicate with the app.
Seems like you're trying to follow two guides at once, for a packaged app and a web app. PNaCl can work in the context of a web app by just placing the pexe and the manifest on the site itself; but you require raw network access, and it can only be requested in a packaged app.
You can absolutely use inline install to add the app to the user's machine, but you can't embed a module from it in a normal page.
Your module can only be embedded in the app's own pages. So if you wanted to show some UI, you need to make that a page packaged together with the app and show it with chrome.app.window.create.
If you absolutely need to expose functionality to a certain website, you can list it in externally_connectable and use messaging API to communicate with the app's background page.
An app always has an event page, that is a page that unloads if it's idle. So if you just embed your module in that page by dynamically creating an <embed> element, it may fail. However, if you're using the externally_connectable method, you should be able to keep a port open, that would cause the page to keep running.

Google Chrome extension get IP address of server

I had a good idea, which kind of revolves around ips from the server the user is on.
Im very new to making a google chrome extension, but i am good at the programming languages that requires to build one .
Question: Can I get a IP from a server that the user is on? and if so how would you do this?
I was thinking just AJAX the url to my own server which then pings the server which would get the ip and returns that/stores it some where.
You can get current URL of tab\web Pageuser is currently browsing using chrome.tabs API
Demonstration
chrome.tabs.query({
"currentWindow": true, //Filters tabs in current window
"status": "complete", //The Page is completely loaded
"active": true // The tab or web page is browsed at this state,
"windowType": "normal" // Filters normal web pages, eliminates g-talk notifications etc
}, function (tabs) { //It returns an array
for (tab in tabs) {
_url_i_need = tabs[tab].url;
//Do AJAX Stuff here
}
});
Ensure you declare tabs permission in your manifest as shown here
{
"name": "My extension",
...
"permissions": [
"tabs"
],
...
}
References
Tabs API

Resources