IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> 【Flutter 专题,高并发系统基础篇 -> 正文阅读

[移动开发]【Flutter 专题,高并发系统基础篇

 ndk {
    abiFilters 'armeabi', 'armeabi-v7a', 'x86', 'x86_64', 'mips', 'mips64', 'arm64-v8a', 'arm6'
}
manifestPlaceholders = [
    XG_ACCESS_ID : "1500018481",
    XG_ACCESS_KEY : "AW8Y2K3KXZ38",
]

}


#### 1.2 方法使用

????小菜按照官网的介绍尝试了一些常用的 **API** 方式,主要分为应用类,账号类和标签类三种 **API**,小菜业务中没有应用账号和标签模块,暂未深入研究;

![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/936c664f502645919262126afda2eeed~tplv-k3u1fbpfcp-zoom-1.image)

*   应用接口 **API**

##### a. 注册推送服务

????对于服务的注册初始化,可以在首次进入应用 **initState()** 中直接初始化,也可以根据业务逻辑在固定的位置进行初始化,需要传递申请的账号 **ID** 和 **KEY**;注册成功之后会在 **onRegisteredDone()** 中进行回调,并获取对应设备的唯一 **Token**;

XgFlutterPlugin().startXg(“1500018481”, “AW8Y2K3KXZ38”);

// 注册回调
XgFlutterPlugin().addEventHandler(
onRegisteredDone: (String msg) async {
print(“HomePage -> onRegisteredDone -> $msg”);
_showDialog(‘注册成功’, msg);
},
);


![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/16b60e6ee31241b4a4c50d6c5cc39be6~tplv-k3u1fbpfcp-zoom-1.image)

##### b. 注销推送服务

????服务的注销方法可以通过 **stopXg()** 进行处理,并在 **unRegistered** 进行回调监听;

XgFlutterPlugin().stopXg();

// 注销回调
XgFlutterPlugin().addEventHandler(
unRegistered: (String msg) async {
print(“HomePage -> unRegistered -> $msg”);
},
);


##### c. 设备推送标识

????对于设备唯一标识的获取,可以通过注册初始化成功之后获取,也可以通过 **XgFlutterPlugin.xgToken** 获取唯一 **Token**;

Future getTPNSToken(title) async {
try {
String xgToken = await XgFlutterPlugin.xgToken;
print(‘HomePage -> getTPNSToken -> $xgToken’);
_showDialog(title, xgToken);
} catch (e) {
print(e.toString());
}
}


![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/0a81607750a244678d8c47ab275d5c28~tplv-k3u1fbpfcp-zoom-1.image)

##### d. 上报角标数

????对于桌面角标,在通知类消息中 **华为** 和 **小米** 设备在开启权限之后,接收通知会由桌面角标的更新;而 **TPNS** 提供的 **setBadge()** 只有在 **iOS** 环境下支持,对于 **Android** 环境下的透传类型或其他厂商设备的支持,可以通过 **Flutter** 与 **Native** 通信来由原生实现; ![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/e700e077d13e4cce8f07bde25a453f07~tplv-k3u1fbpfcp-zoom-1.image)

##### e. SDK 版本

????**TPNS SDK** 版本可以通过 **XgFlutterPlugin.xgSdkVersion** 获取;

Future getTPNSSDKVersion(title) async {
try {
String sdkVersion = await XgFlutterPlugin.xgSdkVersion;
print(‘HomePage -> getTPNSSDKVersion -> $sdkVersion’);
_showDialog(title, sdkVersion);
} catch (e) {
print(e.toString());
}
}


![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/da533c8daf554c7380554052d46934f9~tplv-k3u1fbpfcp-zoom-1.image)

*   账号接口 **API**

????**TPNS** 提供了个性化服务,关于账号的绑定和解绑等功能,可以根据具体的业务逻辑进行处理;

String inputStr = “ACE_Flutter”;
// 设置账号
XgFlutterPlugin().setAccount(inputStr, AccountType.UNKNOWN);
// 解绑账号
XgFlutterPlugin().deleteAccount(inputStr, AccountType.UNKNOWN);
// 清空账号
XgFlutterPlugin().cleanAccounts();

XgFlutterPlugin().addEventHandler(
xgPushDidBindWithIdentifier: (String msg) async {
print(“HomePage -> xgPushDidBindWithIdentifier -> $msg”);
_showDialog(‘绑定标签 $inputStr’, msg);
},
xgPushDidUnbindWithIdentifier: (String msg) async {
print(“HomePage -> xgPushDidUnbindWithIdentifier -> $msg”);
_showDialog(‘解绑账号’, msg);
},
xgPushDidClearAllIdentifiers: (String msg) async {
print(“HomePage -> xgPushDidClearAllIdentifiers -> $msg”);
_showDialog(‘清除全部账号’, msg);
}
)


*   标签接口 **API**

????**TPNS** 的用户标签功能比较强大,可以针对性的进行地理围栏或标签分布的推送;**TPNS** 提供了绑定和解绑标签,更新和清理标签等功能,方便针对性的进行数据推送;

String inputStr = “ACE_Flutter”;
// 绑定标签
XgFlutterPlugin().addTags([inputStr]);
// 解绑标签
XgFlutterPlugin().deleteTags([inputStr]);
// 更新标签
XgFlutterPlugin().setTags([inputStr]);
// 清除标签
XgFlutterPlugin().cleanTags();


### 2\. 通知类消息

????小菜在上一篇文章中介绍了 **TPNS** 消息发布后台,不管是哪种方式集成,发布后台是一致的;

#### 2.1 接收 & 展示

????**通知类 Push** 在设备开启权限时,接收消息后会自动展示通知,这是由 **TPNS SDK** 实现好的,与原生一致,**通知类 Push** 标题和内容也只能以通过消息后台发布为准,不能自由更改;其中 **通知类 Push** 接收通过 **onReceiveNotificationResponse()** 方法回调监听;

XgFlutterPlugin().addEventHandler(
onReceiveNotificationResponse: (Map<String, dynamic> msg) async {
print(“HomePage -> onReceiveNotificationResponse -> $msg”);
_showDialog(‘通知类消息接收’, msg.toString());
},
);


![TPNS_通知类_接收.jpg](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/440bcb5b2ccf42338a068d167834ca15~tplv-k3u1fbpfcp-zoom-1.image) ![TPNS_通知类_展示.jpg](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/a9de951e41fa438d9b61907757e7e1ce~tplv-k3u1fbpfcp-zoom-1.image)

#### 2.2 点击

????**通知类 Push** 消息点击是通过 **xgPushClickAction()** 方法进行回调,之后的业务逻辑可以根据消息返回的信息进行处理;小菜为了适配其他的 Push 类型,调整了点击后的操作,默认为启动 **app**,小菜通常在【附加参数】中添加 **Json** 进行数据解析,在进行之后的业务处理;

XgFlutterPlugin().addEventHandler(
xgPushClickAction: (Map<String, dynamic> msg) async {
print(“HomePage -> xgPushClickAction -> $msg”);
_showDialog(‘通知类消息点击’, msg.toString());
},
);


![TPNS_通知类_点击.jpg](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/7a476a6a9c76421b838a639372ffcd12~tplv-k3u1fbpfcp-zoom-1.image)

### 3\. 透传类消息

????**透传类 Push** 相比 **通知类 Push** 要复杂一些,**TPNS** 只提供了 **透传类 Push** 接收,不会进行 **Notification** 通知展示;因此小菜通过 **Flutter-Native** 消息通信进行处理;其中 **Notification** 的展示点击需要 **Native** 方面进行配合处理; ![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/bd7bfe1f991c4a66a80fd1ecd45cb62c~tplv-k3u1fbpfcp-zoom-1.image)

#### 3.1 接收

????**透传类 Push** 通过 **onReceiveMessage()** 进行消息接收的回调监听;之后,小菜建立一个 **MethodChannel** 将消息传递给 **Android Native**;

XgFlutterPlugin().addEventHandler(
onReceiveMessage: (Map<String, dynamic> msg) async {
print(“HomePage -> onReceiveMessage -> $msg”);
_showDialog(‘透传类消息接收’, msg.toString());
await methodChannel
.invokeMethod(‘tpns_extras’, msg[‘customMessage’])
.then((val) {
print(“HomePage -> 透传类消息接收 -> $val”);
if (val != null) {
_showDialog(‘透传类消息点击’, val);
}
});
},
);


![TPNS_透传类_接收.jpg](https://img-blog.csdnimg.cn/img_convert/a0f4a5f2e1b616457825a7b0a410ca9c.png)

#### 3.2 展示

omePage -> 透传类消息接收 -> $val");
        if (val != null) {
          _showDialog('透传类消息点击', val);
        }
      });
    },
); 

[外链图片转存中…(img-zW3bNUAq-1630144073971)]

3.2 展示

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-08-29 09:28:21  更:2021-08-29 09:28:49 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 -2025/1/31 6:13:27-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码