华为推送-华为PUSH SDK Android版接入方法

     本文参考了华为推送平台官网及其Demo:http://developer.huawei.com/cn/consumer/wiki/index.php?title=%E6%8E%A5%E5%85%A5%E8%AF%B4%E6%98%8E

    整理了整个接入过程以及常用用法


推送问题参考:
Android 端外推送 http://gold.xitu.io/post/57a19c012e958a0066715d0c 
华为推送那些坑 :    http://www.jianshu.com/p/47a6826f9815
Push SDK-客户端常见问题  http://club.huawei.com/thread-10205061-1-1-2851.html  
首先确保应用的Appid和AppSecret没有填写错误

 
检查通道是否连接:  adb shell netstat –ano | find "118"

集成过程

1.拷贝jar及res资源文件
androidManifest.xml文件中的所有activity, receiver, service, meta-data拷 贝至自己的AndroidManifest.xml文件中
2.混淆打包
   
   
开发者编译APK时请不要混淆本SDK,避免功能异常。 在配置文件中加入:
-keep class com.huawei.android.pushagent.**{*;}
-keep class com.huawei.android. pushselfshow.**{*;}
-keep class com.huawei.android. microkernel.**{*;}
-keep class com.baidu.mapapi.**{*;}

3.App 使用 SDK 进行开发
1.Token 申请
   
   
// 获取客户端AccessToken,获取之前请先确定该应用(包名)已经在开发者联盟上创建成功,并申请、审核通过Push权益
// 该测试应用已经注册过
PushManager.requestToken(PustDemoActivity.this);


2.设置标签信息,标签以 key-value 的 Map 提供
   
   
String tag1KeyStr = mEdTag1Key.getText().toString();
String tag1ValueStr = mEdTag1Value.getText().toString();
HashMap<String, String> map = new HashMap<String, String>();
if (!TextUtils.isEmpty(tag1KeyStr)
&& !TextUtils.isEmpty(tag1ValueStr)) {
map.put(tag1KeyStr, tag1ValueStr);
}
try {
PushManager.setTags(TagReportActivity.this, map);
} catch (PushException e) {
Log.e(TAG, e.toString());
}


3.获取当前设备当前应用已经设置的标签信息

   
   
Map<String, String> tags;
try {
tags = PushManager.getTags(TagReportActivity.this);
String tip = "";
if (null != tags && !tags.isEmpty()) {
for (Map.Entry<String, String> mapEntry : tags.entrySet()) {
String key = mapEntry.getKey();
String value = mapEntry.getValue();
tip += ("tagKey:"+ key + ", tagValue:" + value+"; ");
}
Log.w(TAG, tip);
Toast.makeText(TagReportActivity.this, tip, Toast.LENGTH_SHORT).show();
}
} catch (PushException e) {
Log.e(TAG, e.toString());
}


删除当前设备当前应用的标签信息
   
   
String delKeyStr = mEdDeleteKey.getText().toString();
List<String> list = new ArrayList<String>();
list.add(delKeyStr);
try {
PushManager.deleteTags(TagReportActivity.this, list);
} catch (PushException e) {
Log.e(TAG, e.toString());
}


回调接口说明

回调接口由业务继承com.huawei.android.pushagent.api.PushEventReceiver 现必要的回调方法。 各回调方法都是在新开启的线程中处理。

1.实现 Token 返回给应用: 本接口必须被实现


2. 实现消息透传给应用:  本接口必须被实现

3. 实现业务事件的回调   由业务 决定是否调用该函数。
 
   
   
public void onEvent(Context context, Event event, Bundle extras) {
if (Event.NOTIFICATION_OPENED.equals(event) || Event.NOTIFICATION_CLICK_BTN.equals(event)) {
int notifyId = extras.getInt(BOUND_KEY.pushNotifyId, 0);
if (0 != notifyId) {
NotificationManager manager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
manager.cancel(notifyId);
}
String content = "收到通知附加消息: " + extras.getString(BOUND_KEY.pushMsgKey);
Log.w(PustDemoActivity.TAG, content);
showPushMessage(PustDemoActivity.RECEIVE_NOTIFY_CLICK_MSG, content);
} else if (Event.PLUGINRSP.equals(event)) {
final int TYPE_LBS = 1;
final int TYPE_TAG = 2;
int reportType = extras.getInt(BOUND_KEY.PLUGINREPORTTYPE, -1);
boolean isSuccess = extras.getBoolean(BOUND_KEY.PLUGINREPORTRESULT, false);
String message = "";
if (TYPE_LBS == reportType) {
message = "LBS report result :";
} else if(TYPE_TAG == reportType) {
message = "TAG report result :";
}
Log.w(PustDemoActivity.TAG, message + isSuccess);
showPushMessage(PustDemoActivity.RECEIVE_TAG_LBS_MSG, message + isSuccess);
}
super.onEvent(context, event, extras);
}


   
   
注意事项
1)建议不要在继承的PushEventReceiver中做过多的逻辑处理,如启线程、
启动hander等。
2 push业务逻辑需要将push相关的ReceiverService 在一个进程中,请勿
修改下面部分:
<receiver android:name=" com.huawei.android.pushagent.PushEventReceiver "
android:process=":pushservice">
<receiver android:name="com.huawei.android.pushagent.PushBootReceiver"
android:process=":pushservice" >
<service android:name=" com.huawei.android.pushagent.PushService "
android:process=":pushservice">
3)因为APP涉及到多进程,每个进程启动时,会默认初始化Application,所
以为了防止标签重复上报,建议不要在自定义的Application类里面调用标签上
报等操作。
4)在某些手机上申请token不成功,可能是被手机系统或其他安全性软件限
制,建议在手机中设置允许应用开机自启动再尝试






   
   
透传消息偶尔不能够拉起应用
在小米手机上,给这个应用设置:保持后台运行和允许开机启动。在部分品牌手机上也可以使用该方法解决。
   
   
官方文档中说明:透传消息需要设置开机自启动才能拉起应用
华为手机上:
Emui3.0上,Push广播有很大概率被限制,如: Mate7 3.0版本,荣耀6plusP7 3.0版本,4X 4A等。
Emui3.1上,Push广播基本不被限制,但个别型号机型存在问题,如:荣耀5x等。
Emui4.0及以上,Push广播有较高概率被限制,不被限制的机型如:荣耀畅玩4C,荣耀畅玩4XMate SP8 MAX等。
如广播被限制,需要将应用设为开机启动项。所以对于及时性或到达率要求非常高的应用,我们建议应用要考虑替代方案。
后续Push版本,华为将采用新的设计方案,解决被限制的问题,但发布计划待定。
非华为手机:
第三方手机(如:小米、OPPO、三星等),由于rom的限制,需要将应用设为开机启动项
文/topwqp(简书作者)
原文链接:http://www.jianshu.com/p/47a6826f9815
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值