【友盟+】开发者社区

"Alias"是什么, 该如何使用?

友盟PUSH 发表于 2016-10-21 14:07:33 |

友盟PUSH
友盟PUSH 发表于 2015-7-8 14:19:57 | 显示全部楼层 |阅读模式
不少开发者在使用友盟推送的时候,对Alias的用法和使用场景不是太理解,这篇文章给大家普及一下Alias相关的内容:

我们先从产品层面上对Alias的设计思想说起,这样能帮助大家更好的理解和使用Alias。在我们官方文档里面,Alias的定义是: "设备别名,将别名与设备做绑定,便于部分App开发者使用自有账号或者第三方账号体系来做消息推送"。定义里面涉及到几个重要的点:

  • 首先,Alias是和设备绑定的,友盟推送对设备的标识是device-token,也就是说,Alias与友盟device-token是绑定对应的。从这个层面来讲,Alias可以是开发者的账号系统(包括第三方账号体系),也可以是开发者自己对设备的标识体系(如安卓设备上的imei+mac),或者是其它的开发者能保证唯一性的ID体系,这些都是由开发者自己决定的。提问中问到是否可以把Alias理解为账号系统,狭义上讲可以这么理解,实际上,友盟推送赋予了Alias更多的灵活性。
  • 其次,结合到越来越多的App提供第三方社交平台账号登陆的特点,我们在Alias的设计上也充分考虑到了账号的需求,所以在官方文档中,我们提到在使用Alias的时候,必须要关联一个alias_type, 如果是开发者自定义的alias(包括自有账号系统),这个alias_type是可以随便定义的;如果是用了第三方账号系统,我们预提供了20多种主流的开放平台的账号类型,如新浪微博(SINA_WEIBO), 微信(WEIXIN)等。填写alias_type的作用是,友盟推送会和友盟社会化分享服务做数据上的打通,更好的从数据层面发挥价值,为开发者服务。说到这里,我们再次精确一下Alias的概念,即别名(Alias)+别名类型(alias_type)与设备的绑定。
  • 最后,我们来聊聊Alias的用法,这个也是开发者们非常关心的。我们Alias的绑定操作是在SDK端提供的,开发者只需要在SDK端调用mPushAgent.addAlias(alias, alias_type)这个接口,友盟推送SDK就负责把alias+alias_type与友盟的device-token做绑定,将绑定关系回传到友盟后端服务器。之后开发者就可以根据自有业务逻辑,调用友盟服务器端接口,根据Alias来做个性化推送了。由此来看,Alias的作用是能让开发者结合自有的账号(此处需要理解成广义的账号)体系,来做更个性化、精细化的推送。下图是一个简化的Alias架构,帮助大家理解Alias的用法:
d14c21f4d4c2bce62215312aa55f930b_b.jpg
关于Alias的相关接口,我们的友盟消息推送Android文档提供了非常丰富的接口供开发者调用:
[Java] 纯文本查看 复制代码
添加Alias(支持一个alias对应多个devicetoken):
mPushAgent.setAlias("zhangsan@sina.com", ALIAS_TYPE.SINA_WEIBO);

添加Alias(设置用户id和device_token的一一映射关系,确保同一个alias只对应一台设备):
mPushAgent.setExclusiveAlias("zhangsan@sina.com", ALIAS_TYPE.SINA_WEIBO);

移除Alias
mPushAgent.deleteAlias("zhangsan@sina.com", ALIAS_TYPE.SINA_WEIBO);

注意,在App服务器端调用友盟服务器端接口做推送的时候,一定不要忘了传入alias_type的参数。

关于Alias基本的话题差不多解释清楚了,最后再和大家深入聊聊Alias用作账号系统涉及到多账号多设备登陆的问题,这个时候,alias_type就派上用场了,相信看过这个章节后,大家会对我们Alias的设计机制有更深入的理解:
  • 1. 多个账号登陆同一台设备,具体还要细分为两种case:
    • 如果是同一个alias_type,那么以最后绑定的alias为准。举个例子: (alias_A, alias_type_A)先做了绑定,之后(alias_B, alias_type_A)后做了绑定,那么,如果这个时候给alias_A发消息,设备是不会收到消息的,因为在友盟推送后台device-token是和最后登陆的alias_B做绑定的。这个在实际业务场景中也成立,最后一个登录的账号才是这台设备当前真实的用户。
    • 如果不是同一个alias_type, 那么前后两个绑定的alias均生效。举个例子: (alias_A, alias_type_A)先做了绑定,之后是(alias_B, alias_type_B)做了绑定,那么不管是给alias_A发消息,还是给alias_B发消息,设备均能收到消息。因为alias_type变化之后,友盟推送后台确定不了这是同一个用户(eg: 同一个用户使用不同平台的账号登录),还是不同的用户(不同的用户,使用不同的账号登录),友盟只能简单的判定这两个不同alias_type的账号是两个不同的账号。这种场景是需要特别注意的,建议开发者在实际的集成过程中尽量避免这种使用场景。
  • 2. 同一个账号登录多台设备:
    • 这种情况处理起来就比较简单了,即一个alias和多个device-token做绑定。如果给这个alias发消息,我们会给所有和这个alias绑定的设备都去推送消息。

开发者在具体使用过程中,可能会想到Alias做了绑定(addAlias)或者解除(removeAlias)之后,多长时间能在后端生效。 Alias接口,是一个实时的接口,不管是在“测试模式”下,还是在“正式模式”下,都是实时生效的。不过在集成测试阶段,还是建议开发者把手头的设备添加到"测试模式"下的测试设备集合里面,关于“测试模式”的更多介绍,请参考友盟推送“测试模式”介绍


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











上一篇:IOS 获取网站上自定义参数
下一篇:iOS添加友盟推送后无法添加徽标


MT
MT 发表于 2015-7-9 11:32:46 | 显示全部楼层
你好,我想问一下是不是只要不执行removeAlias的话alias就会一直生效?不会过期吧?

友盟PUSH
友盟PUSH 发表于 2015-7-9 13:30:30 | 显示全部楼层
MT 发表于 2015-7-9 11:32
你好,我想问一下是不是只要不执行removeAlias的话alias就会一直生效?不会过期吧? ...

是的,永久性存储的。


njbxnfkn
njbxnfkn 发表于 2015-8-6 18:05:39 | 显示全部楼层
请问,同一账号登陆多台设备,假如在某台设备上调用removeAlias,其他设备上的别名是否也会被remove?

友盟PUSH
友盟PUSH 发表于 2015-8-8 10:36:39 | 显示全部楼层
njbxnfkn 发表于 2015-8-6 18:05
请问,同一账号登陆多台设备,假如在某台设备上调用removeAlias,其他设备上的别名是否也会被remove? ...

我和负责这个逻辑的同事确认下。



kkzz
kkzz 发表于 2015-9-26 16:41:37 | 显示全部楼层
我自己这个设备add了新的alias,为什么服务推送旧的alias还是到我这里了,我这是同一个aliasType,而且感觉removeAlias也是无效的,remove了还是会推送过来

友盟PUSH
友盟PUSH 发表于 2015-9-27 19:07:33 | 显示全部楼层
kkzz 发表于 2015-9-26 16:41
我自己这个设备add了新的alias,为什么服务推送旧的alias还是到我这里了,我这是同一个aliasType,而且感觉 ...

你提供一下appkey,新旧alias,以及alias-type,以及你收到的那条错误信息,我们帮你看一下。


友盟PUSH
友盟PUSH 发表于 2015-11-19 13:28:49 | 显示全部楼层
wodedd 发表于 2015-11-16 19:30
你好  为什么没有豆瓣这个类型呢

你们可以自己定义一个douban,除了预置的类型外,可以自定义类型的

mal_258
mal_258 发表于 2015-12-23 18:28:14 | 显示全部楼层
你好,我想问一下,如果是这样,在同一部手机里面有两个app,
APP A添加Alias如下:mPushAgent.addAlias(mac, alias_type_A);

APP B添加Alias如下:mPushAgent.addAlias(mac, alias_type_B);
这样是Alias相同,alias_type不相同,按照你们上面说的,同一个账户,同一个设备,推送消息里那个APP都可以收到?


竹白
竹白 发表于 2016-7-12 11:00:09 | 显示全部楼层
你好,我用测试模式进行别名测试能正常发送推送.但我在php服务端调用别名发送的时候.都是报5000错误,设备号不对.

zhaoheng
zhaoheng 发表于 2016-7-13 10:53:29 | 显示全部楼层
竹白 发表于 2016-7-12 11:00
你好,我用测试模式进行别名测试能正常发送推送.但我在php服务端调用别名发送的时候.都是报5000错误,设备号 ...

http://bbs.umeng.com/thread-11507-1-1.html你看下这个帖子

topflytech
topflytech 发表于 2016-7-19 09:10:41 | 显示全部楼层
友盟PUSH 发表于 2015-9-27 19:07
你提供一下appkey,新旧alias,以及alias-type,以及你收到的那条错误信息,我们帮你看一下。  ...

我也发现这个问题。设备add了新的alias,为什么服务推送旧的alias也是能收到的。就算先remove了也没用。。。

友盟PUSH
友盟PUSH 发表于 2016-7-19 10:38:32 | 显示全部楼层
topflytech 发表于 2016-7-19 09:10
我也发现这个问题。设备add了新的alias,为什么服务推送旧的alias也是能收到的。就算先remove了也没用。 ...

你应该是先remove旧的alias,再add新的alias。是不是顺序搞错了呢?

oops36
oops36 发表于 2016-8-18 17:12:54 | 显示全部楼层
你好,我想咨询一个问题。如果我同一个alias type和alias对应了几百个甚至几千个用户,就好像这个人在几千台机器上登录,这种情况下的推送,会成功吗?
我问这个问题是这样的原因。如果不用这种模式,那么要么使用tag,给这几千个用户标记这个tag。或者,获取着几千个用户的device token,然后文件播。但是如果可以给这几千个设置同样的alias和alias type,这样可吗?
目前alias type有没有数量限制?谢谢楼主!

友盟PUSH
友盟PUSH 发表于 2016-8-19 10:29:16 | 显示全部楼层
oops36 发表于 2016-8-18 17:12
你好,我想咨询一个问题。如果我同一个alias type和alias对应了几百个甚至几千个用户,就好像这个人在几千 ...

不可以的,请使用打tag的方式。

laoyaio
laoyaio 发表于 2016-9-5 11:42:59 | 显示全部楼层
您好!我addAlias后通过打印日志,输出的结果为success( - add alias param [{
    alias = 7d966c3b546345999142bb42cd864e75;
    "device_token" = 5575ecddd0f14f2c8282aebec3dff02369553e9368eea858d19f76a1bf29086d;
    header =     {
        access = WiFi;
        "app_version" = 1;
        appkey = 57c7e78c677baa015d000219;
        carrier = "\U4e2d\U56fd\U79fb\U52a8";
        channel = "App Store";
        country = CN;
        "device_model" = "iPhone7,2";
        "display_name" = "\U53e3\U888b\U96f6\U94b1\U5546\U6237";
        idfv = "F1DCCA58-6B9B-4B11-BE5A-E9025D8616D6";
        "is_jailbroken" = NO;
        "is_pirated" = YES;
        language = "zh-Hans-CN";
        oid = "B6233A33-D2D7-4911-9358-6E555A13C9BA";
        os = iOS;
        "os_version" = "9.3.5";
        "package_name" = "com.cn.ZhJTech.MerchantiPhone";
        "req_time" = "1473044890.732466";
        resolution = "1334 x 750";
        "sdk_type" = iOS;
        "sdk_version" = "1.3.0(c2e3eca)";
        "short_version" = "1.0.8";
        timezone = 8;
    };
    type = 2;
}] ),但是我们的后台会打印错误信息:与alias对应的device_tokens为空,请问是什么原因造成的

友盟PUSH
友盟PUSH 发表于 2016-9-5 14:20:00 | 显示全部楼层
laoyaio 发表于 2016-9-5 11:42
您好!我addAlias后通过打印日志,输出的结果为success( - add alias param [{
    alias = 7d966c3b54634 ...

重绑定一次试试看呢? 确认一下appkey,alias,alias-type这些参数是否都正确,其实你在网站的工具里面,也可以查询,输入alias,alias——type,完后查询看下device token是否存在。



友盟PUSH
友盟PUSH 发表于 2016-9-6 11:58:37 | 显示全部楼层
wanecheng 发表于 2016-9-6 09:24
同一个账号, 登录了 ios  和 安卓的  能否都接收到?

我们是区分appkey的,android,iOS是两个不同的appkey。 除非你在每个平台都发送一次,否则不可能出现你说的这种case。

wanecheng
wanecheng 发表于 2016-9-6 14:01:13 | 显示全部楼层
友盟PUSH 发表于 2016-9-6 11:58
我们是区分appkey的,android,iOS是两个不同的appkey。 除非你在每个平台都发送一次,否则不可能出现你 ...

我们有自己的命名方式,所以使用了alias方式,用户都没有标识区分是ios ,还是Android的用户, 而将这一群的用户集,分别调用一次Android的推送,和一次ios 的推送, 是否就可以全部把所有用户都推送出去了?

友盟PUSH
友盟PUSH 发表于 2016-9-6 14:13:56 | 显示全部楼层
wanecheng 发表于 2016-9-6 14:01
我们有自己的命名方式,所以使用了alias方式,用户都没有标识区分是ios ,还是Android的用户, 而将这一 ...

是这样的。 但是如果一个alias又在android平台出现过,又在ios平台出现过,会出现两个平台都会受到消息的情况。

wanecheng
wanecheng 发表于 2016-9-7 11:16:50 | 显示全部楼层
友盟PUSH 发表于 2016-9-6 14:13
是这样的。 但是如果一个alias又在android平台出现过,又在ios平台出现过,会出现两个平台都会受到消息的 ...

是这样的,如果两个平台都收到消息的情况也没有问题,但是如果一个alias 在Android平台上绑定了, 另一个新alias 在ios平台上绑定了 ,这两个alias 组成一个alias集,分别调用Android推送,和ios推送的话,在Android平台上没有ios的那个alias ,和在ios平台上,没有Android的那个alias  , 是否会报错?

友盟PUSH
友盟PUSH 发表于 2016-9-7 15:22:42 | 显示全部楼层
wanecheng 发表于 2016-9-7 11:16
是这样的,如果两个平台都收到消息的情况也没有问题,但是如果一个alias 在Android平台上绑定了, 另一个 ...

如果是单播的话,会报错,会报 alias对应的token为空的错误。
如果是批量,或者按照文件发,我们是不会报错,因为那个是异步处理的。

建议你们还是本地保存一个platform的信息,这样发的时候,节省我们双方的带宽和服务器资源。

342
342 发表于 2016-10-19 17:19:52 | 显示全部楼层
请问3.0.1版本没有mPushAgent.deleteAlias("zhangsan@sina.com", ALIAS_TYPE.SINA_WEIBO);怎么处理
E/AndroidRuntime: FATAL EXCEPTION: Thread-11670
                                                                          Process: com.leeone.leeoneedutest, PID: 25517
                                                                          android.database.sqlite.SQLiteException: attempt to write a readonly database (code 1032)
                                                                              at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:181)
                                                                              at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:137)
                                                                              at android.content.ContentProviderProxy.update(ContentProviderNative.java:568)
                                                                              at android.content.ContentResolver.update(ContentResolver.java:1333)
                                                                              at com.umeng.message.MessageSharedPrefs.addAlias(MessageSharedPrefs.java:220)
                                                                              at com.umeng.message.UTrack$2.run(UTrack.java:719)
                                                                              at java.lang.Thread.run(Thread.java:818)
10-19 17:18:15.295 2207-3361/? W/ActivityManager:   Force finishing activity 1 com.leeone.leeoneedutest/com.leeone.common.tp.

友盟PUSH
友盟PUSH 发表于 2016-10-21 14:07:33 | 显示全部楼层
342 发表于 2016-10-19 17:19
请问3.0.1版本没有mPushAgent.deleteAlias("zhangsan@sina.com", ALIAS_TYPE.SINA_WEIBO);怎么处理
E/Andr ...

看起来是没有写权限,你查查看,或者换个手机测试一下
12下一页
您需要登录后才可以发帖 登录 | 立即注册

本版积分规则

发表主题

精彩推荐

【友盟统计报表解读】之错误分析iOS版
错误分析功能说明 1.概述错误分析是友盟为移动开发者提供的Crash收集和分析工具,帮助开发者监测App在移动
历尽抉择与磨合,从小处让数据智能落地
2016年1月底,阿里巴巴宣布之前收购的友盟、缔元信和CNZZ三家数据服务公司,合并成立全新的全域大数据服务
求助,QQ好友分享成功后,有几率在toolbar上的icon加一个focus
求助,QQ好友分享成功回来后,有几率在toolbar上的icon加一个focus的样式,微信、微博、QQ空间都没有这个情

关注我们

新浪微博
微信

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

在线客服
返回顶部 返回列表