项目中有需要用到推送,让用的是阿里的推送,不得不说官方文档写的不是那么详细,使用的时候还是遇到了一些问题。
首先去集成sdk
下载地址https://develop.aliyun.com/tools/sdk?spm=5176.136436.698463.16.60541cb7wf6iZb#/android
grade直接
//阿里推送
compile ‘com.aliyun.ams:alicloud-android-push:3.0.11@aar’
// compile ‘com.aliyun.ams:alicloud-android-utdid:1.1.5.3’
// compile ‘com.aliyun.ams:alicloud-android-ut:5.1.0’(我还集成了支付功能,资源重复)
在manifest里配置自己的appkey和appsecret
然后需要MessageReceiver和MessageIntentService,可以直接复制官方的,文档上是写MessageReceiver,但功能不能实现浪费了一些时间。
public class MyMessageIntentService extends AliyunMessageIntentService {
private static final String TAG = “MyMessageIntentService”;
/**
* 推送通知的回调方法
* @param context
* @param title
* @param summary
* @param extraMap
*/
@Override
protected void onNotification(Context context, String title, String summary, Map extraMap) {
Log.i(MessageReceiver.REC_TAG,"收到一条推送通知 : " + title + ", summary:" + summary);
}
/**
* 推送消息的回调方法
* @param context
* @param cPushMessage
*/
@Override
protected void onMessage(Context context, CPushMessage cPushMessage) {
Log.i(MessageReceiver.REC_TAG,"收到一条推送消息 : " + cPushMessage.getTitle() + ", content:" + cPushMessage.getContent());
}
/**
* 从通知栏打开通知的扩展处理
* @param context
* @param title
* @param summary
* @param extraMap
*/
@Override
protected void onNotificationOpened(Context context, String title, String summary, String extraMap) {
Log.i(MessageReceiver.REC_TAG,"onNotificationOpened : " + " : " + title + " : " + summary + " : " + extraMap);
}
/**
* 无动作通知点击回调。当在后台或阿里云控制台指定的通知动作为无逻辑跳转时,通知点击回调为onNotificationClickedWithNoAction而不是onNotificationOpened
* @param context
* @param title
* @param summary
* @param extraMap
*/
@Override
protected void onNotificationClickedWithNoAction(Context context, String title, String summary, String extraMap) {
Log.i(MessageReceiver.REC_TAG,"onNotificationClickedWithNoAction : " + " : " + title + " : " + summary + " : " + extraMap);
}
/**
* 通知删除回调
* @param context
* @param messageId
*/
@Override
protected void onNotificationRemoved(Context context, String messageId) {
Log.i(MessageReceiver.REC_TAG, "onNotificationRemoved : " + messageId);
}
/**
* 应用处于前台时通知到达回调。注意:该方法仅对自定义样式通知有效,相关详情请参考https://help.aliyun.com/document_detail/30066.html#h3-3-4-basiccustompushnotification-api
* @param context
* @param title
* @param summary
* @param extraMap
* @param openType
* @param openActivity
* @param openUrl
*/
@Override
protected void onNotificationReceivedInApp(Context context, String title, String summary, Map extraMap, int openType, String openActivity, String openUrl) {
Log.i(MessageReceiver.REC_TAG,"onNotificationReceivedInApp : " + " : " + title + " : " + summary + " " + extraMap + " : " + openType + " : " + openActivity + " : " + openUrl);
}
}
public class MessageReceiver extends com.alibaba.sdk.android.push.MessageReceiver {
// 消息接收部分的LOG_TAG
public static final String REC_TAG = “receiver”;
/**
* 推送通知的回调方法
* @param context
* @param title
* @param summary
* @param extraMap
*/
@Override
public void onNotification(Context context, String title, String summary, Map extraMap) {
// TODO 处理推送通知
if ( null != extraMap ) {
for (Map.Entry entry : extraMap.entrySet()) {
Log.i(REC_TAG,"@Get diy param : Key=" + entry.getKey() + " , Value=" + entry.getValue());
}
} else {
Log.i(REC_TAG,"@收到通知 && 自定义消息为空");
}
Log.i(REC_TAG,"收到一条推送通知 : " + title + ", summary:" + summary);
}
/**
* 应用处于前台时通知到达回调。注意:该方法仅对自定义样式通知有效,相关详情请参考https://help.aliyun.com/document_detail/30066.html?spm=5176.product30047.6.620.wjcC87#h3-3-4-basiccustompushnotification-api
* @param context
* @param title
* @param summary
* @param extraMap
* @param openType
* @param openActivity
* @param openUrl
*/
@Override
protected void onNotificationReceivedInApp(Context context, String title, String summary, Map extraMap, int openType, String openActivity, String openUrl) {
Log.i(REC_TAG,"onNotificationReceivedInApp : " + " : " + title + " : " + summary + " " + extraMap + " : " + openType + " : " + openActivity + " : " + openUrl);
// MainApplication.setConsoleText("onNotificationReceivedInApp : " + " : " + title + " : " + summary);
}
/**
* 推送消息的回调方法
* @param context
* @param cPushMessage
*/
@Override
public void onMessage(Context context, CPushMessage cPushMessage) {
Log.i(REC_TAG,"收到一条推送消息 : " + cPushMessage.getTitle() + ", content:" + cPushMessage.getContent());
CommonUtils.showToast(context,"收到一条推送消息 : " + cPushMessage.getTitle() + ", content:" + cPushMessage.getContent());
}
/**
* 从通知栏打开通知的扩展处理
* @param context
* @param title
* @param summary
* @param extraMap
*/
@Override
public void onNotificationOpened(Context context, String title, String summary, String extraMap) {
Log.i(REC_TAG,"onNotificationOpened : " + " : " + title + " : " + summary + " : " + extraMap);
// MainAppcalation.setConsoleText("onNotificationOpened : " + " : " + title + " : " + summary + " : " + extraMap);
}
/**
* 通知删除回调
* @param context
* @param messageId
*/
@Override
public void onNotificationRemoved(Context context, String messageId) {
Log.i(REC_TAG, "onNotificationRemoved : " + messageId);
}
/**
* 无动作通知点击回调。当在后台或阿里云控制台指定的通知动作为无逻辑跳转时,通知点击回调为onNotificationClickedWithNoAction而不是onNotificationOpened
* @param context
* @param title
* @param summary
* @param extraMap
*/
@Override
protected void onNotificationClickedWithNoAction(Context context, String title, String summary, String extraMap) {
Log.i(REC_TAG,"onNotificationClickedWithNoAction : " + " : " + title + " : " + summary + " : " + extraMap);
}
}
需要manifest配置一些信息,这里就不写了
//注册阿里云
private CloudPushService mPushService = PushServiceFactory.getCloudPushService();
mPushService.bindAccount(“你要绑定的账号”, new CommonCallback() {
@Override
public void onSuccess(String s) {
String deviceId = PushServiceFactory.getCloudPushService().getDeviceId();
// CommonUtils.showToast(context, deviceId);
Log.i(“deviceId”, deviceId);
}
@Override
public void onFailed(String s, String s1) {
CommonUtils.showToast(context, "onFailed" + s);
}
});
最后不要忘了解绑
mPushService.unbindAccount(new CommonCallback() {
@Override
public void onSuccess(String s) {
}
@Override
public void onFailed(String s, String s1) {
}
});