# alibabacloud-push-flutter-plugin
**Repository Path**: aliyun/alibabacloud-push-flutter-plugin
## Basic Information
- **Project Name**: alibabacloud-push-flutter-plugin
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2025-05-08
- **Last Updated**: 2025-06-11
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# Aliyun Push Flutter Plugin
阿里云移动推送官方Flutter插件
## 一、快速入门

### 1.1 创建应用
EMAS平台中的应用是您实际端应用的映射,您需要在EMAS控制台创建应用,与您要加载SDK的端应用进行关联。创建应用请参见[快速入门](https://help.aliyun.com/document_detail/436513.htm?spm=a2c4g.11186623.0.0.78fa671bjAye93#topic-2225340)。
### 1.2 应用配置
Android
+ 厂商通道配置:移动推送全面支持接入厂商通道,请参见[配置厂商通道秘钥](https://help.aliyun.com/document_detail/434643.htm?spm=a2c4g.11186623.0.0.78fa671bjAye93#topic-1993457)
+ 短信联动配置:移动推送支持与短信联动,通过补充推送短信提升触达效果,请参见[短信联动配置](https://help.aliyun.com/document_detail/434653.htm?spm=a2c4g.11186623.0.0.78fa671bjAye93#topic-1993467)
+ 多包名配置:移动推送支持预先针对各渠道添加包名,实现一次推送,全渠道包消息可达。请参见[配置多包名](https://help.aliyun.com/document_detail/434645.htm?spm=a2c4g.11186623.0.0.78fa671bjAye93#topic-2019868)。
iOS
+ 证书配置:iOS应用推送需配置开发环境/生产环境推送证书,详细信息请参见[iOS 配置推送证书指南](https://help.aliyun.com/document_detail/434701.htm?spm=a2c4g.11186623.0.0.78fa4bfcpKinVG#topic-1824039)。
## 二、安装
在`pubspec.yaml`中加入dependencies
```yaml
dependencies:
aliyun_push: 0.0.2
```
## 三、配置
### 3.1 Android
#### 3.1.1 AndroidManifest配置
**1. AppKey、AppSecret配置**
在Flutter工程的android模块下的`AndroidManifest.xml`文件中设置AppKey、AppSecret:
```xml
```
`com.alibaba.app.appkey`和`com.alibaba.app.appsecret`为您在EMAS平台上的App对应信息。在EMAS控制台的应用管理中或在下载的配置文件中查看AppKey和AppSecret。
AppKey和AppSecret请务必写在``标签下,否则SDK会报找不到AppKey的错误。
**2. 消息接收Receiver配置**
创建消息接收Receiver,继承自com.alibaba.sdk.android.push.MessageReceiver,并在对应回调中添加业务处理逻辑,可参考以下代码:
```java
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 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 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");
}
}
```
将该receiver添加到AndroidManifest.xml文件中:
```xml
```
**3. 混淆配置**
如果您的项目中使用Proguard等工具做了代码混淆,请保留以下配置:
```txt
-keepclasseswithmembernames class ** {
native ;
}
-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.**{*;}
-keep class org.json.**{*;}
-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.**
```
#### 3.1.2 辅助通道集成
在国内Android生态中,推送通道都是由终端与云端之间的长链接来维持,非常依赖于应用进程的存活状态。如今一些手机厂家会在自家ROM中做系统级别的推送通道,再由系统分发给各个App,以此提高在自家ROM上的推送送达率。
移动推送针对小米、华为、荣耀、vivo、OPPO、魅族、谷歌等设备管控较严的情况,分别接入了相应的设备厂商推送辅助通道以提高这些设备上的到达率。
辅助通道的集成可参考[辅助通道集成](https://help.aliyun.com/document_detail/434677.html)。
在Flutter工程的android模块下的`AndroidManifest.xml`文件中设置各个辅助通道的配置参数:
```xml
```
**注意:**
以下3个通道配置时需要特殊处理
+ 华为通道的`com.huawei.hms.client.appid`参数值的格式是`appid=xxxx`,有个前缀`appid=`
+ 小米通道的`com.xiaomi.push.id`和`com.xiaomi.push.key`的值一般都是长数字,如果直接配置原始值,系统读取时会自动判断成long类型,但是AndroidManifest中的meta-data是不支持long类型的,这样就会造成插件读取到的值和实际值不一致,进而导致小米通道初始化失败
+ fcm通道的`com.gcm.push.sendid`值也是长数字,同样会导致插件读取时出错
解决办法:
+ 配置时在原始值前方加入`id=`,插件会自动解析并读取原始值
```xml
```
### 3.2 iOS
#### 3.2.1 Objc配置
使用Xcode打开Flutter工程的iOS模块,需要做`-Objc`配置,即应用的TARGETS -> Build Settings -> Linking -> Other Linker Flags ,需添加上 -ObjC 这个属性,否则推送服务无法正常使用 。
Other Linker Flags中设定链接器参数-ObjC,加载二进制文件时,会将 Objective-C 类和 Category 一并载入 ,若工程依赖多个三方库 ,将所有 Category 一并加载后可能发生冲突,可以使用 -force_load 单独载入指定二进制文件,配置如下 :
```c++
-force_load/CloudPushSDK.framework/CloudPushSDK
```
## 四、APIs
### `initPush`
`Future