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

 

다이나믹링크 패키지 설치 

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

반응형

 

flutter 만깔고 터미널에 adb명령어를 치면 adb command not found 이라고 뜬다면

 

finder- 자기계정폴더 - command+ shift + . 을 눌러서 숨겨진 폴더보기 활성화 후 

zprofile을 찾아서 연 후 

export PATH=~/Library/Android/sdk/tools:$PATH
export PATH=~/Library/Android/sdk/platform-tools:$PATH

값을 넣고 저장 

source ~/.zprofile

입력하면 adb 명령어가 발동

 

 

참고:https://stackoverflow.com/questions/10303639/adb-command-not-found

반응형

+ Recent posts