본문 바로가기
반응형

📱Mobile21

[Swift] SwiftUI Push Notifications(FCM) APN(APNS) 푸쉬알림 예제 Firebase Cloud Messaging/Google Cloud Messaging(FMC/GCM) Google Cloud Messaging(GCM)이 Firebase Cloud Messaging(FCM)으로 변경되었다. 2021년부터 무료로 사용할 수 있는 Android, iOS 및 웹 애플리케이션 용 메시지 및 알림을 위한 크로스 플랫폼 클라우드 솔루션 APN/APNS(Apple Push Notification/Apple Push Notification Service) 타사 응용 프로그램 개발자가 Apple 장치에 설치된 응용 프로그램으로 알림 데이터를 보낼 수 있도록 Apple 에서 만든 플랫폼 알림서비스 APNs에서 디바이스로 보내기 원하는 메시지를 받고, 이곳에서 메시지의 신뢰도를 검사해서 d.. 2023. 7. 9.
[Flutter] 플러터 http GET, POST 사용하기, 요청(Request), 응답(Response) project/pubspec.yaml http: 0.12.2 추가한다. dependencies: flutter: sdk: flutter # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^0.1.3 http: 0.12.2//add dev_dependencies: flutter_test: sdk: flutter Session 제어를 위해 클래스를 만들고 그 안에서 헤더 쿠키 등 셋팅, 리스폰스의 응답을 각 상태코드에 따라서 얼럿을 띄우는 등의 작업분기를 추가한다. Session 클래스를 생성한다. impor.. 2023. 7. 4.
[Swift] SwiftUI Infinite ScrollView 무한스크롤뷰 데이터 추가로드 trainingApp.swift import SwiftUI @main struct trainingApp: App { var body: some Scene { WindowGroup { ContentView() } } } ContentView.swift import SwiftUI struct ContentView: View { @State var current: Int = 0 @State var maxCnt: Int = 0 @State var itemList: [ItemModel] = [] @State var hasMorePages:Bool = true var body: some View { GeometryReader { geometry in let columns: [GridItem] = [GridItem(.. 2021. 11. 1.
[Swift] SwiftUI TabView(bottom navigation bar) + SideMenubar 예제 trainingApp.swift import SwiftUI @main struct trainingApp: App { var body: some Scene { WindowGroup { ContentView() } } } ContentView.swift import SwiftUI struct ContentView: View { @State var showMenu = false var body: some View { ZStack{ GeometryReader { geometry in let width = geometry.size.width let height = geometry.size.height if self.showMenu { MenuView() .frame(width: width / 1.5) .trans.. 2021. 11. 1.
[Swift] SwiftUI KeyChain Service 예제 KeyChain Services 키체인 서비스란? 사용자를 대신하여 소량의 데이터를 안전하게 저장할 수 있습니다. 대부분의 사람들은 수많은 온라인 계정을 관리하고, 일반적으로 여러 계정에 걸쳐 간단한 암호를 재활용하기에 안전하지 않습니다. 이에 대응하여 키체인 서비스 API는 앱에 키체인이라는 암호화된 데이터베이스에 사용자 데이터의 작은 비트를 저장하는 메커니즘을 제공하여 이 문제를 해결하는데 도움이 됩니다. 비밀번호가 안전하게 기억되면 사용자가 복잡한 비밀번호를 자유롭게 선택할 수 있습니다. 비밀번호에 국한되지 않고 인증서, 키 및 신뢰 서비스로 관리하는 암호화 키 및 인증서도 보관이 가능하며 이것들를 통해 사용자는 보안 통신에 참여하고 다른 사용자 및 장치와 신뢰를 구축할 수 있습니다. API Com.. 2021. 10. 30.
[Swift] SwiftUI WebView, WebView + javascript message handler 예제 앱의 종류에 따라서 필요시 웹 뷰를 구현하는 앱들이 있다. 단순히 보여주는 용도도 가능하나 하이브리드 앱은 웹과 앱이 서로 상호작용하도록 구현을 많이하는데 일반 사용자는 웹화면을 보고있는지 모르는 것처럼 느낄 수 있다. 단순히 보여주기만 할 수도 있지만 서로 상호작용 할 수도 할 수 있다. 1. WebView WebView.swift import SwiftUI import WebKit struct WebView: UIViewRepresentable { var url: String func makeUIView(context: Context) -> WKWebView { guard let url = URL(string: self.url) else { return WKWebView() } let webView .. 2021. 9. 28.
[Swift] SwiftUI SHA256을 이용한 간단한 로그인 구현 예제 SHA256을 사용하여 password라는 문자열의 해쉬값을 만든다. 회원가입 절차는 없음으로 id는 "kim" 고정이고 password는 "password" 으로 고정 ContentView.swift import SwiftUI import CryptoKit struct FieldStyle: ViewModifier { let lightGreyColor = Color(red: 240.0/255.0, green: 240.0/255.0, blue: 240.0/255.0, opacity: 1.0) func body(content: Content) -> some View { return content .padding() .background(lightGreyColor) .cornerRadius(5.0) .padd.. 2021. 9. 28.
[Swift] SwiftUI/StoryBoard LaunchScreen + Sleep 예제 런치 화면 / 스플래시 화면은 사용자가 제일 처음 마주하는 화면이다. 사용자가 메인화면을 보기전에 하얀 빈 화면을 마주하게된다면 현재 사용하는 앱이 반응성이 좋지않다는 인식을 해줄 수 있다. 이러한 이유 때문에 런치 화면을 만들어서 앱이 실행되자 마자 마주할 수 있는 화면을 만들어야한다. 런치 화면에서는 보통 클라이언트에서 초기에 처리해야될 작업이 있거나, 서버로부터 데이터를 불러오는 작업, 불러오고 처리하는 과정들이 있을 수 있는데 이러한 작업을 하는 동안에 유저의 데이터가 없는 상태에서 메인화면으로 넘어가지 않도록 할 수 있다. 고정화면만 보여줄 수 있는데, 상태를 변환하여 표시해주는 방법은 찾지 못하였다. 없다는 얘기도 있는것 같은데 확실치는 않다. LaunchScreen과 Splash 두 가지가 .. 2021. 9. 27.
[Flutter] 간단한 앱 만들기 (provider pattern, translator(google 번역), ChuckNorris(19joke json api), jsontoclass) ChuckNorris 라는 19세 농담을 던져주는 json api가 있습니다. 그 rest api를 사용해서 화면에 뿌려지는 간단한 어플을 만들어보도록 하겠습니다. 우선 JSON To Dart Class (JsonToDartClass)를 설치하여줍니다. 이런게 플러그인으로 있는지 몰랐는데.. 매우 좋습니다!!! 짱짱 json 형식을 dart class 로 바꾸어집니다. 원하는대로 바꾸어지지 않을 수 있지만 몇개만 추가하면되서 무조건 이 방식이 좋습니다. 먼저 provider, http, translator 이렇게 3가지를 추가해줍니다. provider 패턴을 이용할것이고 http로 json response를 받을것이고 translator로 영어로된것을 한글로 번역할것입니다. 파일트리입니다. 저는 연습장 .. 2021. 1. 8.
flutter 프로그레스바 progress bar circle progress bar example flutter 기본 ProgressBar는 구글링하면 쉽게 찾을 수 있다. 위 두개의 경우 매우 간단한데 사용할땐 Stack에 넣어서 맨 상단에 쌓아주면 된다. 그리고 라이브러리를 가져와서 사용하는 것들이 있다. flutter_spinkit 을 사용해보도록 하자. 매우 쉽고 빠르게 적용 가능하다. 단순 프로그레스 애니메이션인데 LIKES가 이렇게 높을 줄은 몰랐다. 먼저 pubspec.yaml에 추가해주자. dependencies: flutter: sdk: flutter # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. cupertin.. 2021. 1. 8.
flutter secure storage, 자동로그인, android KeyStore example flutter secure storage를 사용한 자동로그인을 해보도록 하겠다. 계정은 하나만 사용하지않고 여러계정을 사용하도록 하겠다. 디버깅을 많이 해보지 않았다. 대충 이런 식이다 라고만, 이렇게 사용하는 식이라는것만 대충 보고 넘어가면 될꺼같다. flutter secure storage flutter에서 각 플랫폼(android, ios)의 내부저장소(keychain or keystore)를 사용할 수 있게 해주는 라이브러리다! iOS에서는 사용해보지 않았지만 Keychain이라는 것을 사용하고 있는것 같다. android keystore는 사용해본적이 있다. 안드로이드는 루팅하기 쉬운 운영체제여서 Shared Preference 같은 쉽게 사용할 수 있는 내부 저장소들은 간단한 루팅과정만 거쳐도.. 2021. 1. 7.
[Flutter] provider + [Change Notifier] 를 사용한 Provider Pattern example 이때까지 다양한 BLOC 패턴으로 코드를 작성해보았다. 하지만 BLOC의 로직 분할을 위한 다수의 클래스 생성으로 인해 복잡성 문제가 있기 때문에 2019년 Google에서 적극 추천한 Provider Pattern을 사용해보도록 하겠다. 구글에서 만든것은 아니고 커뮤니티에서 올라온것이라는데 구글에서 적극 추천을 한 것이라고 한다. 또한 BLOC가 다수의 클래스로 복잡하기 때문에 아에 쓰지 않는것은 아니다. 어느정도 규모가 있는 프로젝트는 BLOC패턴을 사용하여 정확한 로직분리를 하는것이 분명히 더 좋을것으로 보인다. 소규모에 Provider, 중규모에 Provider, Bloc, 대규모에 Bloc 가 맞지 않을까 싶다. 트리이다. main.dart import 'package:flutter/founda.. 2021. 1. 6.
[Flutter] 기초가 되는 StreamBuilder BLOC 패턴, StreamSubscription, yield example 저번에는 Cubit를 사용하여 BLOC 패턴을 제작해보았다. 훤하게 눈에 잘 보이는 Cubit로 필요 동작만 깔끔하게 옵저빙 했지만 역시나 BLOC는 복잡하다. 이번에 작성하는 StreamBuilder를 사용한 BLOC 패턴 또한 복잡하다. 결국 하나의 기능을 만들려면 클래스를 최소 3, 4개를 만들어야하니 문제이다. 파일트리이다. 로직을 나누고, 이벤트와 상태를 관리한다. main.dart import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_bloc_with_stream/ticke.. 2021. 1. 6.
[Flutter] Cubit를 사용한 BLOC 패턴, Bloc.observer example CUBIT를 사용한 BLOC 패턴 Bloc.observer를 BlocObserver를 상속한 class로 초기화해서 onChange를 override해서 상태가 변할때마다 print 할것이고 navigation push 도 해볼 것 입니다. pubspec.yaml dependencies: flutter: sdk: flutter # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.0 bloc: ^6.1.0 //추가 flutter_bloc: ^6.1.0 //추가 counter_observer.dart .. 2021. 1. 4.
[Flutter] fluro package (navigation 이동, route, transition) sample code fluro 를 사용하여 route를 관리할 수 있다. arguments 정하는것도 가능하고 transitionType을 통해 원하는 애니메이션을 보이게, 안보이게 할 수도 있다. pub.dev/packages/fluro fluro | Flutter Package Fluro is a Flutter routing library that adds flexible routing options like wildcards, named parameters and clear route definitions. pub.dev code sample 이다. import 'package:flutter/material.dart'; import 'package:fluro/fluro.dart'; Handler _TestNativeH.. 2020. 12. 22.
[Swift] Optional 개념정리 (변수뒤에 !와 ?) optional 예제 Optional 개념정리 선택적인 이라는 뜻을가진 optional 은 swift에서 무엇일까요? 만약 치킨을 배달시키는 상황을 생각해볼까요? 일단 읽어볼게요! 배달어플에서 XCODE라는 치킨 가게를 클릭하고 치킨 메뉴를 선택합니다. [코드작성중] 아직은 맛 옵션을 고르지 않은 상태여서 맛은 최소 1개를 골라주세요! 라는 경고문구가 보입니다! [nil 경고] 하지만 맛 옵션을 고르지 않아도 주문은 가능하게 되어있습니다. 만약 맛옵션을 고르지 않으면 가게에서는 어떤 맛으로 줄까? 호기심에 아무맛도 고르지 않고 주문을 하게 됩니다. [nil 경고를 보았지만 실행] 주문서가 가게로 전달됩니다. [컴파일] 가게는 주문을 받았고 주문서를 읽고 순서대로 조리를 합니다. [Application 실행됨] 순서대로 조리하.. 2020. 12. 16.
[Flutter] flutter intro(splash) -> login page timer sample code flutter_example/widgets 패키지를 하나 만듭니다. main.dart import 'dart:async'; import 'package:flutter/material.dart'; import 'package:flutter_example/widgets/introPage.dart'; import 'package:flutter_example/widgets/loginPage.dart'; void main() { runApp(MyApp()); } class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( debugShowCheckedModeBanner: false, ti.. 2020. 10. 26.
[Flutter] Flutter 플랫폼 채널을 이용해서 Android 코드 호출하기 (MethodChannel) 생성시 Paltform channel language 체크 모두 해제하기 * 플랫폼 채널을 사용하는데 있어서 중요한것은 Platform channel language를 어떤것을 사용할것인지이다. Include Swift support for iOS code 를 선택한 적이 있는데 Swift 코드를 작성할 사람이 없어서 낭패를 본 적이 있다. 플랫폼 채널을 사용하려면 java, kotlin, Objective-c, swift 모두 숙지해 두어야 한다. project/lib/main.dart import 'dart:async'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; class PlatformChannel.. 2020. 10. 25.
[Flutter] Flutter 생명주기 Sample Code main.dart import 'package:flutter/material.dart'; void main() => runApp(TestApp()); class TestApp extends StatelessWidget { TestApp() { print('TestApp TestApp() start'); print('TestApp TestApp() done'); } @override Widget build(BuildContext context) { print('TestApp build() start'); print('TestApp build() done'); return MaterialApp( title: 'StatefulWidget LifecycleApp', home: _FirstStatefulWidge.. 2020. 10. 25.
[Android] altbeacon 안드로이드 비콘 연동하기 안드로이드 비콘(알트비콘) 간단하게 사용해보기 시뮬레이터로는 작동하지 않으니 꼭 안드로이드 기기를 사용 안드로이드 스튜디오 제일 좌상단의 패키지익스플로러를 Project로 변경 {나의 project}/app/src/main/AndroidMainfest.xml퍼미션 작성 앱 이용시 이용자에게 ACCESS-FINE_LOCATION 권한 허락있어야함 android-beacon-library-2.16.2.arr 파일 다운로드altbeacon arr 파일 https://altbeacon.github.io/android-beacon-library/download.htmlAndroid Beacon Libraryaltbeacon.github.io {나의 project}/app/libs < android-beacon-l.. 2020. 6. 14.
[Android] SQLite, SQL (SQLiteOpenHelper) SQLiteOpenHelper 을 이용하여 많아지는 데이터들을 저장한다. 데이터를 저장하여 유지하기때문에 앱을 꺼도 데이터가 지워지지않는다. (앱 삭제시는 지워진다.) package kr.co.hanbit.myapplication2; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import androidx.annotation.Nullable; import java.util.ArrayList; public class SQLiteHelper { private static.. 2020. 1. 4.
반응형