超400万用户插件下架始末

本文讲述了GoFullPage网页截图应用因权限误解被Chrome Web Store下架,开发者分享了应对过程和经验,强调团队协作、社区支持及透明沟通的重要性。

作者 | Claire Kao
译者 | 祝涛
出品 | 优快云(ID:优快云news)

在Chrome Web Store有一款很受欢迎的网页截图应用——GoFullPage,它所实现的功能并不复杂,使用这个插件可以将完整的网页进行截图,哪怕超出了屏幕范围也能滚动截图。这一看似简单的功能却给用户带来了极大的便利,因此深受用户喜爱。

在Chrome扩展中,该应用是下载量最大的独立应用之一。许多用户选择此应用是因为Chrome Web Store Store的高下载量和评级:

在这里插入图片描述

来源于:INDIE HACKERS

然而,在使用人数过400万的情况下,GoFullPage突然收到谷歌的下架通知,这是为何?GoFullPage开发人员分享了下架的整个经过,并分享了一些建议,笔者对原文进行了翻译,不妨一起看下。

大约10年前这个应用在@mrcoles的个人电子邮件地址上发布。当我开始运营日常业务时,我们还无法支持多个用户访问。

作为一个创可贴式的解决方案,我们进行了这样一个设置:将某些通知从@mrcoles的个人邮箱自动转发到我的工作邮箱。我们没想到的是,Chrome发送给我们的通知是全新的国外电子邮件地址,导致我们错过了一些关键信息。

这就让我回忆起了那个倒霉的早晨。那天一早,我就注意到大量的消息和关于我们应用程序的推文。(感谢那些一直在报告问题的用户们。)

很快,我们就发现,我们错过了来自Chrome的警告邮件。这中间有一个权限的误解。最终,应用被下架了。

老用户没有受到影响,但任何寻找我们应用的新用户都会被导向一个404页面:

https://twitter.com/nealdaringer/status/1415287683816071169

在接下来的60个小时里,几乎所有的客户都在向我们报告这个问题。直到三天后,我们的应用程序才恢复了原样。自那以后,事情才得以解决。

在这里插入图片描述

来源于:INDIE HACKERS

在这个小灾难中,我们总结出了一些经验教训,有四个要点,在这里分享给大家。

坚持团队协作的工作方式

有些独立项目只是为了好玩而制作,并不是为了盈利或发展。但如果你发现自己回到了一个项目中并进行了改进/迭代,那将是一个很好的时机,你可以认真考虑让其他人参与其中。

即使是一个没有具体目标的个人项目,在开创过程或早期采取措施也比在后期修复要容易得多。将一个10年的个人项目变成一个由合作团队管理的项目,远比我们想象中的要困难。我们的拖延最终导致了这场60小时的灾难。

  • 对于Chrome Web应用商店或浏览器扩展,以下是有关如何创建组发布者的说明:
    https://developer.chrome.com/docs/webstore/group-publishers/

成为在线社区的一员是值得的

应用被下架后,我们去找了一切有影响力或有见识的人。虽然审查过程是受保护的、不公开的,但我们能够与谷歌内部的一些人取得联系。我们之间的联系对这个问题的解决至关重要。那么该怎么做呢?通过在线帮助他人,提出问题,丰富你的空间——而不是冷眼旁观。

  • 如果你在Indiehackers上读到这篇文章,那么恭喜你,你已经在积极参与社区活动了!Indiehackers上的用户可能会给你意想不到的帮助,你现在就可以评论或者提问。
  • @mrcoles多年来一直在https://crbug.com上反馈bug。他活跃的bug报告让一些帮助我们的人认出了他!
  • 一个好的平台应该让用户对其进行反馈和提问。我们参加了谷歌I/O大会,并向谷歌Chrome内部人员介绍自己并开始建立伙伴关系。
  • 浏览器扩展特定资源:
    https://groups.google.com/a/chromium.org/g/chromium-extensions
    RSS feed for extensions blog posts on developer.chrome.com

诚实、透明、始终如一

在整个事件中,我们所能做的就是保持沟通和透明。我们的记录能够证明事情的真相,并且能够缓解用户的担忧。

没有什么比诚实、透明和一致性更适用于独立行业,用户对我们的信任就是我们的品牌价值。

积极应对

Chromium Extension谷歌小组上,总有人为一个被下架的应用程序寻找答案。当然,我们必须尽一切可能避免这种情况。我们总以为我们已经很好地抵御了这种可能性,但最终,噩梦还是发生了。不过我们还是生存了下来。因此,你不可能计划每件事,总有坏事会发生,但关键在于你如何应对,以及你从中学到什么。

其他建议

一个小小的正面意义

关于这个事件的每一个报告,几乎都是用户开心地把我们介绍给其他朋友或同事!

感谢和理解

非常感谢那些在Chrome中倾听我们的意见,解决我们的困惑,并支持我们的人。我们也明白为什么会发生这样的事情!Chrome网络商店在很长一段时间里都不受监管,恶意行为猖獗。在用户的保护方面,该平台还略为稚嫩。我们把这次事件看作是“成长中的烦恼”,因为Chrome正在努力平衡用户隐私和开发者友好性。

我们乐观地认为,这一忐忑的局面将会缓和下来。我们将继续创造一个以用户隐私为核心宗旨的优质产品。我们将继续努力为用户创造价值,而不是从他们身上榨取价值。

Indiehackers的用户在这个帖子的评论区进行了讨论,有人提出,作为第一次提交扩展的开发者,他也有类似的经历。有时真的不清楚哪里出了问题,因此他同意原文作者的建议,他认为,找谷歌公司是有帮助的,最好是了解内部的人。

有人则进行了补充,他认为不能轻易让一家公司完全控制你自己的软件的发布。

你有什么其他的想法或者建议呢?欢迎与我们分享。

参考链接:
https://www.indiehackers.com/post/google-removed-our-4m-user-chrome-extension-this-is-what-happened-and-how-we-fixed-it-851c785b10

内容概要:本文围绕“基于数据驱动的 Koopman 算子的递归神经网络模型线性化,用于纳米定位系统的预测控制研究”展开,提出了一种结合Koopman算子理论与递归神经网络(RNN)的数据驱动建模方法,旨在对非线性纳米定位系统进行有效线性化建模,并实现高精度的模型预测控制(MPC)。该方法利用Koopman算子将非线性系统映射到高维线性空间,通过递归神经网络学习系统的动态演化规律,构建可解释性强、计算效率高的线性化模型,进而提升预测控制在复杂不确定性环境下的鲁棒性与跟踪精度。文中给出了完整的Matlab代码实现,涵盖数据预处理、网络训练、模型验证与MPC控制器设计等环节,具有较强的基于数据驱动的 Koopman 算子的递归神经网络模型线性化,用于纳米定位系统的预测控制研究(Matlab代码实现)可复现性和工程应用价值。; 适合人群:具备一定控制理论基础和Matlab编程能力的研究生、科研人员及自动化、精密仪器、机器人等方向的工程技术人员。; 使用场景及目标:①解决高精度纳米定位系统中非线性动态响应带来的控制难题;②实现复杂机电系统的数据驱动建模与预测控制一体化设计;③为非线性系统控制提供一种可替代传统机理建模的有效工具。; 阅读建议:建议结合提供的Matlab代码逐模块分析实现流程,重点关注Koopman观测矩阵构造、RNN网络结构设计与MPC控制器耦合机制,同时可通过替换实际系统数据进行迁移验证,深化对数据驱动控制方法的理解与应用能力。
以下是几种常见编程语言中去除字符串首尾逗号和空格的方法: ### JavaScript ```javascript let str = " , example,string, "; str = str.trim().replace(/^,+|,+$/g, ""); console.log(str); ``` 在 JavaScript 中,`trim()` 方法用于去除字符串首尾的空格,`replace()` 方法结合正则表达式 `^,+|,+$` 去除首尾的逗号。 ### Java ```java public class RemoveCommasAndSpaces { public static void main(String[] args) { String str = " , example,string, "; str = str.trim().replaceAll("^,+|,+$", ""); System.out.println(str); } } ``` Java 里,`trim()` 方法去除首尾空格,`replaceAll()` 方法使用正则表达式去除首尾逗号。 ### Python ```python str = " , example,string, " str = str.strip().strip(',') print(str) ``` Python 的 `strip()` 方法可以去除字符串首尾的指定字符,先去除空格,再去除逗号。 ### C++ ```cpp #include <iostream> #include <string> void Trim(std::string& str) { str.erase(0, str.find_first_not_of(" \t,")); str.erase(str.find_last_not_of(" \t,") + 1); } int main() { std::string str = " , example,string, "; Trim(str); std::cout << str << std::endl; return 0; } ``` C++ 中,自定义的 `Trim` 函数通过 `erase()` 和 `find_first_not_of()`、`find_last_not_of()` 方法去除首尾的空格和逗号。 ### Go ```go package main import ( "fmt" "strings" ) func main() { str := " , example,string, " trimmedStr := strings.Trim(str, " \t,") fmt.Println(trimmedStr) } ``` Go 语言使用 `strings.Trim()` 函数去除字符串首尾的空格和逗号。 ### PHP ```php $str = " , example,string, "; $str = trim($str, " \t,"); echo $str; ``` PHP 的 `trim()` 函数可以去除字符串左右两边的空格和指定字符。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值