https 적용하는 방법은 크게 2가지다 

cloudfront 사용 or load balancing 사용 

로드밸런스를 사용하겠다.

 

route53에 도메인과 ec2가 생성되어있다는 전제로 시작한다.

 

 

1.Certificate Manager에 들어가서 인증서 생성 요청

 

 

 

 

다음

 

 

 

 

원하는 도메인 주소를 입력 후 생성 (단일로 써도되지만 *.을 쓰면 모두적용된다) 다른건 건들게없다 

 

 

 

 

다만든후 인증서를 클릭한다

 

 

 

인증서 상세페이지에 도메인부분에 Route 53에서 레코드생성

 

 

 

 

route53에 구매한 도메인이 뜰거다 레코드생성 

 

 

 

route 53에서 구매한 도메인에 들어가면 인증서에 등록된 cname 이름,값 들이 들어가있다.

 

 

 

2.ec2로와서 로드밸런싱-대상그룹 을 클릭 후 생성 

 

 

 

 

대상그룹 이름만 쓰고 다른건 건들게없다 

 

 

 

 

생성 후 아래 화면에서 보류중인것으로 포함을 꼭눌러야한다

 

 

 

 

 

내려갔으면 대상 그룹 생성 

 

 

 

 

 

3.이제 ec2의 로드밸런서 생성

 

 

 

application load balancer를 클릭

 

 

 

 

 

밸런서 이름을 적고 ex)test-ALB

 

 

 

 

가지고있는 기본 vpc의 서브넷들 모두 선택

 

 

 

 

보안그룹 설정후 https를 사용할거기때문에 https만 있어도되지만 http도 사용하려면 리스터 추가로 http도 추가해준다 

 

 

 

 

 

인증서는 아까 만든 인증서 선택 그다음 로드밸런서 생성

 

 

 

 

로드밸런서 상태가 active로바뀌면 사용가능

 

 

 

 

 

4.이제 route53으로 돌아와서 가지고있는 도메인 클릭 후 레코드 생성 클릭 후 

원하는 이름과 ,레코드유형 A

별칭 선택 후 load balancer -리전 서울- 아까만든 밸런서클릭하고 만들면 잠시후에 적용된다

 

 

vpc 기본설정대신 만들어서했더니 문제가생겨서 고생을 하였다..

반응형

'aws' 카테고리의 다른 글

ec2 복사하여 재생성 ami  (0) 2023.03.17
aws route53 도메인 설정하기 (가비아)  (0) 2023.01.02
ec2 생성  (0) 2022.11.29
vpc 설정  (0) 2022.11.29

링크를 누르면 앱내의 특정페이지로 가게끔 작업하자

 

다이나믹링크 패키지 설치 

https://pub.dev/packages/firebase_dynamic_links

 

링크 만드는방법중 파이어베이스 내에서 만드는방법과 코드로 따로만드는방법이있는데 

코드로 만들어야 유동적인 파라미터값을 넣을수 있어서 코드로 만드는방법을 사용한다.

 

 

링크생성부분

final dynamicLinkParams = DynamicLinkParameters(
  link: Uri.parse("https://www.example.com/?name='hoho'&age='30' "), //이름과 나이를 파라미터로
  uriPrefix: "https://example.page.link",//파베에있는 https://page.link로 끝나는 메인링크
  androidParameters: const AndroidParameters(packageName: "com.example.app"),
  iosParameters: const IOSParameters(bundleId: "com.example.app"),
);
final dynamicLink =
    await FirebaseDynamicLinks.instance.buildShortLink(dynamicLinkParams);

 

링크생성 완료 

 

 

 

 

앱 링크받을 셋팅

링크를 열기위한 셋팅을 먼저 해줘야한다.

android

android-app-src-main-AndroidManifest.xml로 들어가서

<intent-filter>
    <action android:name="android.intent.action.VIEW"/>
    <category android:name="android.intent.category.DEFAULT"/>
    <category android:name="android.intent.category.BROWSABLE"/>
    <data
        android:host="example.com"
        android:scheme="https"/>
</intent-filter>

application-activity안에 넣는다 

 

<application
    android:name="${applicationName}"
    android:icon="@mipmap/launcher_icon"
    android:usesCleartextTraffic="true">
    <activity
        android:name=".MainActivity"
        android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
        android:exported="true"
        android:hardwareAccelerated="true"
        android:launchMode="singleTop"
        android:theme="@style/LaunchTheme"
        android:windowSoftInputMode="adjustResize">
        <meta-data
            android:name="io.flutter.embedding.android.NormalTheme"
            android:resource="@style/NormalTheme" />

        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>

        <intent-filter>
            <action android:name="android.intent.action.VIEW"/>
            <category android:name="android.intent.category.DEFAULT"/>
            <category android:name="android.intent.category.BROWSABLE"/>
            <data
                android:host="example.page.link" //파베에있는메인주소
                android:scheme="https"/>
        </intent-filter>
    </activity>

 

ios

xcode로 들어가서 

Runner - Singning & Capabilities - +Capability클릭하여 Associated Domains를 추가한다 

domains에 applinks:파베에있는메인주소

ex)applinks:example.page.link을 추가한다

 

 

 

 

링크받는부분

이제 main에서 꺼진상태에서 값받는부분과 포,백그라운드 상태서 값받는부분을 넣고 

//앱꺼졌을시
final PendingDynamicLinkData? initialLink = await FirebaseDynamicLinks.instance.getInitialLink();
handleLinkData(initialLink);

//포그라운드,백그라운드용
FirebaseDynamicLinks.instance.onLink.listen((dynamicLinkData) {
  handleLinkData(dynamicLinkData);
}).onError((error) {
  print("@@dynamic link listen error=${error}");
});
void handleLinkData(PendingDynamicLinkData? data) {
  final Uri? uri = data?.link;
  if (uri != null) {
    final queryParams = uri.queryParameters;
    if (queryParams.isNotEmpty) {
      String? name = queryParams["name"];
      String? age = queryParams["age"];
      if (name != null) {
        //name with 이동처리 
      }
      if (age != null) {
        //age with 이동처리
      }
      // verify the username is parsed correctly
      print("@@My name is: $name / age is $age");
    }
  }
}

 

만약 셋팅이 잘못되었다면

 

앱이 깔려있어도 앱에 접속이안되고 다운받는 스토어로 갈것이다.

 

 

참고:

https://firebase.google.com/docs/dynamic-links/flutter/create?hl=ko

https://firebase.google.com/docs/dynamic-links/flutter/receive?hl=ko

반응형

'flutter > study' 카테고리의 다른 글

flutter fcm push  (0) 2023.03.30
google map 연동  (0) 2022.09.25
money comma  (0) 2021.11.05
flutter 현지화  (0) 2021.07.28
TextField 사용시 바깥부분 터치시 focus 잃게하는방법  (0) 2021.07.28

ios

xcode - Runner-AppDelegate.swift에 들어간다 

 

import UIKit
import Flutter
import GoogleMaps

@UIApplicationMain
@objc class AppDelegate: FlutterAppDelegate {
  override func application(
    _ application: UIApplication,
    didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
  ) -> Bool {
    self.window.makeSecure()
    GeneratedPluginRegistrant.register(with: self)
    return super.application(application, didFinishLaunchingWithOptions: launchOptions)
  }
    override func applicationWillResignActive(
      _ application: UIApplication
    ) {
      self.window.isHidden = true;
    }
    override func applicationDidBecomeActive(
      _ application: UIApplication
    ) {
      self.window.isHidden = false;
    }

}
  extension UIWindow {
    func makeSecure() {
     let field = UITextField()
     field.isSecureTextEntry = true
     self.addSubview(field)
     field.centerYAnchor.constraint(equalTo: self.centerYAnchor).isActive = true
     field.centerXAnchor.constraint(equalTo: self.centerXAnchor).isActive = true
     self.layer.superlayer?.addSublayer(field.layer)
     field.layer.sublayers?.first?.addSublayer(self.layer)
   }
 }

 

빨간 부분을 추가하면 캡쳐서 검은화면으로 나온다.

 

 

android

https://pub.dev/packages/flutter_windowmanager/example

라이브러리 설치 후 main에 넣는다

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await FlutterWindowManager.addFlags(FlutterWindowManager.FLAG_SECURE);
  runApp(MyApp());
}

 

캡처시 문구가뜬다.

 

 

참고:
https://stackoverflow.com/questions/52317217/flutter-disable-screenshot-capture-for-app

https://stackoverflow.com/questions/72380810/how-to-prevent-taking-screen-shoot-in-flutter-ios

반응형

+ Recent posts