阿里移动推送(Alibaba Cloud Mobile Push)是基于大数据的移动智能推送服务,帮助App快速集成移动推送的功能。在实现高效、精确、实时的移动推送的同时,降低了开发成本并提高了用户活跃度和应用的留存率。

初始化

初始化前需确保已集成安全图片,初始化的操作请参见SDK初始化

使用方法

  1. 在应用中注册和启动移动推送。该操作封装在SDK初始化中,无需额外操作。
  2. 创建消息接收Receiver,继承自com.alibaba.sdk.android.push.MessageReceiver,并在对应回调中添加业务处理逻辑,参照以下代码执行。
    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) {
            // TODO 处理推送通知
            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());
        }
        @Override
        public void onNotificationOpened(Context context, String title, String summary, String extraMap) {
            Log.e("MyMessageReceiver", "onNotificationOpened, title: " + title + ", summary: " + summary + ", extraMap:" + extraMap);
        }
        @Override
        protected void onNotificationClickedWithNoAction(Context context, String title, String summary, String 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) {
            Log.e("MyMessageReceiver", "onNotificationReceivedInApp, title: " + title + ", summary: " + summary + ", extraMap:" + extraMap + ", openType:" + openType + ", openActivity:" + openActivity + ", openUrl:" + openUrl);
        }
        @Override
        protected void onNotificationRemoved(Context context, String messageId) {
            Log.e("MyMessageReceiver", "onNotificationRemoved");
        }
    }
  3. 将该receiver添加到AndroidManifest.xml中。
    <!-- 消息接收监听器 (用户可自主扩展) -->
    <receiver
        android:name=".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>
    						

    以下业务逻辑已封装到SDK初始化中,开发者无需额外进行,只需关注接口调用即可。

    • 关联移动推送到某账号,参见API服务:/uc/bindPushChannel
    • 取消关联移动推送到某账号,参见API服务:/uc/unbindPushChannel

告警功能

告警功能依赖设备和用户绑定,用户和设备的绑定已经封装在SDK初始化中,您只需关注告警功能的业务逻辑即可。

消息类型说明

移动应用推送支持以下两种类型的消息下发。

  • 通知类型

    服务器下发的通知,SDK会自动处理,根据下发配置标题和内容自动弹出通知,无需在MyMessageRecevier中添加业务代码。

  • 消息类型

    服务器下发的消息可以在初始化中创建的MyMessageReceiver对应的回调方法中获得。如需弹出通知,需要自己根据下发的内容在此模式下弹出通知。

三方辅助推送通道

当App不在运行状态时,通过三方辅助推送通道可以将消息离线推送到手机。该推送通道无需额外初始化,您只需申请和配置好三方辅助的推送通道即可,详细参见移动应用推送开发指南

目前支持三方辅助推送通道的手机有:小米、华为、VIVO 、OPPO、FCM。

  • 小米、OPPO、FCM的三方推送:在初始化时配置参数,详细请参见SDK初始化
  • 华为、VIVO的三方推送:需要在AndroidManifest.xml配置如下相关信息。
    说明 测试华为离线推送功能时,须确保测试App的签名与提交至华为推送控制台的App签名保持一致。
    <!-- huawei push start -->
    <meta-data    
        android:name="com.huawei.hms.client.appid"    
        android:value="your huawei push appid" />
    <!-- huawei push end -->
    
    <!-- vivo push start -->
    <meta-data    
        android:name="com.vivo.push.api_key"    
        android:value="your vivo push api_key" />
    <meta-data    
        android:name="com.vivo.push.app_id"    
        android:value="your vivo push app id" />
    <!-- vivo push start -->

混淆配置

proguard-rules.pro文件中,加入以下代码,排除不需要被混淆的类和方法。

-keepclasseswithmembernames class ** {
    native <methods>;
}

-keepattributes Signature

-keep class sun.misc.Unsafe { *; }

-keep class com.taobao.** {*;}

-keep class com.alibaba.** {*;}

-keep class com.alipay.** {*;}

-keep class com.ut.** {*;}

-keep class com.ta.** {*;}

-keep class anet.**{*;}

-keep class anetwork.**{*;}

-keep class org.android.spdy.**{*;}

-keep class org.android.agoo.**{*;}

-keep class android.os.**{*;}

-dontwarn com.taobao.**

-dontwarn com.alibaba.**

-dontwarn com.alipay.**

-dontwarn anet.**

-dontwarn org.android.spdy.**

-dontwarn org.android.agoo.**

-dontwarn anetwork.**

-dontwarn com.ut.**

-dontwarn com.ta.**