InAppWebView 6.0 버전 기준으로 작성했습니다.

 

web에서 mailto: 로 만들어둔 링크를 터치하면 아무 반응이 없다면 

inAppWebView 에서 따로 처리해주어야합니다.

 

1. 안드로이드 설정

AndroidManifest.xml  에 다음과 같이 코드를 추가합니다.

이때, 꼭!!!!! application 밖에, uses-permission 과 같은 뎁스에서 작성해주셔야합니다.

저는 manifest 하단부분에 작성했습니다.

    <queries>
        <intent>
            <action android:name="android.intent.action.SENDTO" />
            <data android:scheme="mailto" />
        </intent>
    </queries>

 

 

2. iOS 설정

info.plist 에 다음 코드를 추가합니다.

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

 

3.

inAppWebView 위젯 Widget build(BuildContext context) 

내부에서 다음과 같이 코드를 작성해주면 됩니다.

                  shouldOverrideUrlLoading: (controller, navigationAction) async {
                    var uri = navigationAction.request.url!;
                    if (uri.scheme == 'mailto') {
                      // Properly encode the mailto URL
                      final encodedSubject = Uri.encodeComponent(uri.queryParameters['subject'] ?? '');
                      final encodedBody = Uri.encodeComponent(uri.queryParameters['body'] ?? '');
                      final mailtoUri = Uri.parse('mailto:${uri.path}?subject=$encodedSubject&body=$encodedBody');

                      try {
                        if (await canLaunchUrl(mailtoUri)) {
                          await launchUrl(mailtoUri);
                        } else {
                          print("Could not launch $mailtoUri");
                        }
                      } catch (e) {
                        print("Error launching mail app: $e");
                      }
                      return NavigationActionPolicy.CANCEL;
                    }
                    return NavigationActionPolicy.ALLOW;
                  },

 

 

이렇게 설정해두면 링크 클릭시 메일 앱으로 연동됩니다.

+ Recent posts