【友盟+】开发者社区

友盟安卓推送的“多包名”怎么用?

发表于 2015-7-10 21:50:09 | |阅读模式

友盟PUSH
友盟PUSH 发表于 2015-7-10 21:50:09 | 显示全部楼层 |阅读模式
我们分几个层次来讨论这个问题:

1. App开发者为什么会有多包名的需求?

  • 首先我们先来说说包名(一般是http://com.company.xxx的形式),包名这个概念是出现在Android生态系统里面的,对于Android系统来说,包名是App的唯一标识。这个对技术人员来说很好理解,对于非技术人员,稍微再啰嗦一下: 如果两个安卓App,A和B包名一样的话,如果先安装A,再安装B,那么会出现B覆盖A的情况,最终只会是B会安装在系统上,即使这是两个完全不同的App。其实在安卓设备上一个App的升级过程就是包名相同,覆盖安装的例子。
  • 接着我们来聊聊多包名的需求,对于一些游戏App来说,如果他们要和市场渠道(诸如91,安智、豌豆荚,360等)做联运的话,那么就必须得使用不同的包名来做区分了,这个其实也是渠道强制要求的,因为这要涉及到最终的流量推广、下载结算等。感兴趣的读者可以看一下我之前回答过的一个问题: 为什么有的安卓App在不同市场渠道发版的时候使用不同的包名呢? - 沙漠的回答, 解释的比较详细。这种场景占绝大多数,所以我们网站的用户引导语也说得是“若一个APP针对不同渠道有不同的包名,则可通过开通多包名支持一个appkey对应多个包名发送消息
  • 最后,再补充一种小众的需求,这种场景不是太常见,但是和我们在下文提出的友盟推送提供“多包名”关系比较大,所以还是提一下。有些App是系列App,比如小说类的,或者明星类App。开发者在开发这些App的时候其实是有一个代码模板的,大部分时候只需要改改App的Icon,Name等就可以生成一个新的App,但是既然是不同的App,那么包名部分还是要去变换一下的(包名是安卓系统上对App的唯一标识)。这种场景大多出现在一些外包类的公司里面。

2. 为什么要在友盟推送中提供“多包名”功能?
  • 首先来说说“包名”在消息推送系统中的作用,安卓推送从原理上来说是设备与后台服务器建立一条长连接通道,通过这条长连接通道,服务器端将要下发的消息发送到设备上。注意,这里的下发到达的是设备,但是最终要将消息/通知展示出来,必须得把消息路由给设备上的App,App的“包名”就是路由的依据,因为包名是App在安卓系统的唯一标识。所以说“包名”在安卓推送里面是一个至关重要的环节,开发者在友盟推送后台创建App的时候,需要填写包名信息。服务器端做消息下发的时候,也会将包名的信息附带上,目的是将消息最终投递给这个包名对应的App本身。如果大家也集成过其它第三方推送服务商(如极光、信鸽等),就会发现安卓推送包名是必须的,这个不是友盟推送独创的,而是Android系统的设计就是这样要求的。
  • 再来说说“Appkey”在友盟平台中的作用:Appkey是友盟对App的唯一标识,这个只是友盟平台的约束。如果开发者在两个完全不同的应用中使用同一个Appkey的话(当然一般不会有这样的情况),那么友盟平台会认为这是同一个App,因为appkey是相同的。对于上文中我们提到的两种case,一种是同一个App在不同渠道使用不同的包名,本质上,这是同一个App,所以在友盟后台使用同一个Appkey是合理的;对于第二种情况,同一份代码生成的形式上稍微有些变化的多个App,开发者在友盟后台一般也会把这些Apps设置成一个Appkey了,比如开发者弄了很多个娱乐明星App,其实他最后想了解的是这么多个娱乐明星App一共有多少下载,有多少新增,有多少日活等,而不是专门关注某一个明星App的数据量。
  • 有了前面两点的铺垫,最后我们来讲讲友盟推送为什么提供“多包名”功能:如果我们严格限制一个appkey只能有一个包名的话,那么对于上述两种需求的开发者,他们得在友盟推送后台创建多个App,牵涉到推送消息的时候,得到每个App下面都去推一次消息。显然这是一种非常不合理的做法,且会给开发者带来很多麻烦,这个时候如果我们能放开限制,提供一个App对应多个包名的功能的话,那么上述的问题就迎刃而解了。这个就是友盟推送提供“多包名”的原因。毕竟给开发者提供方便,是友盟推送追求的目标,尽管很多功能需要我们在技术层面上做非常大的调整,后续有时间的话,我会和大家聊聊我们几次技术架构升级的痛点:)

3. 如何使用多包名?
  • 这个大家在友盟推送的网站上是能看到的,首先需要去“申请开通多包名”,申请开通多包名之后,就可以添加多个包名了,我们不限制添加包名的个数多少,但是所有包名总长度加起来不能超过4K(按照平均包名长度来看,这大概是200~300个包名),对于大多数开发者来说,这个应该能满足需求了。需要注意的一点是,如果开通多包名之后,第一个添加的包名,我们称之为主包名,就不能再改变了(如果没有开通多包名的话,主包名在测试阶段是可以修改的)。主包名是默认的包名,一经确定下来就不允许再修改了。
1.png

2.png



4. 使用多包名有什么需要注意的地方?
  • 开发者在测试使用多包名的时候,一定要注意在App层面把包名(配置文件Mainfest,以及代码中的包名)都改成你要测试的另一个包名,很多时候开发者反馈在测试阶段多包名不生效,或者收不到消息,经过我们排查,绝大部分都是因为开发者没有把包名改过来。
  • 开发者在渠道上线之后,一定要记得在友盟推送后台也把渠道新增的包名添加进去。否则会导致新增的渠道包在安装之后无法和服务器建立长连接,进而导致推送不生效。这个是开发者比较容易忽略的,特别是在一些新拓展的渠道市场上打包的时候,所以当前友盟推送会定期去分析这类错误日志,如果发现后,我们会通过EDM、站内信、商务人肉通知等方式告知开发者去添加包名(这里稍微夸下自家产品: 友盟在开发者服务方面做得非常到位)。
  • 如果一台设备上安装了同一个App在多个渠道的安装包的话,那么友盟推送的处理逻辑是只有最后一个安装的App能收到推送消息,之前安装的App是收不到通知的,这是因为我们后端服务器以客户端最后一次上报的包名为准的。在真实使用场景中,这种case应该是不会发生的,只不过在测试阶段的时候,开发者比较容易碰到和问到这个问题。

欢迎大家关注我们的新浪微博账号"友盟推送": Sina Visitor System




上一篇:为什么ios推送消息不支持emoji表情啊
下一篇:服务器推送报2004错误

您需要登录后才可以发帖 登录 | 立即注册

本版积分规则

发表主题

精彩推荐

U-App即将升级,一站式运营你的“超级用户”
底部大福利,可优先体验内测账号哦~ 超级用户火了,因为互联网公司都感受到存量竞争的压力,App的运营核心
关于事件计算口径变更说明(2018.5.15)
影响范围:AppTrack产品全局数据1)计算基准的变更事件计算的周期基准变更:计算基于点击发生日期后续15天
友盟+大揭秘:阿里“亲橙里”的数据黑科技
4月28日,阿里首个智慧商业亲橙里开业。汇集盒马鲜生、天猫国际、天猫精灵、阿里小厨等众多业态,亲橙里通

关注我们

新浪微博
微信

欢迎关注友盟官方微博微信!

返回列表