阿里云移动推送

引入依赖

<!--  阿里云推送  -->
        <dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>aliyun-java-sdk-push</artifactId>
            <version>3.10.1</version>
        </dependency>
        <dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>aliyun-java-sdk-core</artifactId>
            <version>[4.3.2,5.0.0)</version>
        </dependency>

推送工具类

@Component
public class AliPushUtil {

    public static final String TAG_DEVICE="DEVICE";
    public static final String TAG_ALIAS="ALIAS";
    public static final String TAG_ACCOUNT="ACCOUNT";
    public static final String TAG_TAG="TAG";
    public static final String TAG_ALL="ALL";

    @Value("${aliyun.push.access-key-id-em}")
    private String accessKeyId;
    @Value("${aliyun.push.access-key-secret-em}")
    private String accessKeySecret;
    @Value("${aliyun.push.app-key-em}")
    private long appKey;

    public void pushAndroidMsg(String tagType,String tags,String title,String content,String messageType,String extParameters,Integer time){
        IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId, accessKeySecret);
        DefaultAcsClient client = new DefaultAcsClient(profile);
        PushRequest pushRequest = new PushRequest();
        // 推送目标
        pushRequest.setAppKey(appKey);
        //推送目标: DEVICE:按设备推送 ALIAS : 按别名推送 ACCOUNT:按帐号推送  TAG:按标签推送; ALL: 广播推送
        pushRequest.setTarget(tagType);
        //根据Target来设定,如Target=DEVICE, 则对应的值为 设备id1,设备id2. 多个值使用逗号分隔.(帐号与设备有一次最多100个的限制)
        pushRequest.setTargetValue(tags);
//        pushRequest.setTarget("ALL"); //推送目标: DEVICE:推送给设备; ACCOUNT:推送给指定帐号,TAG:推送给自定义标签; ALL: 推送给全部
//        pushRequest.setTargetValue("ALL"); //根据Target来设定,如Target=DEVICE, 则对应的值为 设备id1,设备id2. 多个值使用逗号分隔.(帐号与设备有一次最多100个的限制)
        // 消息类型 MESSAGE NOTICE
        pushRequest.setPushType(messageType);
        // 设备类型 ANDROID iOS ALL.
        pushRequest.setDeviceType("ANDROID");
        // 推送配置
        // 消息的标题
        pushRequest.setTitle(title);
        // 消息的内容
        pushRequest.setBody(content);

        // 推送配置: Android
        //通知的提醒方式 "VIBRATE" : 震动 "SOUND" : 声音 "BOTH" : 声音和震动 NONE : 静音
        pushRequest.setAndroidNotifyType("NONE");
        //通知栏自定义样式0-100
        pushRequest.setAndroidNotificationBarType(1);
        //通知栏自定义样式0-100
        pushRequest.setAndroidNotificationBarPriority(1);
        //点击通知后动作 "APPLICATION" : 打开应用 "ACTIVITY" : 打开AndroidActivity "URL" : 打开URL "NONE" : 无跳转
        pushRequest.setAndroidOpenType("APPLICATION");
//        pushRequest.setAndroidOpenUrl("http://www.aliyun.com"); //Android收到推送后打开对应的url,仅当AndroidOpenType="URL"有效
//        pushRequest.setAndroidActivity("com.alibaba.push2.demo.XiaoMiPushActivity"); // 设定通知打开的activity,仅当AndroidOpenType="Activity"有效
        // Android通知音乐
        pushRequest.setAndroidMusic("default");
//        pushRequest.setAndroidPopupActivity("com.ali.demo.PopupActivity");//设置该参数后启动辅助弹窗功能, 此处指定通知点击后跳转的Activity(辅助弹窗的前提条件:1. 集成第三方辅助通道;2. StoreOffline参数设为true)
//        pushRequest.setAndroidPopupTitle("Popup Title");
//        pushRequest.setAndroidPopupBody("Popup Body");
        //设定通知的扩展属性。(注意 : 该参数要以 json map 的格式传入,否则会解析出错)
        pushRequest.setAndroidExtParameters(extParameters);
        //安卓系统8.0及以上版本,这里加入设置
        pushRequest.setAndroidNotificationChannel("1");
        // 推送控制
        //Date pushDate = new Date(System.currentTimeMillis()) ; // 30秒之间的时间点, 也可以设置成你指定固定时间
        //String pushTime = ParameterHelper.getISO8601Time(pushDate);
//        pushRequest.setPushTime(pushTime); // 延后推送。可选,如果不设置表示立即推送
        // time分钟后消息失效, 不会再发送
        String expireTime = ParameterHelper.getISO8601Time(new Date(System.currentTimeMillis() + time * 60 * 1000));
        pushRequest.setExpireTime(expireTime);
        // 离线消息是否保存,若保存, 在推送时候,用户即使不在线,下一次上线则会收到
        pushRequest.setStoreOffline(true);
        try {
            PushResponse pushResponse = client.getAcsResponse(pushRequest);
            System.out.printf("RequestId: %s, MessageID: %s\n",pushResponse.getRequestId(), pushResponse.getMessageId());
        } catch (ClientException e) {
            e.printStackTrace();
        }
    }

    /**
     * 安卓推送专用
     * @param tagType 推送目标类型
     * @param tags  要推送的账号
     * @param title 消息标题
     * @param content   消息内容
     * @param messageType 消息类型
     * @param extParameters 额外参数
     */
    public void pushAndroidMsg(String tagType,String tags,String title,String content,String messageType,String extParameters){
        IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId, accessKeySecret);
        DefaultAcsClient client = new DefaultAcsClient(profile);
        PushRequest pushRequest = new PushRequest();
        // 推送目标
        pushRequest.setAppKey(appKey);
        //推送目标: DEVICE:按设备推送 ALIAS : 按别名推送 ACCOUNT:按帐号推送  TAG:按标签推送; ALL: 广播推送
        pushRequest.setTarget(tagType);
        //根据Target来设定,如Target=DEVICE, 则对应的值为 设备id1,设备id2. 多个值使用逗号分隔.(帐号与设备有一次最多100个的限制)
        pushRequest.setTargetValue(tags);
//        pushRequest.setTarget("ALL"); //推送目标: DEVICE:推送给设备; ACCOUNT:推送给指定帐号,TAG:推送给自定义标签; ALL: 推送给全部
//        pushRequest.setTargetValue("ALL"); //根据Target来设定,如Target=DEVICE, 则对应的值为 设备id1,设备id2. 多个值使用逗号分隔.(帐号与设备有一次最多100个的限制)
        // 消息类型 MESSAGE NOTICE
        pushRequest.setPushType(messageType);
        // 设备类型 ANDROID iOS ALL.
        pushRequest.setDeviceType("ANDROID");
        // 推送配置
        // 消息的标题
        pushRequest.setTitle(title);
        // 消息的内容
        pushRequest.setBody(content);

        // 推送配置: Android
        //通知的提醒方式 "VIBRATE" : 震动 "SOUND" : 声音 "BOTH" : 声音和震动 NONE : 静音
        pushRequest.setAndroidNotifyType("NONE");
        //通知栏自定义样式0-100
        pushRequest.setAndroidNotificationBarType(1);
        //通知栏自定义样式0-100
        pushRequest.setAndroidNotificationBarPriority(1);
        //点击通知后动作 "APPLICATION" : 打开应用 "ACTIVITY" : 打开AndroidActivity "URL" : 打开URL "NONE" : 无跳转
        pushRequest.setAndroidOpenType("APPLICATION");
//        pushRequest.setAndroidOpenUrl("http://www.aliyun.com"); //Android收到推送后打开对应的url,仅当AndroidOpenType="URL"有效
//        pushRequest.setAndroidActivity("com.alibaba.push2.demo.XiaoMiPushActivity"); // 设定通知打开的activity,仅当AndroidOpenType="Activity"有效
        // Android通知音乐
        pushRequest.setAndroidMusic("default");
//        pushRequest.setAndroidPopupActivity("com.ali.demo.PopupActivity");//设置该参数后启动辅助弹窗功能, 此处指定通知点击后跳转的Activity(辅助弹窗的前提条件:1. 集成第三方辅助通道;2. StoreOffline参数设为true)
//        pushRequest.setAndroidPopupTitle("Popup Title");
//        pushRequest.setAndroidPopupBody("Popup Body");
        //设定通知的扩展属性。(注意 : 该参数要以 json map 的格式传入,否则会解析出错)
        pushRequest.setAndroidExtParameters(extParameters);
        //安卓系统8.0及以上版本,这里加入设置
        pushRequest.setAndroidNotificationChannel("1");

        // 推送控制
        //Date pushDate = new Date(System.currentTimeMillis()) ; // 30秒之间的时间点, 也可以设置成你指定固定时间
        //String pushTime = ParameterHelper.getISO8601Time(pushDate);
//        pushRequest.setPushTime(pushTime); // 延后推送。可选,如果不设置表示立即推送
        // 24小时后消息失效, 不会再发送
        String expireTime = ParameterHelper.getISO8601Time(new Date(System.currentTimeMillis() + 24 * 3600 * 1000));
        pushRequest.setExpireTime(expireTime);
        // 离线消息是否保存,若保存, 在推送时候,用户即使不在线,下一次上线则会收到
        pushRequest.setStoreOffline(true);
        try {
            PushResponse pushResponse = client.getAcsResponse(pushRequest);
            System.out.printf("RequestId: %s, MessageID: %s\n",pushResponse.getRequestId(), pushResponse.getMessageId());
        } catch (ClientException e) {
            e.printStackTrace();
        }
    }

    @Async("asyncServiceExecutor")
    public void pushExpandAndroidMsg(String tagType,String tags,String title,String content){
        pushExpandAndroidMsg(tagType,tags,title,content,0);
    }
    @Async("asyncServiceExecutor")
    public void pushExpandAndroidMsg(String tagType,String tags,String title,String content,long longTime){
        IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId, accessKeySecret);
        DefaultAcsClient client = new DefaultAcsClient(profile);
        PushRequest pushRequest = new PushRequest();
        // 推送目标
        pushRequest.setAppKey(appKey);
        //推送目标: DEVICE:按设备推送 ALIAS : 按别名推送 ACCOUNT:按帐号推送  TAG:按标签推送; ALL: 广播推送
        pushRequest.setTarget(tagType);
        //根据Target来设定,如Target=DEVICE, 则对应的值为 设备id1,设备id2. 多个值使用逗号分隔.(帐号与设备有一次最多100个的限制)
        pushRequest.setTargetValue(tags);
//        pushRequest.setTarget("ALL"); //推送目标: DEVICE:推送给设备; ACCOUNT:推送给指定帐号,TAG:推送给自定义标签; ALL: 推送给全部
//        pushRequest.setTargetValue("ALL"); //根据Target来设定,如Target=DEVICE, 则对应的值为 设备id1,设备id2. 多个值使用逗号分隔.(帐号与设备有一次最多100个的限制)
        // 消息类型 MESSAGE NOTICE
        pushRequest.setPushType("NOTICE");
        // 设备类型 ANDROID iOS ALL.
        pushRequest.setDeviceType("ANDROID");
        // 推送配置
        // 消息的标题
        pushRequest.setTitle(title);
        // 消息的内容
        pushRequest.setBody(content);

        // 推送配置: Android
        //通知的提醒方式 "VIBRATE" : 震动 "SOUND" : 声音 "BOTH" : 声音和震动 NONE : 静音
        pushRequest.setAndroidNotifyType("BOTH");
        //通知栏自定义样式0-100
        pushRequest.setAndroidNotificationBarType(1);
        //通知栏自定义样式0-100
        pushRequest.setAndroidNotificationBarPriority(1);
        //点击通知后动作 "APPLICATION" : 打开应用 "ACTIVITY" : 打开AndroidActivity "URL" : 打开URL "NONE" : 无跳转
        pushRequest.setAndroidOpenType("APPLICATION");
//        pushRequest.setAndroidOpenUrl("http://www.aliyun.com"); //Android收到推送后打开对应的url,仅当AndroidOpenType="URL"有效
//        pushRequest.setAndroidActivity("com.alibaba.push2.demo.XiaoMiPushActivity"); // 设定通知打开的activity,仅当AndroidOpenType="Activity"有效
        // Android通知音乐
        pushRequest.setAndroidMusic("default");
//        pushRequest.setAndroidPopupActivity("com.ali.demo.PopupActivity");//设置该参数后启动辅助弹窗功能, 此处指定通知点击后跳转的Activity(辅助弹窗的前提条件:1. 集成第三方辅助通道;2. StoreOffline参数设为true)
//        pushRequest.setAndroidPopupTitle("Popup Title");
//        pushRequest.setAndroidPopupBody("Popup Body");
        //设定通知的扩展属性。(注意 : 该参数要以 json map 的格式传入,否则会解析出错)
        pushRequest.setAndroidExtParameters("{\"k1\":\"android\",\"k2\":\"v2\"}");
        //安卓系统8.0及以上版本,这里加入设置
        pushRequest.setAndroidNotificationChannel("1");
        // 推送控制
        if (longTime!=0){
            //用于定时发送。不设置缺省是立即发送。时间格式按照ISO8601标准表示,并需要使用UTC时间,格式为`YYYY-MM-DDThh:mm:ssZ`。
            final Date pushDate = new Date(longTime);
            final String pushTime = ParameterHelper.getISO8601Time(pushDate);
            // 延后推送。可选,如果不设置表示立即推送
            pushRequest.setPushTime(pushTime);
        }
        // 12小时后消息失效, 不会再发送
        String expireTime = ParameterHelper.getISO8601Time(new Date(System.currentTimeMillis() + 24 * 3600 * 1000));
        pushRequest.setExpireTime(expireTime);
        // 离线消息是否保存,若保存, 在推送时候,用户即使不在线,下一次上线则会收到
        pushRequest.setStoreOffline(true);
        try {
            PushResponse pushResponse = client.getAcsResponse(pushRequest);
            System.out.printf("RequestId: %s, MessageID: %s\n",pushResponse.getRequestId(), pushResponse.getMessageId());
        } catch (ClientException e) {
            e.printStackTrace();
        }
    }
}

示列:
在这里插入图片描述

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
要在 Cordova 打包的 Android 包中集成阿里云移动推送,需要执行以下步骤: 1. 在阿里云移动推送控制台中创建应用并获取 AppKey 和 AppSecret。 2. 在 Cordova 项目中安装阿里云移动推送插件: ``` cordova plugin add cordova-plugin-aliyun-push ``` 3. 在 config.xml 文件中添加以下代码: ``` <platform name="android"> <preference name="com.alibaba.sdk.android.push.APP_KEY" value="YOUR_APP_KEY" /> <preference name="com.alibaba.sdk.android.push.APP_SECRET" value="YOUR_APP_SECRET" /> </platform> ``` 将 `YOUR_APP_KEY` 和 `YOUR_APP_SECRET` 替换为你在第一步中获取到的对应值。 4. 在 AndroidManifest.xml 文件中添加以下权限和服务: ``` <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> <uses-permission android:name="android.permission.VIBRATE" /> <uses-permission android:name="android.permission.WAKE_LOCK" /> <service android:name="com.alibaba.sdk.android.push.PushService" android:enabled="true" android:exported="false" /> <receiver android:name="com.alibaba.sdk.android.push.AlipushReceiver" android:exported="false"> <intent-filter> <action android:name="com.alibaba.sdk.android.push.message.NOTIFY_MSG" /> <action android:name="com.alibaba.sdk.android.push.notification.CLEAR_NOTICE" /> <action android:name="com.alibaba.sdk.android.push.notification.OPEN_NOTICE" /> <action android:name="com.alibaba.sdk.android.push.notification.DELETE_NOTICE" /> </intent-filter> </receiver> <receiver android:name="com.alibaba.sdk.android.push.SystemEventReceiver"> <intent-filter> <action android:name="android.intent.action.USER_PRESENT" /> <action android:name="android.net.conn.CONNECTIVITY_CHANGE" /> </intent-filter> </receiver> ``` 5. 在 MainActivity.java 文件中添加以下代码: ``` import android.os.Bundle; import org.apache.cordova.*; import com.alibaba.sdk.android.push.AndroidPopupActivity; import com.alibaba.sdk.android.push.noonesdk.PushServiceFactory; public class MainActivity extends CordovaActivity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Enable remote debugging via chrome://inspect if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { WebView.setWebContentsDebuggingEnabled(true); } // Set by <content src="index.html" /> in config.xml loadUrl(launchUrl); // Initialize Aliyun Push Service PushServiceFactory.init(this.getApplicationContext()); } } ``` 这里需要注意,需要导入 `com.alibaba.sdk.android.push.AndroidPopupActivity` 和 `com.alibaba.sdk.android.push.noonesdk.PushServiceFactory`。 6. 最后,在阿里云移动推送控制台中配置推送通知和消息,并在应用中调用相应的 API 来注册设备和接收推送通知和消息。 以上步骤是在 Cordova 项目中集成阿里云移动推送的基本流程,具体实现可能会因项目环境和需求不同而有所变化。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值