Flutter通信插件mellowtel的使用
Flutter通信插件mellowtel的使用
Mellowtel
是一个开源的、可选择加入的透明收益引擎,适用于Flutter应用。
使用
通过Mellowtel
的开源库,您的用户可以共享他们未使用的部分互联网流量,使用一个透明的选择加入/退出机制。可信合作伙伴——从初创公司到501©(3)非营利组织——可以通过该网络访问互联网,而您将获得一部分收入(约1000名用户 -> 大约每月50美元)。
您可以注册以加入成为开发者。
安装
在您的 pubspec.yaml
文件中添加 mellowtel
:
flutter pub add mellowtel
当在macOS上运行时,请配置macOS App沙盒,仅提供网络权限。(跳过硬件权限)
使用
1. 初始化 Mellowtel
首先,使用您的唯一配置密钥和用户同意弹窗的详细信息创建一个 Mellowtel
实例。
import 'package:mellowtel/mellowtel.dart';
final Mellowtel mellowtel = Mellowtel("mellowtel_key",
dialogConfiguration: const ConsentDialogConfiguration(
appName: 'King Kong',
incentive: '赚取500个硬币在Sling Kong游戏里',
appIcon: 'asset/logo.png', // 可选
acceptButtonText: '我要硬币!', // 可选
),
);
2. 开始抓取过程
使用 start()
方法来通知 mellowtel
开始操作。
await mellowtel.start(
context, // [BuildContext] 用于显示同意弹窗。
onOptIn: () async {
// 同意提供服务时处理启用服务。
},
onOptOut: () async {
// 拒绝同意时处理禁用服务。
},
);
这将在首次打开时为用户提供一个选择同意的弹窗。
3. 同意设置页面(可选)
Mellowtel
确保您的用户拥有完全的控制权和隐私。您的用户可以在任何时候从同意设置页面更改他们的同意状态。您可以在应用的设置页面中提供此选项。
await mellowtel.showConsentSettingsPage(
context,
onOptIn: () async {
// 同意提供服务时处理启用服务。
},
onOptOut: () async {
// 拒绝同意时处理禁用服务。
},
);
4. 部署前检查
为了确保 mellowtel
正常运行,在部署之前测试您的应用,并将 showDebugLogs
设置为 true
。
import 'package:mellowtel/mellowtel.dart';
final Mellowtel mellowtel = Mellowtel(
// 其他参数
showDebugLogs: true
);
这应该会在几分钟内开始在调试日志中显示 [MELLOWTEL]: USAGE SUCCESS
。如果看不到日志或遇到错误日志,请联系 Mellowtel
支持。
平台支持
该包支持iOS、macOS和Windows平台。Android和Web平台暂不支持。
如遇任何错误,请在GitHub问题页面报告。
未来支持
我们正在努力为Android和Web平台添加支持。敬请关注更新。
示例代码
以下是一个完整的示例代码,展示了如何使用 Mellowtel
插件。
import 'package:flutter/material.dart';
import 'package:mellowtel/mellowtel.dart';
void main() {
WidgetsFlutterBinding.ensureInitialized();
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('HTML提取器管理器'),
),
body: const HtmlExtractorWidget(),
),
);
}
}
class HtmlExtractorWidget extends StatefulWidget {
const HtmlExtractorWidget({super.key});
[@override](/user/override)
HtmlExtractorWidgetState createState() => HtmlExtractorWidgetState();
}
class HtmlExtractorWidgetState extends State<HtmlExtractorWidget> {
final Mellowtel mellowtel = Mellowtel("123",
dialogConfiguration: const ConsentDialogConfiguration(
appName: 'King Kong',
incentive: '赚取500个硬币在Sling Kong游戏里',
appIcon: 'asset/logo.png', // 可选
acceptButtonText: '我要硬币!', // 可选
),
showDebugLogs: true);
[@override](/user/override)
void initState() {
super.initState();
}
[@override](/user/override)
Widget build(BuildContext context) {
return SingleChildScrollView(
padding: const EdgeInsets.all(16.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Center(
child: ElevatedButton(
onPressed: () async {
await mellowtel.start(context, showConsentDialog: true,
onOptIn: () async {
// 同意提供服务时处理启用服务。
}, onOptOut: () async {
// 拒绝同意时处理禁用服务。
});
},
child: const Text('开始'),
),
),
const SizedBox(height: 16.0),
Center(
child: ElevatedButton(
onPressed: () async {
await mellowtel.showConsentSettingsPage(context,
onOptIn: () async {
// 同意提供服务时处理启用服务。
}, onOptOut: () async {
// 拒绝同意时处理禁用服务。
});
},
child: const Text('设置'),
),
),
const SizedBox(height: 16.0),
],
),
);
}
[@override](/user/override)
void dispose() {
mellowtel.stop();
super.dispose();
}
}
更多关于Flutter通信插件mellowtel的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter通信插件mellowtel的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在Flutter中,与原生平台(Android和iOS)进行通信通常需要使用插件。mellowtel
不是一个广为人知的Flutter插件,但假设它是一个用于某种特定通信功能的插件(例如,发送短信、电话呼叫等),我们可以根据一般Flutter插件的使用方式来提供一个示例。需要注意的是,如果 mellowtel
插件有特定的API和用法,你应该查阅其官方文档以获取准确信息。
不过,由于mellowtel
可能不是官方的或广泛使用的插件,我将提供一个假设性的示例,展示如何在一个假想的通信插件中封装和调用原生代码。如果你确实有一个具体的mellowtel
插件,请确保参考其文档来调整以下代码。
假设性插件使用示例
1. 创建Flutter插件项目(如果mellowtel
不是现成的)
首先,你可能需要创建一个Flutter插件项目,如果你没有现成的mellowtel
插件。这可以通过Flutter命令行工具完成:
flutter create --template=plugin mellowtel
2. 在android
文件夹中编写原生代码
在mellowtel/android/src/main/java/com/example/mellowtel/MellowtelPlugin.java
中编写Android平台的实现:
package com.example.mellowtel;
import androidx.annotation.NonNull;
import io.flutter.embedding.engine.plugins.FlutterPlugin;
import io.flutter.embedding.engine.plugins.activity.ActivityAware;
import io.flutter.embedding.engine.plugins.activity.ActivityPluginBinding;
import io.flutter.plugin.common.MethodCall;
import io.flutter.plugin.common.MethodChannel;
import io.flutter.plugin.common.MethodChannel.MethodCallHandler;
import io.flutter.plugin.common.MethodChannel.Result;
import android.content.Context;
import android.content.Intent;
import android.telephony.SmsManager;
public class MellowtelPlugin implements FlutterPlugin, MethodCallHandler, ActivityAware {
private MethodChannel channel;
private Context applicationContext;
@Override
public void onAttachedToEngine(@NonNull FlutterPluginBinding flutterPluginBinding) {
channel = new MethodChannel(flutterPluginBinding.getBinaryMessenger(), "mellowtel");
channel.setMethodCallHandler(this);
applicationContext = flutterPluginBinding.getApplicationContext();
}
@Override
public void onMethodCall(@NonNull MethodCall call, @NonNull Result result) {
if (call.method.equals("sendSms")) {
String phoneNumber = call.argument("phoneNumber");
String message = call.argument("message");
if (phoneNumber == null || message == null) {
result.error("INVALID_ARGUMENT", "Phone number and message must not be null", null);
return;
}
SmsManager smsManager = SmsManager.getDefault();
smsManager.sendTextMessage(phoneNumber, null, message, null, null);
result.success(null);
} else {
result.notImplemented();
}
}
@Override
public void onDetachedFromEngine(@NonNull FlutterPluginBinding binding) {
channel.setMethodCallHandler(null);
}
@Override
public void onAttachedToActivity(ActivityPluginBinding binding) {
// No-op
}
@Override
public void onDetachedFromActivityForConfigChanges() {
// No-op
}
@Override
public void onReattachedToActivityForConfigChanges(ActivityPluginBinding binding) {
// No-op
}
@Override
public void onDetachedFromActivity() {
// No-op
}
}
3. 在ios
文件夹中编写原生代码(如果使用iOS)
由于iOS开发通常使用Swift或Objective-C,这里只提供一个Swift的示例框架:
在mellowtel/ios/Classes/MellowtelPlugin.swift
中:
import Flutter
public class MellowtelPlugin: NSObject, FlutterPlugin {
public static func register(with registrar: FlutterRegistrar) {
let channel = FlutterMethodChannel(name: "mellowtel", binaryMessenger: registrar.messenger())
let instance = MellowtelPlugin()
registrar.addMethodCallDelegate(instance, channel: channel)
}
public func handle(_ call: FlutterMethodCall, result: @escaping FlutterResult) {
if call.method == "sendSms" {
guard let phoneNumber = call.arguments?["phoneNumber"] as? String,
let message = call.arguments?["message"] as? String else {
result(FlutterError(code: "INVALID_ARGUMENT", message: "Phone number and message must not be null", details: nil))
return
}
// 假设有一个发送SMS的方法(这里需要iOS的原生实现)
// sendSMS(to: phoneNumber, message: message) { success in
// if success {
// result(nil)
// } else {
// result(FlutterError(code: "SEND_FAILED", message: "Failed to send SMS", details: nil))
// }
// }
// 由于这是一个假设性示例,我们直接返回成功
result(nil)
} else {
result(FlutterMethodNotImplementedError(methodName: call.method))
}
}
}
注意:上面的iOS代码缺少实际的SMS发送逻辑,因为iOS上发送SMS需要用户交互,通常通过MFMessageComposeViewController
来实现,这超出了简单方法调用的范围。
4. 在Flutter中使用插件
在你的Flutter项目中,添加对插件的依赖(如果它是一个独立的包),然后你可以这样调用它:
import 'package:flutter/material.dart';
import 'package:mellowtel/mellowtel.dart'; // 假设包名是mellowtel
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Mellowtel Example'),
),
body: Center(
child: ElevatedButton(
onPressed: _sendSms,
child: Text('Send SMS'),
),
),
),
);
}
Future<void> _sendSms() async {
try {
await Mellowtel.sendSms(phoneNumber: '1234567890', message: 'Hello, this is a test message!');
print('SMS sent successfully');
} catch (e) {
print('Failed to send SMS: $e');
}
}
}
注意:上面的Dart代码假设mellowtel
插件有一个静态方法sendSms
,这取决于你如何在插件中定义接口。如果mellowtel
插件的实际API不同,请相应调整代码。
由于mellowtel
可能不是一个真实存在的插件,上述代码是一个假设性的示例,展示了如何创建一个Flutter插件来封装原生功能,并在Flutter应用中调用它。如果你有一个具体的mellowtel
插件,请参考其官方文档和示例代码。