hoony's web study

728x90
반응형

flutter logo

1. url_launcher package 사용 이유

앱내에서 사용자를 외부의 URL 또는 이메일, 전화걸기를 사용할때 사용할 수 있는 패키지입니다. 

Likes 수를 보셔도 이 패키지는 필수사용하는 것이라고 생각이 듭니다. 

2. 사용방법 

 


flutter 유튜브를 보시면 사용 방법도 간단하게 나와있답니다.

3. 소스(함수)

/*
 * 공통 utility 함수
 */
import 'dart:io';
import 'package:get/get.dart';
import 'package:flutter/services.dart';
import 'package:url_launcher/link.dart';
import 'package:url_launcher/url_launcher.dart';

class CommonUtils extends GetxController{

  //email 보내는 함수
   void launchEmail(String email) async {
    if(await canLaunch("mailto:$email")){
      await launch("mailto:$email");
    } else {
      throw 'could not email';
    }
  }

  //clipboard에 복사하는 함수
  void copyClipboard(String txt){
    Clipboard.setData(ClipboardData(text: txt));
    Get.snackbar('Message', '주소가 클립보드에 복사되었습니다.');
  }

  //전화거는 함수
  void makePhoneCall(String url) async {
     var telUrl = 'tel:' + url;
     if (GetPlatform.isIOS) {
       telUrl =
           telUrl.replaceAll((new RegExp(r'-')), '');
     }
    if (await canLaunch(url)) {
      await launch(url);
    } else {
      printError(info: '연결이 되지 않습니다.');
    }
  }

   //개발자 어플 링크에 접근하기 위해서 만든 함수임.
   void launchUrl(String url) async {
     if(await canLaunch(url)){
       await launch(url);
     } else {
       throw 'could not launch $url';
     }
   } 

}

저는 위와 같이 GetxController 형식으로 함수를 지정해서 사용을 하고 있습니다.

4. 오류발생 

[VERBOSE-2:dart_vm_initializer.cc(41)] Unhandled Exception: could not email

위와 같이 오류가 갑자기 발생이 나더라구요. 
Android 의 경우 앱이 Android 11이상을 타겟탕하며 자동으로 표시되는 앱이 아닌 다른 앱과 상호 작용해야 한다면 AndroidManifest.xml에 <queries>요소를 추가해야한다고 합니다.

https://developer.android.com/training/package-visibility/declaring?hl=ko

 

패키지 공개 상태 요구사항 선언  |  Android 개발자  |  Android Developers

패키지 공개 상태 요구사항 선언 앱을 만들 때는 기기에 설치된 다른 앱 중 내 앱에서 액세스하려는 일련의 앱을 고려하는 것이 중요합니다. 앱이 Android 11(API 수준 30) 이상을 타겟팅한다면 시

developer.android.com

 

<key>LSApplicationQueriesSchemes</key>
<array>
<string>sms</string>
<string>tel</string>
<string>mailto</string>
</array>

IOS는 위와 같이 info.plist 에 추가를 해주셔야합니다.

5. 결론

핸드폰의 OS가 업데이트가 되면 무엇이 바뀌었는지 살펴볼 필요가 있다. 
기존 소스는 잘 돌아가더라도 신규 소스를 적용할때는 적용이 안 될 수 있으니 꼭 패키지를 다시 한번 확인하고 패키징을 해야겠다. 

 

728x90

공유하기

facebook twitter kakaoTalk kakaostory naver band
loading