leancloud_official_plugin
An official flutter plugin for LeanCloud real-time message service based on LeanCloud-Swift-SDK and LeanCloud-Java-SDK.
Flutter Getting Started
This project is a starting point for a Flutter plug-in package, a specialized package that includes platform-specific implementation code for Android and iOS.
For help getting started with Flutter, view online documentation, which offers tutorials, samples, guidance on mobile development, and a full API reference.
Usage
Adding dependency
-
Following this document to add leancloud_official_plugin to your app, like this:
dependencies: leancloud_official_plugin: '>=x.y.z <(x+1).0.0' # Recommend using up-to-next-major policy.
-
Using Gradle and CocoaPods to add platform-specific dependencies.
- Using CocoaPods in terminal
- do
$ cd ios/
- then
$ pod update
or$ pod install --repo-update
- do
- Gradle
- Using CocoaPods in terminal
Initialization
-
import
package:leancloud_official_plugin/leancloud_plugin.dart
inlib/main.dart
of your project, like this:import 'package:leancloud_official_plugin/leancloud_plugin.dart';
-
import
cn.leancloud.LeanCloud
,cn.leancloud.LCLogger
andcn.leancloud.im.LCIMOptions
inYourApplication.java
of your project, then set up ID, Key and URL, like this:import io.flutter.app.FlutterApplication; import cn.leancloud.LeanCloud; import cn.leancloud.LCLogger; import cn.leancloud.im.LCIMOptions; public class YourApplication extends FlutterApplication { @Override public void onCreate() { super.onCreate(); LCIMOptions.getGlobalOptions().setUnreadNotificationEnabled(true); LeanCloud.setLogLevel(LCLogger.Level.DEBUG); LeanCloud.initialize(this, YOUR_LC_APP_ID, YOUR_LC_APP_KEY, YOUR_LC_SERVER_URL); } }
-
import
LeanCloud
inAppDelegate.swift
of your project, then set up ID, Key and URL, like this:import Flutter import LeanCloud @UIApplicationMain @objc class AppDelegate: FlutterAppDelegate { override func application( _ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? ) -> Bool { do { LCApplication.logLevel = .all try LCApplication.default.set( id: YOUR_LC_APP_ID, key: YOUR_LC_APP_KEY, serverURL: YOUR_LC_SERVER_URL) GeneratedPluginRegistrant.register(with: self) return super.application(application, didFinishLaunchingWithOptions: launchOptions) } catch { fatalError("\(error)") } } }
Push setup (optional)
Due to different push service in iOS and Android, the setup-code should be wrote in native platform. it's optional, so if you no need of push service, you can ignore this section.
-
iOS
import Flutter import LeanCloud import UserNotifications @UIApplicationMain @objc class AppDelegate: FlutterAppDelegate { override func application( _ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? ) -> Bool { do { LCApplication.logLevel = .all try LCApplication.default.set( id: YOUR_LC_APP_ID, key: YOUR_LC_APP_KEY, serverURL: YOUR_LC_SERVER_URL) GeneratedPluginRegistrant.register(with: self) /* register APNs to access token, like this: */ UNUserNotificationCenter.current().getNotificationSettings { (settings) in switch settings.authorizationStatus { case .authorized: DispatchQueue.main.async { UIApplication.shared.registerForRemoteNotifications() } case .notDetermined: UNUserNotificationCenter.current().requestAuthorization(options: [.badge, .alert, .sound]) { (granted, error) in if granted { DispatchQueue.main.async { UIApplication.shared.registerForRemoteNotifications() } } } default: break } } return super.application(application, didFinishLaunchingWithOptions: launchOptions) } catch { fatalError("\(error)") } } override func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) { super.application(application, didRegisterForRemoteNotificationsWithDeviceToken: deviceToken) /* set APNs deviceToken and Team ID. */ LCApplication.default.currentInstallation.set( deviceToken: deviceToken, apnsTeamId: YOUR_APNS_TEAM_ID) /* save to LeanCloud. */ LCApplication.default.currentInstallation.save { (result) in switch result { case .success: break case .failure(error: let error): print(error) } } } override func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) { super.application(application, didFailToRegisterForRemoteNotificationsWithError: error) print(error) } }
-
Android
Sample Code
After initialization, you can write some sample code and run it to check whether initializing success, like this:
Open
// new an IM client
Client client = Client(id: CLIENT_ID);
// open it
await client.open();
Query Conversations
// the ID of the conversation instance list
List<String> objectIDs = [...];
// new query from an opened client
ConversationQuery query = client.conversationQuery();
// set query condition
query.whereContainedIn(
'objectId',
objectIDs,
);
query.limit = objectIDs.length;
// do the query
List<Conversation> conversations = await query.find();