Android 阿里云推送集成指南

一、注册阿里云开发者账号,创建应用获取Appkey以及AppSecrent

二、在AndroidMainifest添加权限,还有一些其他权限(基本上你自己的项目已经写了,我就不贴了)

<uses-permission android:name="android.permission.WRITE_SETTINGS"
 tools:ignore="ProtectedPermissions" />
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.RESTART_PACKAGES" />
<uses-permission android:name="android.permission.REORDER_TASKS" />
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"
 tools:ignore="ProtectedPermissions" />
android:allowBackup="true"在Application加上这个属性。

三、在build.gradle中引入阿里云推送库(根据官方文档的引入就一个的会有问题,亲测这种是最保险的)

implementation 'com.aliyun.ams:alicloud-android-push:3.1.4@aar'
implementation 'com.aliyun.ams:alicloud-android-utils:1.1.3'
implementation 'com.aliyun.ams:alicloud-android-beacon:1.0.1'
implementation 'com.aliyun.ams:alicloud-android-ut:5.4.0'

设置ndk支持so包,abiFilters 'armeabi', 'x86', 'armeabi-v7a', 'x86_64', 'arm64-v8a'其实国内手机99%以上都是arm的,

就支持arm就可以了,这样也能减小apk体积,因为so的体积确实不小,每个项目都适用。

在gradle.properties加入android.useDeprecatedNdk=true

四、在AndroidMainifest中加入以下,阿里云的配置

<meta-data android:name="com.alibaba.app.appkey" android:value="yourKey"/> <!-- 请填写你自己的- appKey -->
<meta-data android:name="com.alibaba.app.appsecret" android:value="yourAppsecret"/> <!-- 请填写你自己的appSecret -->
<!-- Push SDK 相关组件,required-->
<!-- 消息接收服务 -->
<service
 android:name="com.alibaba.sdk.android.push.MsgService"
 android:exported="false">
 <intent-filter>
 <action android:name="com.alibaba.sdk.android.push.NOTIFY_ACTION" />
 </intent-filter>
</service>
<service android:name="com.alibaba.sdk.android.push.channel.CheckService"
 android:process=":channel">
 <intent-filter>
 <action android:name="com.alibaba.sdk.android.push.CHECK_SERVICE" />
 </intent-filter>
</service>
<service android:name="com.taobao.accs.ChannelService"
 android:exported="true" android:process=":channel">
 <intent-filter>
 <action android:name="com.taobao.accs.intent.action.SERVICE"/>
 </intent-filter>
</service>
<service
 android:name="com.taobao.accs.ChannelService$KernelService"
 android:exported="false"
 android:process=":channel" >
</service>
<service android:name="com.taobao.accs.data.MsgDistributeService"
 android:exported="true">
 <intent-filter>
 <action android:name="com.taobao.accs.intent.action.RECEIVE" />
 </intent-filter>
</service>
<receiver android:name="com.taobao.accs.EventReceiver"
 android:process=":channel">
 <intent-filter>
 <action android:name="android.intent.action.BOOT_COMPLETED"/>
 </intent-filter>
 <intent-filter>
 <action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
 </intent-filter>
 <intent-filter>
 <action android:name="android.intent.action.PACKAGE_REMOVED"/>
 <data android:scheme="package"/>
 </intent-filter>
 <intent-filter>
 <action android:name="android.intent.action.USER_PRESENT"/>
 </intent-filter>
</receiver>
<receiver android:name="com.taobao.accs.ServiceReceiver"
 android:process=":channel">
 <intent-filter>
 <action android:name="com.taobao.accs.intent.action.COMMAND"/>
 </intent-filter>
 <intent-filter>
 <action android:name="com.taobao.accs.intent.action.START_FROM_AGOO"/>
 </intent-filter>
</receiver>
<service android:name="org.android.agoo.accs.AgooService"
 android:exported="true" >
 <intent-filter>
 <action android:name="com.taobao.accs.intent.action.RECEIVE" />
 </intent-filter>
</service>
<service android:name="com.alibaba.sdk.android.push.AliyunPushIntentService"
 android:exported="true"
 >
 <intent-filter>
 <action android:name="org.agoo.android.intent.action.RECEIVE" />
 </intent-filter>
</service>
<receiver
 android:name="com.taobao.agoo.AgooCommondReceiver"
 android:process=":channel"
 android:exported="true" >
 <intent-filter>
 <action android:name="${applicationId}.intent.action.COMMAND" />
 </intent-filter>
 <intent-filter>
 <action android:name="android.intent.action.PACKAGE_REMOVED" />
 <data android:scheme="package" />
 </intent-filter>
</receiver>
<service
 android:name="com.alibaba.sdk.android.push.channel.TaobaoRecvService"
 android:exported="true"
 android:process=":channel">
 <intent-filter>
 <action android:name="org.android.agoo.client.MessageReceiverService" />
 </intent-filter>
</service>
<!-- V3.0.12及以上版本需配置 -->
<service
 android:name="com.taobao.accs.internal.AccsJobService"
 android:permission="android.permission.BIND_JOB_SERVICE"
 android:process=":channel"/>
<!-- V3.0.7及以上版本需配置 -->
<service android:name="com.alibaba.sdk.android.push.channel.KeepChannelService"
 android:permission="android.permission.BIND_JOB_SERVICE"
 android:process=":channel" />
<receiver android:name="com.alibaba.sdk.android.push.SystemEventReceiver"
 android:process=":channel">
 <intent-filter>
 <action android:name="android.intent.action.MEDIA_MOUNTED"/>
 <action android:name="android.intent.action.ACTION_POWER_CONNECTED"/>
 <action android:name="android.intent.action.ACTION_POWER_DISCONNECTED"/>
 </intent-filter>
</receiver>
<!-- V3.0.9及以上版本需配置 -->
<activity
 android:name="com.alibaba.sdk.android.push.keeplive.PushExtActivity"
 android:configChanges="keyboardHidden|orientation|screenSize|navigation|keyboard"
 android:excludeFromRecents="true"
 android:exported="false"
 android:finishOnTaskLaunch="false"
 android:launchMode="singleInstance"
 android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen"
 android:process=":channel"
 >
</activity>
<!-- 消息接收监听器 (用户可自主扩展) -->
<receiver
 android:name=".receiver.MyMessageReceiver"
 android:exported="false"> <!-- 为保证receiver安全,建议设置不可导出,如需对其他应用开放可通过android:permission进行限制 -->
 <intent-filter>
 <action android:name="com.alibaba.push2.action.NOTIFICATION_OPENED" />
 </intent-filter>
 <intent-filter>
 <action android:name="com.alibaba.push2.action.NOTIFICATION_REMOVED" />
 </intent-filter>
 <intent-filter>
 <action android:name="com.alibaba.sdk.android.push.RECEIVE" />
 </intent-filter>
</receiver>

五、在Application中初始化阿里云推送

/**
 * 初始化云推送通道
 * @param applicationContext
 */
private void initCloudChannel(Context applicationContext) {
    createNotificationChannel();
 PushServiceFactory.init(applicationContext);
 CloudPushService pushService = PushServiceFactory.getCloudPushService();
 pushService.register(applicationContext, new CommonCallback() {
        @Override
 public void onSuccess(String response) {
            String deviceId = PushServiceFactory.getCloudPushService().getDeviceId();
 Log.e(TAG,deviceId);
 Log.d(TAG, "init cloudchannel success");
 }
        @Override
 public void onFailed(String errorCode, String errorMessage) {
            Log.d(TAG, "init cloudchannel failed -- errorcode:" + errorCode + " -- errorMessage:" + errorMessage);
 }
    });

}
private void createNotificationChannel(){
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
 // 通知渠道的id
 String id = "1";//这个是与后台约定好的,要不收不到,该方法主要是适配Android 8.0以上,避免接收不到通知
 // 用户可以看到的通知渠道的名字.
 CharSequence name = "氢氪管家";
 // 用户可以看到的通知渠道的描述
 String description = "管理氢氪车辆";
 int importance = NotificationManager.IMPORTANCE_HIGH;
 NotificationChannel mChannel = new NotificationChannel(id, name, importance);
 // 配置通知渠道的属性
 mChannel.setDescription(description);
 // 设置通知出现时的闪灯(如果 android 设备支持的话)
 mChannel.enableLights(true);
 mChannel.setLightColor(Color.RED);
 // 设置通知出现时的震动(如果 android 设备支持的话)
 mChannel.enableVibration(true);
 mChannel.setVibrationPattern(new long[]{100, 200, 300, 400, 500, 400, 300, 200, 400});
 //最后在notificationmanager中创建该通知渠道
 mNotificationManager.createNotificationChannel(mChannel);
 }
}

六、自定义MyMessageReceiver

public class MyMessageReceiver extends MessageReceiver {
    // 消息接收部分的LOG_TAG
 public static final String REC_TAG = "receiver";
 @Override
 public void onNotification(Context context, String title, String summary, Map<String, String> extraMap) {//当通知准确到达用户的时候触发
        ToastManage.s(context,title+"推送");
 Log.e("MyMessageReceiver", "Receive notification, title: " + title + ", summary: " + summary + ", extraMap: " + extraMap);
 }
    @Override
 public void onMessage(Context context, CPushMessage cPushMessage) {//当消息准确到达用户的时候触发,只有用户在使用的时候才能接收到消息
        Log.e("MyMessageReceiver", "onMessage, messageId: " + cPushMessage.getMessageId() + ", title: " + cPushMessage.getTitle() + ", content:" + cPushMessage.getContent());
 ToastManage.s(context,"消息:"+cPushMessage.getTitle());
 }
    @Override
 public void onNotificationOpened(Context context, String title, String summary, String extraMap) {//当通知展开的时候触发的操作
        Log.e("MyMessageReceiver", "onNotificationOpened, title: " + title + ", summary: " + summary + ", extraMap:" + extraMap);
 ToastManage.s(context,"打开了通知:"+title);
 }
    @Override
 protected void onNotificationClickedWithNoAction(Context context, String title, String summary, String extraMap) {//当通知被点击了触发的操作,并且没有配置跳转路径
        ToastManage.s(context,"onNotificationClickedWithNoAction, title: " + title + ", summary: " + summary + ", extraMap:" + extraMap);
 Log.e("MyMessageReceiver", "onNotificationClickedWithNoAction, title: " + title + ", summary: " + summary + ", extraMap:" + extraMap);
 }
    @Override
 protected void onNotificationReceivedInApp(Context context, String title, String summary, Map<String, String> extraMap, int openType, String openActivity, String openUrl) {//当用户使用时接收到通知
        ToastManage.s(context,"onNotificationReceivedInApp, title: " + title + ", summary: " + summary + ", extraMap:" + extraMap + ", openType:" + openType + ", openActivity:" + openActivity + ", openUrl:" + openUrl);
 Log.e("MyMessageReceiver", "onNotificationReceivedInApp, title: " + title + ", summary: " + summary + ", extraMap:" + extraMap + ", openType:" + openType + ", openActivity:" + openActivity + ", openUrl:" + openUrl);
 }
    @Override
 protected void onNotificationRemoved(Context context, String messageId) {//通知被移除
        ToastManage.s(context,"通知被移除了");
 Log.e("MyMessageReceiver", "onNotificationRemoved");
 }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值