返回 登录
0

【新闻背后】美团外卖商家Android版强杀竞争对手App

下午,一位程序员小伙伴在知乎上发了一则帖子技术揭幕贴,题目也是广为人知的知乎体「如何评价美团外卖强杀竞争对手的 App 进程?

简而言之,该程序员在反编译完美团外卖商家Android版后,发现其中有一个杀死后台运行进程的权限,通过Android开发者官方文档,他随之找到了killBackgroundProcesses(String packageName)的调用处,发现美团的Android程序员直接用Hardcode写死了四款App的包名——饿了么商家版、点评商家版、淘点点商家版、百度外卖商家版。

这位举报者指出,美团调用killBackgroundProcesses(String packageName)方法的类名是FriendUtil(这个类名倒是很厚道,呵呵),最后他表示美团大胆地用Hardcode封杀的行为,实在有点过了。

小编也建议做「有节操」的Android 开发者,共同维护平台公平性,希望这次不要又拿实习生出来顶包。

【更新】

美团还是反应很快的。公司的副总王慧文在晚7点多时回应,9点多给出了详细的调查结果,“全量发版更新掉了这段代码”,并道歉。

另外代码的编写者(已离开美团,前员工也能很快找到并回应,看人家这执行力)也给出了自己的说明,并道歉。两者的核心内容是一致的,商家App需要通过蓝牙打印,但Android手机蓝牙模块只能允许一个App与蓝牙设备连接,为了解决争用导致无法打印的问题,就直接写了关闭其他应用的代码。由于Android软件”基本上都会加上后台自启”,所以其他应用其实并不会真正失效。

知乎上很多讨论来自“杀与被杀”当事双方,都有些意气用事,多数都没什么价值。但其中董涵的回答中,建议这种情况下,可以“使用断开后重连的方式来强制再次连接……毕竟你们使用的蓝牙打印机应该是不同的,可以判断出是否是自己应用连接上。实在不行,可以先disable后再enable。”

十三郎还给出了代码:

BluetoothAdapter.getDefaultAdapter().enable(); BluetoothAdapter.getDefaultAdapter().disable();

对此,代码编写者回复:

  1. 商家那块一般只会放一台蓝牙打印机,所以当一个app连接上的时候,另外一个app必然不能连接
  2. 关于断开蓝牙重连的思路,这个早就尝试过,但是没有效果,原因据我猜测,同行的app监听的蓝牙广播,并且后台自启动,所以即使我们应用在前台,只要他们应用在后台运行着,蓝牙端口也会被抢先占用,所以才考虑kill后台进程的方案

饿了么的产品经理sacho则从产品角度提出了一种解决方案:

针对你说的蓝牙端口被其他 app 占用无法连接的问题,饿了么的产品经理会给出如下解决方案:弹窗提醒用户问题所在,请用户选择是否强行关闭其他 app。

感觉比较合理。

【头条点评】

美团在代码中杀对手进程的做法当然是不对的,这个毋庸置疑,不管你初衷如何,影响多大,竞争情况下类似会引起冲突的任何举措都要特别谨慎。否则就是授人以柄,一旦被人抓住,你就等着唾面自干吧。

但这次事件的性质与当年3Q大战还是有很大区别的:杀死会自动重启的进程与直接卸载对方的软件当然不可同日而语。

从格调上也有区别,那时候是你死我活,两边都有很重的草莽气。现在虽然也有很多嘴仗(大部分没什么必要),但双方的应对都理性、绅士多了,很欣喜业界新兴公司的这种进步。

现在问题来了,遇到这种情况,最合理的解决方案是什么呢?吵架没什么意思,欢迎大家继续讨论正事儿。

评论