⑴ android友盟推送集成
友盟官方文档: https://developer.umeng.com/docs/67966/detail/153908
第一次认真集成推送,碰到了一些问题,记录一下。
首先讲一下实现原理,我们用的是友盟。Android比iOS要麻烦很多。
友盟集成是需要后端配合的,具体就是后端调用友盟的接口,向友盟推送一条消息,然后友盟再向在他们平台注册过的app发送一条消息,我们要做的就是把接收到的消息展示出来。
需求:用户要能在各个时候都能收到我们APP的推送,并且能对应打开不同的界面
解决方法:集成友盟,但是Android只简单集成友盟是不行的,在APP被杀死以后,就接收不到通知了,所以需要额外集成厂商通道。另一个和iOS不一样的就是,iOS在打开当前APP的时候,可以收到横幅推送,但是Android需要自己做。
什么是厂商通道:
由于国内手机厂商过多地使用应用保活方案实现消息推送功能,因此导致手机耗电加快、卡顿。国内部分手机厂商发现了这一问题,自己推出了消息推送服务。这些手机厂商通过进程管理,杀死后台进程,并提供消息推送能力,让消息通过手机厂商官方推送通道下发到应用程序中。这类典型的手机厂商有小米、华为等。
大致分为两部分:
正常推送集成。
五大厂商通道集成。
详见友盟官方文档: https://developer.umeng.com/docs/67966/detail/153908
点击推送信息以后的处理,收到推送的时候的回调
UmengNotificationClickHandler notificationClickHandler =new UmengNotificationClickHandler() {
@Override
public void dealWithCustomAction(Context context, UMessage msg) {
//点击推送通知以后的处理
Log.i(TAG,"notificationClickHandler "+msg);
}
};
UmengMessageHandler messageHandler =new UmengMessageHandler() {
@Override
public void dealWithCustomMessage(final Context context, final UMessage msg) {
Log.i(TAG,"message "+msg);
}
@Override
public NotificationgetNotification(Context context, UMessage uMessage) {
//手机收到推送的时候的回调
Log.i(TAG,"message ");
//返回默认构造
return super.getNotification(context, uMessage);
}
};
mPushAgent.setNotificationClickHandler(notificationClickHandler);
mPushAgent.setMessageHandler(messageHandler);
设置最多能看到的推送条数
mPushAgent.setDisplayNotificationNumber(3);
如果需求中需要打开APP中某个界面,责需要观察 "after_open"字段,默认是 "go_app",需要服务端同学配合
{
"msg_id": "uu481201399440513912",
"display_type": "notification",
"alias": "",
"random_min": 0,
"body": {
"title": "测试自定义参数",
"ticker": "测试自定义参数",
"text": "无",
"after_open": "go_app",
"url": "",
"activity": "",
"custom": "",
"play_vibrate": "true",
"play_sound": "true",
"play_lights": "true"
},
"extra": {
"key1": "value1",
"key2": "value2"
}
}
成功以后可以看log
主要看after_open,默认是打开app
友盟官方常见问题: https://developer.umeng.com/docs/67966/cate/66637
1.集成以后收不到推送
(1) mPushAgent.register()要放在application中调用,放在别的地方不起作用
(2) 检查so文件有没有放错地方
(3) 打开日志提示,仔细看提示:UMConfigure.setLogEnabled(true)
2.java.lang.ClassNotFoundException: com.ut.mini.UTAnalytics
尽量更新到最新版本的引用,友盟开发说这个只是提示,不用太在意....
3.杀死进程以后收不到推送
解决方法:集成各个厂商通道
iOS的小伙伴集成以后,就算杀死APP也可以收到推送,为啥Android不可以,伤感,看了文档才知道,我们要集成厂商通道,
4.集成以后收不到推送,显示送达却没有弹出通知
manifest里面的package最好与build.gradle中的applicationId不一 致, 因为我们项目有两个applicationId,所以会出现这种情况
需调用setResourcePackageName设置资源文件包名
⑵ 如何实现友盟第三方登录与分享
获取友盟Appkey
如果你之前已经在友盟注册了应用,并获取到了Appkey,可以继续使用它.
如果你尚未在友盟注册开发者账号,需要先注册,注册之后登录你的账号,点击添加新应用,填写完应用基本信息后,将进入"下载SDK并添加代码"页面,此页面即可得到Appkey。
下载并安装SDK
* 下载[SDK最新版](http://dev.umeng.com/social/android/sdk-download)
* 添加代码和资源引用,我们提供了两种方式,可以根据需求选择
A.解压SDK压缩包,将文件夹中的social_sdk_library_project文件夹导入Eclipse,并在您的工程中添加对此项目的引用即可。
B.解压SDK压缩包,将文件夹中的'main/libs'和'main/res'文件夹复制到你的项目工程根目录下(如使用'ADT 17'以下用户需要手动添加'libs'下的jar文件到工程Path中),同时将需要添加的对应平台(platform文件夹下)的jar包和res文件放到你的工程目录下 />
针对不平台所需要添加的数据
1 微信平台
2
3 <activity
4 android:name="com.umeng.example.wxapi.WXEntryActivity"
5 android:configChanges="keyboardHidden|orientation|screenSize"
6 android:exported="true"
7 android:screenOrientation="portrait"
8 android:theme="@android:style/Theme.Translucent.NoTitleBar" /> 9
10 人人网
11
12 <activity
13 android:name="com.renn.rennsdk.oauth.OAuthActivity"
14 android:configChanges="orientation|navigation|keyboardHidden" />15
16 腾讯
17
18<activity
19 android:name="com.tencent.tauth.AuthActivity"
20 android:launchMode="singleTask"
21 android:noHistory="true" >
22 <intent-filter>
23 <action android:name="android.intent.action.VIEW" />
24 <category android:name="android.intent.category.DEFAULT" />
25 <category android:name="android.intent.category.BROWSABLE" />
26 <data android:scheme="tencent100424468" />
27 </intent-filter>
28 </activity>
29 <activity android:name="com.tencent.connect.common.AssistActivity"
30 android:screenOrientation="portrait"
31 android:theme="@android:style/Theme.Translucent.NoTitleBar" />32
33 谷歌地图
34
35 <uses-library
36 android:name="com.google.android.maps"
37 android:required="false" />
38 <uses-library android:name="android.test.runner" />39 facebook
40 <activity
41 android:name="com.facebook.FacebookActivity"
42 android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"
43 android:label="@string/app_name"
44 android:theme="@android:style/Theme.Translucent.NoTitleBar" />
45 <provider android:name="com.facebook.FacebookContentProvider" android:authorities="com.facebook.app.FacebookContentProvider+appid"
46 android:exported="true" />
47 <meta-data
48 android:name="com.facebook.sdk.ApplicationId"
49 android:value="@string/facebook_app_id" />50
51 新浪微博
52
53 <activity
54 android:name=".WBShareActivity"
55 android:configChanges="keyboardHidden|orientation"
56 android:screenOrientation="portrait" >
57 <intent-filter>
58 <action android:name="com.sina.weibo.sdk.action.ACTION_SDK_REQ_ACTIVITY" />
59 <category android:name="android.intent.category.DEFAULT" />
60 </intent-filter>
61 </activity>
62 <activity
63 android:name="com.sina.weibo.sdk.component.WeiboSdkBrowser"
64 android:configChanges="keyboardHidden|orientation"
65 android:windowSoftInputMode="adjustResize"
66 android:exported="false" >
67 </activity>68
69 <service android:name="com.sina.weibo.sdk.net.DownloadService"
70 android:exported="false"></service>71
72 支付宝
73
74<activity
75 android:name=".apshare.ShareEntryActivity"
76 android:configChanges="keyboardHidden|orientation|screenSize"
77 android:exported="true"
78 android:screenOrientation="portrait"
79 android:theme="@android:style/Theme.Translucent.NoTitleBar" />
4. 打开平台选择面板
4.1 各个平台的配置,建议放在全局Application或者程序入口
1 PlatformConfig.setWeixin("wx967daebe835fbeac", ""); //微信 appid appsecret
2 PlatformConfig.setSinaWeibo("3921700954","");//新浪微博 appkey appsecret
3
4 PlatformConfig.setYixin("");//易信 appkey
5
6 PlatformConfig.setRenren("201874","","");//人人 appid appkey appsecret
7 PlatformConfig.setQQZone("100424468", ""); // qq qzone appid appkey
8 PlatformConfig.setAlipay("2015111700822536");//alipay appid
说明:需要使用第三方公司api的平台,新浪,腾讯等,是需要去申请appkey的。人人豆瓣只能在服务器端设置。其它需要配置appid的平台,如qq,微信,易信,twitter等都需要在本地设置。还有一部分平台需要在mainfest中配置,前面已经提到过。
授权
目前友盟社会化组件支持的第三方登录平台为:新浪微博、QQ、微信、人人网、豆瓣。(特别说明:QQ空间,qq微博使用qq授权)
⑶ 友盟-推送-Andorid-“Alias”是什么, 该如何使用
不少开发者在使用友盟推送的时候,对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的用法:
关于Alias的相关接口,我们的友盟消息推送Android文档提供了非常丰富的接口供开发者调用:
[Java] 纯文本查看 复制代码
?
1
2
3
4
5
添加Alias
mPushAgent.addAlias("[email protected]", ALIAS_TYPE.SINA_WEIBO);
移除Alias
mPushAgent.removeAlias("[email protected]", 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接口,是一个实时的接口,不管是在“测试模式”下,还是在“正式模式”下,都是实时生效的。不过在集成测试阶段,还是建议开发者把手头的设备添加到"测试模式"下的测试设备集合里面,关于“测试模式”的更多介绍,请参考友盟推送“测试模式”介绍。
⑷ Android分享图片和视频失败,怎么办
目前实现一键分享功能的方式有两种:
1.需要集成第三方官方SDK包,在获得官方授权后调用其API来完成一键分享功能,例如使用友盟分享等
优点:无缝集成,功能多
缺点:需要集成官方的SDK包并通过申请官方的授权才可进行开发
2.不需要使用任何第三方SDK包,可以直接调起实现了分享功能的应用的activity来进行分享
优点:不需要使用任何第三方SDK包和申请官方授权
缺点:需要手机安装你需要分享的应用(这一点非常重要,一开始测试的时候一直不成功,提示“没有应用可执行此操作”,后来找了很久才发现是我手机没有安装相对应的应用,这也是不好方便的地方)
⑸ 一些Android开发中常用的第三方sdk
1、Share SDK官网 www.mob.com。免费集成注册短信验证码,友好的分享功能。
2、环信sdk。主要是集成,聊天相关sdk。
3、Ping++聚合支付。解决集成支付sdk。
4、友盟分享、统计。
5、网络统计
6、极光推送、个推推送
7、360加固服务
8、网络加固、统计服务
9、融云通讯---即时通讯
10、容联 云通讯
11、极速数据、阿凡达数据、聚合数据