nchat 0.0.2 copy "nchat: ^0.0.2" to clipboard
nchat: ^0.0.2 copied to clipboard

A pure Dart/Flutter chat SDK for NBase platform with real-time messaging, GraphQL API, Socket.IO support, and multi-region capabilities.

NCloud Chat Flutter SDK #

pub package

Classic/VPC 환경에서 이용 가능합니다.


목차 #

  1. 개요
  2. 요구 사양
  3. 설치
  4. 빠른 시작
  5. 푸시 알림 설정
  6. 리전 설정
  7. 에러 처리
  8. 파일 업로드
  9. 예제

개요 #

Ncloud Chat은 실시간 채팅 및 메시지 시스템, 여러 사용자가 대화할 수 있는 채널을 구현할 수 있는 서비스입니다. 쉽고 간단하게 채팅 서비스를 구축할 수 있도록 다양한 SDK와 API를 제공합니다.

네이버 클라우드 플랫폼의 Ncloud Chat 서비스를 활용하면 로그인 환경이나 운영 도구를 개발할 필요가 없고, 인프라 관리 및 사용자 관리를 위해 별도의 시스템을 구축하지 않아도 됩니다. 직관적이고 편리한 Ncloud Chat 대시보드에서 통계 분석, 서비스 운영 및 관리가 가능하며 네이버 클라우드 플랫폼의 다양한 서비스와의 연동을 통해 강력한 채팅 환경을 구축할 수 있습니다.

Ncloud Chat이 제공하는 다양한 기능 #

기능 설명
편리한 대시보드 모바일에서도 접속할 수 있는 NCloud Chat 대시보드 화면에서 메시지 통계, 채팅 채널 관리, 악성 사용자 차단, 욕설 및 비속어 필터링, 채팅 메시지 다운로드 및 검색 가능
1:1 채팅 특정 사용자에게 알림 메시지 전달 가능, 사용자 간 1:1 채팅 시스템을 안정적으로 지원
다국어 메시지 실시간 자동 번역 다양한 나라의 사람들과 편하게 대화할 수 있도록 네이버의 강력한 AI 번역 솔루션인 파파고와 연동 기능 제공, 자동 번역 기능을 활용하여 글로벌 사용자와 쉽게 커뮤니티 구축 가능
비속어 차단 및 악성 사용자 차단 건강한 채팅 환경 구성을 위해 욕설 및 비속어가 포함된 메시지 필터링 및 삭제 가능, 악성 사용자(플레이어)는 일정 기간 동안 채팅을 이용할 수 없도록 설정 가능
실시간 분석 지표 사용자 접속 현황, 메시지 전달 현황 등을 분석할 수 있도록 다양한 분석 지표 제공
푸시 알림 FCM (Android) / APNs (iOS) 지원으로 오프라인 사용자에게도 메시지 알림 전송

요구 사양 #

Flutter #

  • Flutter 2.0 이상
  • Dart 2.12 이상 (Null Safety 지원)

Android #

  • minSdkVersion 21 이상
  • targetSdkVersion 34 권장

iOS #

  • iOS 12.0 이상
  • Xcode 14.0 이상

지원 플랫폼 #

플랫폼 지원 상태
Android ✅ 정식 지원
iOS ✅ 정식 지원
Web ⚠️ 제한적 지원
Windows/macOS/Linux ⚠️ 실험적 지원

설치 #

`pubspec.yaml` 파일에 다음을 추가하세요:

```yaml dependencies: nchat: ^0.0.2 ```


🔔 푸시 알림 설정 #

Android 설정 #

1. AndroidManifest.xml 설정

`android/app/src/main/AndroidManifest.xml`에 다음을 추가하세요:

```xml

<application>
    <!-- NChat Notification Receiver -->
    <!-- SDK에 포함되어 있으므로 별도 추가 불필요 -->
</application>
\`\`\`

2. 알림 권한 요청 (Android 13+)

```dart import 'package:permission_handler/permission_handler.dart';

// Android 13 이상에서 알림 권한 요청 if (Platform.isAndroid) { final status = await Permission.notification.request(); if (status.isGranted) { print('알림 권한 승인됨'); } } ```

3. 알림 아이콘 설정 (선택)

`android/app/src/main/res/drawable/`에 아이콘 파일 추가:

  • `ic_stat_nchat_small.png` - 상태바 알림 아이콘 (권장)
  • `ic_stat_nbase_small.png` - 대체 아이콘

iOS 설정 #

1. AppDelegate.swift 설정

```swift import Flutter import UIKit import UserNotifications

@main @objc class AppDelegate: FlutterAppDelegate { private var nchatChannel: FlutterMethodChannel?

override func application( _ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? ) -> Bool { GeneratedPluginRegistrant.register(with: self)

// Flutter MethodChannel 설정 (APNs 토큰 전달용)
if let controller = window?.rootViewController as? FlutterViewController {
  nchatChannel = FlutterMethodChannel(
    name: "io.nbase.nchat/apns",
    binaryMessenger: controller.binaryMessenger
  )
}

// APNs 권한 요청
UNUserNotificationCenter.current().delegate = self
UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .sound, .badge]) { granted, error in
  if granted {
    DispatchQueue.main.async {
      application.registerForRemoteNotifications()
    }
  }
}

return super.application(application, didFinishLaunchingWithOptions: launchOptions)

}

// APNs 토큰 수신 override func application( _ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data ) { let token = deviceToken.map { String(format: "%02.2hhx", $0) }.joined() print("[AppDelegate] APNs token: (token)") nchatChannel?.invokeMethod("onAPNsToken", arguments: token) }

// 포그라운드 알림 표시 override func userNotificationCenter( _ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void ) { completionHandler([.banner, .sound, .badge]) } } ```

2. Info.plist 설정

```xml ```

3. Capabilities 설정

Xcode에서 `Signing & Capabilities` → `+ Capability` → `Push Notifications` 추가


Flutter 코드에서 푸시 토큰 설정 #

import 'package:nchat/nchat.dart';
import 'dart:io';
import 'package:flutter/services.dart';

final _nchat = NChat();

// 초기화 후 푸시 설정
Future<void> setupPush() async {
  // Android: SDK가 자동으로 FCM 토큰 발급 및 등록
  // iOS: AppDelegate에서 APNs 토큰 수신 후 아래와 같이 처리
  
  if (Platform.isIOS) {
    const apnsChannel = MethodChannel('io.nbase.nchat/apns');
    apnsChannel.setMethodCallHandler((call) async {
      if (call.method == 'onAPNsToken') {
        final token = call.arguments as String;
        _nchat.setPushToken(token);
      }
    });
  }
}

// 푸시 상태 설정
Future<void> configurePush() async {
  await _nchat.setPushState(PushState(
    push: true,    // 푸시 알림 활성화
    night: true,   // 야간 알림 허용
    ad: false,     // 광고 알림 비허용
  ));
}

빠른 시작 #

import 'package:nchat/nchat.dart';
import 'package:flutter/material.dart';

class ChatScreen extends StatefulWidget {
  @override
  State<ChatScreen> createState() => _ChatScreenState();
}

class _ChatScreenState extends State<ChatScreen> implements ChatHandler {
  final _nchat = NChat();

  @override
  void initState() {
    super.initState();
    _nchat.addHandler('main', this);
    _initializeChat();
  }

  Future<void> _initializeChat() async {
    // 1. SDK 초기화
    await _nchat.initialize(
      projectId: 'your-project-id',
      region: 'kr',
    );

    // 2. 사용자 연결
    final user = await _nchat.connect(
      userId: 'user-001',
      name: '홍길동',
    );

    // 3. 채널 생성
    final channel = await _nchat.createChannel(
      name: '일반',
      type: 'public',
    );

    // 4. 메시지 전송
    await _nchat.sendMessage(
      channelId: channel.id,
      content: '안녕하세요!',
    );
  }

  // ChatHandler 구현
  @override
  void onMessageReceived(Message message) {
    print('새 메시지: ${message.content}');
    setState(() {
      // UI 업데이트
    });
  }

  @override
  void onConnected() {
    print('서버에 연결됨');
  }

  @override
  void onDisconnected(String reason) {
    print('연결 해제: $reason');
  }

  @override
  void dispose() {
    _nchat.removeHandler('main');
    super.dispose();
  }
}
```;
  }
}
\`\`\`

---

## 리전 설정

| 리전 | 설명 |
|------|------|
| \`kr\` | 한국 프로덕션 서버 |
| \`beta\` | 베타 서버 |
| \`dev\` | 개발 서버 (기본값) |
| \`alpha\` | 알파 서버 |
| \`local\` | 로컬 서버 (localhost:4000) |

---

## 에러 처리

```dart
try {
  await nchat.sendMessage(
    channelId: 'channel-id',
    content: '안녕하세요',
  );
} on ChatException catch (e) {
  print('에러 코드: ${e.code}');
  print('에러 메시지: ${e.message}');
}

파일 업로드 #

final file = File('/path/to/image.jpg');

final message = await nchat.sendFile(
  channelId: 'channel-id',
  file: file,
  message: '이미지 업로드',
  onProgress: (sent, total) {
    print('진행률: ${(sent / total * 100).toStringAsFixed(1)}%');
  },
);

Troubleshooting #

자주 발생하는 문제 #

문제 원인 해결 방법
연결 실패 잘못된 Project ID 대시보드에서 Project ID 확인
메시지 전송 실패 채널 미구독 subscribe() 호출 후 메시지 전송
푸시 알림 미수신 토큰 미등록 또는 권한 없음 setPushToken() 호출 및 알림 권한 확인
iOS 푸시 미동작 APNs 인증서 미설정 Apple Developer Console에서 인증서 등록
Android 푸시 미동작 FCM 설정 누락 google-services.json 파일 확인

디버깅 팁 #

  1. 로그 확인: debugPrint()로 SDK 응답 로그 확인
  2. 네트워크 상태: 인터넷 연결 및 방화벽 설정 확인
  3. 리전 설정: 올바른 리전이 설정되었는지 확인
  4. SDK 버전: 최신 버전 사용 권장

예제 #

완전한 샘플 앱은 example 디렉토리를 참조하세요.


라이선스 #

Proprietary License - 자세한 내용은 LICENSE 파일을 참조하세요.

이 소프트웨어는 NBase의 독점 소프트웨어이며 NBase 서비스와 연결해서만 사용할 수 있습니다.

0
likes
120
points
12
downloads

Publisher

verified publishernbase.io

Weekly Downloads

A pure Dart/Flutter chat SDK for NBase platform with real-time messaging, GraphQL API, Socket.IO support, and multi-region capabilities.

Repository (GitHub)
View/report issues

Documentation

API reference

License

unknown (license)

Dependencies

device_info_plus, dio, equatable, flutter, flutter_local_notifications, freezed_annotation, gql, graphql_flutter, http, http_parser, json_annotation, meta, rxdart, socket_io_client

More

Packages that depend on nchat

Packages that implement nchat