Flutter近距离消息通信插件flutter_nearby_messages_api的使用
Flutter近距离消息通信插件flutter_nearby_messages_api的使用
<Google Nearby Messages API for Flutter>安装
首先,在您的pubspec.yaml
文件中添加flutter_nearby_messages_api
作为依赖项。
dependencies:
flutter_nearby_messages_api: ^x.x.x
替换x.x.x
为最新版本号。
iOS
获取并添加Google Cloud附近的messages API密钥到您的项目中。
nearbyMessagesApi.setAPIKey('API_KEY');
在ios/Runner/Info.plist
文件中添加以下行:
<key>NSMicrophoneUsageDescription</key>
<string>麦克风用于监听来自附近设备的匿名令牌。</string>
<key>NSBluetoothAlwaysUsageDescription</key>
<string>应用程序需要访问蓝牙以发送和接收消息。</string>
<key>NSBluetoothPeripheralUsageDescription</key>
<string>通过蓝牙广播匿名令牌以发现附近设备。</string>
对于iOS 13及更高版本,请确保添加NSBluetoothAlwaysUsageDescription
。对于早期版本的iOS,请添加NSBluetoothPeripheralUsageDescription
。
Android
获取并添加Google Cloud附近的messages API密钥到您的项目中。
在AndroidManifest.xml
文件中添加以下行:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.yourapp">
<application ...>
<meta-data
android:name="com.google.android.nearby.messages.API_KEY"
android:value="API_KEY" />
</application>
</manifest>
替换API_KEY
为您实际的API密钥。
示例
下面是一个完整的示例,展示了如何使用flutter_nearby_messages_api
插件进行近距离消息通信。
import 'package:flutter/material.dart';
import 'dart:async';
import 'package:flutter_nearby_messages_api/flutter_nearby_messages_api.dart';
void main() => runApp(MyApp());
class MyApp extends StatefulWidget {
[@override](/user/override)
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
FlutterNearbyMessagesApi nearbyMessagesApi = FlutterNearbyMessagesApi();
[@override](/user/override)
void initState() {
super.initState();
initPlatformState();
}
// 平台消息是异步的,因此我们初始化在一个异步方法中。
Future<void> initPlatformState() async {
// 配置iOS
await nearbyMessagesApi.setAPIKey('API_KEY');
// 当附近设备发送消息时调用此回调
nearbyMessagesApi.onFound = (message) {
print('~~~onFound : $message');
};
// 当附近设备离开时调用此回调
nearbyMessagesApi.onLost = (message) {
print('~~~onLost : $message');
};
// 监听发布和订阅的状态
// 枚举 GNSOperationStatus {inactive, starting, active}
nearbyMessagesApi.statusHandler = (status) {
print('~~~statusHandler : $status');
};
// 使用您的消息来提示用户权限
nearbyMessagesApi.setPermissionAlert(
'您的标题', '您的消息', '拒绝', '允许');
nearbyMessagesApi.permissionHandler = (status) {
print(status);
};
nearbyMessagesApi.bluetoothPowerErrorHandler = (args) {
print('~~~ bluetoothPowerErrorHandler');
};
nearbyMessagesApi.bluetoothPermissionErrorHandler = (args) {
print('~~~ bluetoothPermissionErrorHandler');
};
nearbyMessagesApi.microphonePermissionErrorHandler = (args) {
print('~~~ microphonePermissionErrorHandler');
};
// 发布一条消息
// @require message
await nearbyMessagesApi.publish('Hello world!');
// 订阅
await nearbyMessagesApi.backgroundSubscribe();
// 启用调试模式
await nearbyMessagesApi.enableDebugMode();
// 禁用调试模式
await nearbyMessagesApi.disableDebugMode();
// 不要未经学习就使用它
// nearbyMessagesApi.setNearbyAccessPermission(true);
}
[@override](/user/override)
Widget build(BuildContext context) {
return new MaterialApp(
home: new Scaffold(
appBar: new AppBar(
title: const Text('Flutter Nearby Messages 示例'),
),
body: new Container(
color: Colors.white70,
child: new Column(children: [
new TextButton(
onPressed: () async {
await nearbyMessagesApi.publish('Hello world!');
},
child: new Text("发布")),
new TextButton(
onPressed: () async {
await nearbyMessagesApi.unPublish();
},
child: new Text("取消发布")),
new TextButton(
onPressed: () async {
await nearbyMessagesApi.backgroundSubscribe();
},
child: new Text("后台订阅")),
new TextButton(
onPressed: () async {
await nearbyMessagesApi.backgroundUnsubscribe();
},
child: new Text("取消订阅"))
]),
),
),
);
}
}
更多关于Flutter近距离消息通信插件flutter_nearby_messages_api的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter近距离消息通信插件flutter_nearby_messages_api的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是如何在Flutter项目中使用flutter_nearby_messages_api
插件进行近距离消息通信的示例代码。这个插件允许你的Flutter应用使用Google Play服务和Google Nearby Messages API进行设备间的消息交换。
1. 添加依赖
首先,你需要在pubspec.yaml
文件中添加flutter_nearby_messages_api
的依赖:
dependencies:
flutter:
sdk: flutter
flutter_nearby_messages_api: ^x.y.z # 请替换为最新版本号
2. 配置Android项目
在android/app/src/main/AndroidManifest.xml
中添加必要的权限:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.yourapp">
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
<uses-permission android:name="android.permission.BLUETOOTH_SCAN"/>
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT"/>
<application
...>
<meta-data
android:name="com.google.android.gms.nearby.MESSAGES_API"
android:value="YOUR_API_KEY"/> <!-- 替换为你的Google Cloud Platform API Key -->
</application>
</manifest>
3. 配置iOS项目
对于iOS项目,你需要在Info.plist
中添加必要的权限描述,并在AppDelegate.swift
或AppDelegate.m
中进行一些设置。由于iOS的具体配置相对复杂,这里只给出Info.plist
的部分:
<key>NSBluetoothAlwaysUsageDescription</key>
<string>Your app needs access to Bluetooth</string>
<key>NSBluetoothPeripheralUsageDescription</key>
<string>Your app needs access to Bluetooth</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>Your app needs access to location</string>
4. 使用插件进行消息发布和订阅
以下是一个简单的Flutter应用示例,展示如何使用flutter_nearby_messages_api
发布和订阅消息:
import 'package:flutter/material.dart';
import 'package:flutter_nearby_messages_api/flutter_nearby_messages_api.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: NearbyMessagesScreen(),
);
}
}
class NearbyMessagesScreen extends StatefulWidget {
@override
_NearbyMessagesScreenState createState() => _NearbyMessagesScreenState();
}
class _NearbyMessagesScreenState extends State<NearbyMessagesScreen> {
late NearbyMessagesClient _nearbyMessagesClient;
late Message _publishedMessage;
final List<Message> _subscriptions = [];
@override
void initState() {
super.initState();
_nearbyMessagesClient = NearbyMessagesClient();
_startPublishing();
_startSubscribing();
}
@override
void dispose() {
_nearbyMessagesClient.stopPublishing(_publishedMessage).then((_) {
_nearbyMessagesClient.stopSubscribing().then((_) {
_nearbyMessagesClient.shutdown();
});
});
super.dispose();
}
Future<void> _startPublishing() async {
_publishedMessage = Message(
content: 'Hello, Nearby!',
type: 'example.type.text',
);
await _nearbyMessagesClient.startPublishing(_publishedMessage);
}
Future<void> _startSubscribing() async {
_nearbyMessagesClient.startSubscribing(
callback: (Message message) {
setState(() {
_subscriptions.add(message);
});
},
options: SubscribeOptions(strategy: Strategy.ANY),
);
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Nearby Messages Example'),
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text('Published Message:'),
Text(_publishedMessage.content!),
SizedBox(height: 16.0),
Text('Received Messages:'),
..._subscriptions.map((Message message) => Text(message.content!)),
],
),
),
);
}
}
class Message {
final String? content;
final String type;
Message({this.content, required this.type});
}
注意事项
- API Key:在Android的
AndroidManifest.xml
中,确保你替换了YOUR_API_KEY
为你在Google Cloud Platform上获取的API Key。 - 权限:确保在运行时请求必要的权限,特别是在Android和iOS上。
- 错误处理:示例代码中省略了错误处理逻辑,实际开发中应该添加适当的错误处理。
这个示例提供了一个基本的框架,你可以根据需要进行扩展和修改。