Google Chrome Store - Add-In Keeps Getting Rejected - google-chrome-extension

I've been really getting frustrated with this, so am hoping someone has come across something similar and might be able to give some good advice to how I can proceed.
I developed a Google Chrome Add-In that is a bookmark tool for our company. When installed the user has the latest links (in interactive drop-down menus), for our company. It has already been published on the Chrome store to internal users only, with about 6 major updates already done.
Backend:
-HTML & CSS -No JS or anything complicated, a very simple add-in
Problem:
- I recently updated and added a few new bookmark links to the html file and some small design changes as well.
- I uploaded the latest packaged version in the developer dashboard and tried to Publish it.
- Every time I try to publish it goes into a "Pending" state. I am used to this, however, it is going for what I believe is a manual review (takes about 3-7 days each publish), and gets rejected with this statement:
Your item did not comply with the following section of our Program Policies:
"Spam and Placement in the Store"
Items should work and provide some functionality upon installation.
Items should provide the promised functionality that aligns with the description of the item.
Please review your item and make necessary changes so that it provides the function/service included in >the item’s description.
It's been rejected 3 times now. The first time I went through my code and made sure it was clean. Second and third times I've been adding to the description in the store and alternating the description in the manifest. As well this last time I went through the manifest again to make sure it is compliant, and it looks to be so. It's odd for me though because the description has never been an issue before, so not sure why I am being flagged.
Has anyone come across this and have any suggestions to make this pass? I am so scared to publish again as they suspend accounts that re-publish to often.
P.S. Contacted Google many times but have not heard back (not surprised)
Just in Case, store page listing information:
Name: CompanyName My Department's Bookmarks
Short name: Not specified in manifest
Manifest Description: Navigate throughout "departmentnames" core sites and have access to the Latest > News Spotlight.
Detailed Description: The "department" Bookmarks tool is a Google Chrome extension which has the "department" experience in one central area.
Why have the extension?
The "department" Bookmark tool saves you time and effort! Don't spend your time hunting for information any longer!
Key Components: - The entire "department" experience in one central area. - Latest news Spotlight: View and submit the latest "department" news for your fellow colleagues to see.
Description lists all the content within.
Manifest:
{
"manifest_version": 2,
"name": "Company My Dept Bookmarks",
"version": "1.81",
"description": "Navigate throughout Dept core sites and have access to the > Latest News Spotlight.",
"icons": { "default_icon": "icon.png" },
"browser_action": {
"default_icon": {
"icon": "icon.png"
},
"default_title": "Dept Bookmarks",
"default_popup": "popup.html"
},
"content_security_policy": "script-src 'self' https://ajax.googleapis.com; object-src 'self'"
}```

I've had a similar experience with a corporate-only chrome extension, though for slightly different reasons. The extension required elevated permissions and interacts heavily with the UI's of the web apps the employees use.
I'll share a few tips that we used to get the extension approved, though it always undergoes a review that takes about 5 business days to be approved.
Since the extension is only for corporate employees, it's "unlisted" in the chrome store. Using a Group Policy, we download the extension from the Chrome store and install it on employee's machines.
We added screenshots containing our company logo and text that explains the extension is intended only for employees of our company and is not for use by the general public.
In our manifest we explain what the extension does and reiterate that it is intended only for employees of our company and not for public use.
Those items seemed to satisfy Google for our scenario. That said, there are alternative distribution methods you could explore. Details are here: https://developer.chrome.com/apps/external_extensions
Best of luck!

Posting an answer to my problem because I did manage to get it back up in the Chrome Store!
Before publishing this latest update I did some cleaning of the files in my package and removed my "icon.png", which was referenced in the manifest file. I didn't think of this as being an issue because when posting to the Chrome store you are required to upload the icon separately. But this was cause the issue! I put it back in and it loaded in fine (something so small creating it to not work!).
I hope this answer can help anyone else having a similar issue, check all your files in your package to ensure they are present if they are noted in your manifest.

Related

Publish a new version of a Chrome Extension to just testers (initially)

I have an unlisted extension published through the Chrome web store which is already being used. I have a new version which I would like to release just to testers initially, before a full roll out to everyone. Can this be done?
The same thing has been asked here but it was almost 9 years ago, and the answers disagree on whether it's possible or not:
How to publish new version of Chrome Extension only to testers
The short answer is "No, it can't be done for a published extension".
According to Chrome Web Store visibility descriptions, you must unpublish an extension before it can be published to trusted testers. Users who already have it installed will get updated to the new version.
In your case, you have to create a new extension with the new code, and a different name like "MyApp Beta" and publish it privately to the list of trusted testers.
Maybe you already know this, but you can install a chrome extension manually.
Go to chrome://extensions/ and check the box for Developer mode in the top right.
Click "Load unpacked exention"
Select the folder where your unzipped extension resides in.
So, you can send a zip/rar to your testers, let them follow the procedure and test the extension. Might be that you have to give it another name so as to not conflict with your earlier eversion, or you could ask your testers to delete the existing extension to avoid conflicts.
Well, the simplest way is to pack a .crx file of the tester-only extension then link to it via some cloud-hosting service like Google Drive. There is no way to do this through the Web Store. You could release a different extension as a beta channel though.
Not strictly related to publishing a full extension, but ... you could use feature toggling to control the visibility of new functionality? So wrap the new functionality in toggle checks and only turn the feature on based on some criteria you can decide in a custom roll-out strategy. See enter link description here for an open-source implementation of a feature toggle control system.
If you have a developer account and want to publish it on the chrome web store privately to just testers this is what you have to do:
Go to the Pricing and Distribution page of the extension during the publishing process
Click "Private"
Go to your developer account settings, and in the "Management" section, you can add trusted tester accounts.
You can change the status to public whenever your extension is ready.

Application not published in G Suite marketplace

We have an application published in G Suite marketplace and it has suddenly disappeared.
We guess the problem is related with the migration from Chrome webstore, but we have updated the manifest following the steps in the documentation and the application is still not listed in any of them. However, we cannot find the app by url in G Suite marketplace but we can find it by url in Chrome webstore, what seems pretty strange.
Google Marketplace SDK is enabled and configured in Google Cloud Platform.
I read in the documentation that "Chrome Apps must use manifest version 2", so I don't know if we need to set this to version 1 for G Suite applications.
We are using the same manifest as the documentation, but including "GOOGLE_DRIVE" in the container:
{
"manifest_version": 2,
"name": "Welcome Aboard",
"version": "0.0.0.1",
"description": "a plain text description",
"icons": {
"128": "icons/128x128-icon.png",
"16": "icons/16x16-icon.png"
},
"container": ["DOMAIN_INSTALLABLE","GOOGLE_DRIVE"],
"api_console_project_id": "428464274542",
"app" : {
"launch" : {
"web_url" : "http://www.example.com/morepath/"
}
}
}
Are we missing something?
Thank you in advance!
The problem is solved. We guess the manifest was old and needed to be reuploaded, after that it's just a matter of time because Google needs to validate it.
Anyway we created a support ticket for Google and they didn't mention anything about that. In fact they didn't clarify what was the problem. Maybe they have accelerated the validation process after we contacted them.
JV: Adding link to Google Support Thread
https://issuetracker.google.com/issues/71747494
From Chrome Apps to the Web
Update on December 5, 2017:
Chrome Apps will be removed from Chrome Web Store search & browse
functions in mid-December 2017. Existing apps will continue to work
and receive updates. The Chrome browser will continue to load
packaged and hosted apps on Windows, Mac, and Linux beyond the
previously announced deprecation timeline. Another update will be
posted here when a new date for the Chrome Apps EOL on Windows, Mac,
and Linux has been finalized.

Chrome extension rejection for narrow and unclear purpose

When submitting updates for our extension, we receive the following message with rejection from the Chrome store:
"To have your item reinstated, please ensure:
The purpose of the extension is clear to users; and
The extension either limits its functionality to a narrow focus area of subject matter or to a narrow browser function.
To serve multiple purposes with your extensions, please package each purpose as a separate extension."
Does anyone know the criteria used when determining if the purpose is clear or if the extension is trying to do too much? Our extension is used to demonstrate metrics more conveniently that our clients would normally go to our webpage to see, so it shows a few different but very related items (all of which fit the central theme of showing connected metrics).
Check the Chrome Extension Quality Guideline:
Extensions Quality Guidelines
An extension must have a single purpose that is narrow and
easy-to-understand. Do not create an extension that requires users to
accept bundles of unrelated functionality, such as an email notifier
and a news headline aggregator, or downloads a local executable. If
two pieces of functionality are clearly separate, they should be put
into two different extensions, and users should have the ability to
install and uninstall them separately. For example, functionality that
displays product ratings and reviews, but also injects ads into web
pages, should not be bundled into a single extension. Similarly,
toolbars that provide a broad array of functionality or entry points
into services are better delivered as separate extensions, so that
users can select the services they want.
This is further explained in the FAQS page answering these questions:
Why did Google launch a “single purpose” Chrome extensions policy?
Where can I find the “single purpose” policy?
What does “single purpose” actually mean?

Chrome Web Store review mistakes and inconsistencies

Before deciding to write this issue on Stackoverflow, we tried everything that we could through the normal/official (and slow) contact process (contact form and developers emails).
So this is actually our last try to solve it and also expose some of the Google's review mistakes and inconsistency when reviewing new items (extensions).
We currently have an extension (item hjdkfeeffbfcoanbnkeedjccphcmpehm) that was approved and published few months ago and that is now used by more than 70,000 people, with excellent rating on Chrome Web Store.
https://chrome.google.com/webstore/detail/ad-block-chega-de-publici/hjdkfeeffbfcoanbnkeedjccphcmpehm?hl=pt-BR
This extension is an Ad Blocker and was primarily focused in the Brazilian market, for Portuguese-speaking people.
Due the success of this extension, last week we decided to add two new extensions (Ids: mmcgdfakfmbepgnoogipkccigohjjcim and hgekbffcnpflnhfjkdfdlhffigdfbnae) that would focus on English-speaking and Spanish-speaking countries and, when we tried to add these extensions with the exact same source code that we used for the item that is approved and published, the Chrome review team is always rejecting with these arguments below:
To have your item reinstated, please make any necessary changes to ensure:
All of the files and code are included in the item’s package.
All code inside the package is human readable (no obfuscated or minified code).
Avoid requesting or executing remotely hosted code (including by referencing remote javascript files or executing code obtained by XHR requests).
So, just to make it clear:
1) The extension that is currently approved and published (item hjdkfeeffbfcoanbnkeedjccphcmpehm) does have minified code and even so was approved.
Even so, we did what Chrome's team was requesting and uploaded new packages with human-readable code (not minified) and even so, again, our extensions were rejected;
2) The extension that is currently approved and published (item hjdkfeeffbfcoanbnkeedjccphcmpehm) does load dynamic content from our server, as we need to daily and automatically update our URL list for blocking ads, its impossible to simply build and publish a new extension version every time we need to block a new URL or type of Ad.
Ad Block Plus, uBlock and other Ad Blockers do the same and they are approved and published on the Chrome Web Store.
3) The extension source code of the new items, except by the text that needed to be changed, as the new extensions are in different languages (English and Spanish), is exact the same of the extension that is approved and published, line by line;
In order to prove that from them, we even created a diff file comparing line by line the source of the approved extension with the new extensions, even so this was not enough to prove them we were right and also to simply get some answer on our emails.
We have already argued all of that through email with Chrome's team, but never received any answer or reply, except by the standard "rejection and removal" emails. They simply don't care.
That being said, it's clear to me that:
Google Chrome team is deliberately trying to prevent us for publishing two new Ad Blocker extensions, because they saw the growth that we had with our first extension (that is approved and published);
or
Someone at Chrome's team is simply making repeated mistakes and no one cares nor read our emails;
I hope this message can help us get some human attention within Google's team and also alert you guys about the "really strange" problems that we are facing.
Although this issue was more related to Google's policies than programming in the first place, the solution is still relevant to share for other Chrome extension developers, as it was somehow related about how to load remote resources for your extensions.
After posting this issue Google's team contact us and their question for keeping rejecting our extensions was related to the way we were loading remote resources for our extension.
Google's reply by email
Your new extensions are fetching resource(s) from AAA.com.br. However, the official website(s) registered for your new items is BBB.com. This means that the resource(s) being fetched are coming from remote/third-party source(s) and as per our program policies, we had requested you to check the following:
If all of the files and code are included in the item’s package,
All code inside the package is human readable (no obfuscated or minified code), and
If the items are requesting or executing any remotely hosted code (including by referencing remote javascript files or executing code obtained by XHR requests)
The specific issue here is with #3.
It'll be great if you can give us some context on the resource that you're fetching and how the two websites in question are related. Once we have that information, we'll be happy to help you guys with the publishing process.
As we have two different URLs related to the same extensions (we have three extensions), for the new extensions the URL BBB.com was configured on Chrome Web Store Developers Console, but we were actually loading the resources from the URL AAA.com, that have being in use since we published our first extension.
Although both URLs were added and owner-validated to our Chrome Web Store Developers Console and both URLs were related to the same extensions, we now understood that is a good practice to load the resources from the URL that is actually configured on the extension details, even if you have more than one URL for the same extensions.
So, if you have URL AAA.com and BBB.com, and both are used for the extensions A and B, try to load the resources of the extension A from the URL AAA.com and the resources of the extension B from the URL BBB.com, even with both share the same backend.
This will avoid Google's team to think that you might be loading resources for your extension from unknown 3rd parties, that is forbidden according to the program policies.

Chrome Extension won't appear by filtering in the Web Store, only by search

This has bothered me for a long time, and there is no way to contact Google for support, and their documentation doesn't cover this.
I think I must be missing something, but I can't for the life of me figure it out
If you search for my extension manually, it shows up:
https://chrome.google.com/webstore/search/mortality
but if you just go to the store and apply the relevant filters
https://chrome.google.com/webstore/category/extensions
Extensions, Productivity, Runs Offline
It doesn't show up.
I have had it in the store for a few months now, initially I had thought it just takes some time to show up but I now am fairly confident I'm missing something.
The manifest is correct (Compared to other apps that do show)
Region and language is correct
Has anybody seen this before, and know what the problem is?
I've met this issue before and have contacted with the CWS dev support team. It is because chrome web store doesn't list the item under its category if it has already been installed by the user. I can see your extension under "Extensions, Productivity, Runs Offline" category properly since I didn't install your extension. I think Google CWS team is considering to show up the item under its category no matter if the user has installed it in the future.
CWS works strange, I think some unwanted to Google extensions and apps are blocked and are not shown in the top of categories. You can check this by going to the bottom of the categories and see these unwanted apps and extensions. Simple set the filter to 4 stars and you can find this apps in the place when apps and extensions with promotion tales ended.

Resources