728x90
반응형

App 에서 위치 정보를 사용하는 경우 사용자가 위치 허용을 하지 않았을때


Android 는 앱을 재시작하면 권한을 묻는 화면이 떠 권한을 허용할수 있습니다.

 

하지만 iOS 는 앱을 재시작하더라도 권한을 묻는화면이 뜨지않고

셋팅창에서 직접 위치 허용을 해줘야합니다.

 

이때 코드단에서 셋팅창으로 이동하고 싶을때 예시입니다.

 

DependencyService 를 이용하여

 

아래 처럼 코딩하면 앱 셋팅창으로 이동할 수 있습니다.

 

 

 

            if (!CLLocationManager.LocationServicesEnabled)

            {

                if (UIDevice.CurrentDevice.CheckSystemVersion(10, 0))

                {

                    UIApplication.SharedApplication.OpenUrl(new NSUrl("App-Prefs:root=General"));

                }

                else

                {

                    UIApplication.SharedApplication.OpenUrl(new NSUrl("prefs:root=General"));

                }

            }

            else if (CLLocationManager.Status == CLAuthorizationStatus.Denied ||

                     CLLocationManager.Status == CLAuthorizationStatus.NotDetermined ||

                     CLLocationManager.Status == CLAuthorizationStatus.Restricted)

            {

                UIApplication.SharedApplication.OpenUrl(new NSUrl(UIApplication.OpenSettingsUrlString));

            }

 

 

 

 

 

728x90
반응형
728x90
반응형

전면/배너 광고를 넣는 예제 소스입니다.

 

Android 는 AndroidManifest.xml 과 AdBannerRenderer 에

iOS 는 Info.plist, AdBannerRenderer 에

광고 관련 ID 를 수정해야합니다.

 

https://github.com/kei-soft/AdMobSample

 

728x90
반응형
728x90
반응형

using System;

using System.Threading;

using System.Threading.Tasks;

 

using Android.Content;

using Android.Webkit;

 

using AUOSMS.APP.Controls;

using AUOSMS.APP.Droid.Renderers;

 

using Xamarin.Forms;

using Xamarin.Forms.Platform.Android;

 

[assembly: ExportRenderer(typeof(WebViewer), typeof(WebViewRender))]

namespace AUOSMS.APP.Droid.Renderers

{

    public class WebViewRender : WebViewRenderer

    {

        public WebViewRender(Context context) : base(context)

        { }

 

        protected override void OnElementChanged(ElementChangedEventArgs<Xamarin.Forms.WebView> e)

        {

            base.OnElementChanged(e);

 

            if (Control == null) return;

 

            // Cache Clear

            Control.ClearCache(true);

            Control.Settings.SetAppCacheEnabled(false);

            Control.Settings.CacheMode = Android.Webkit.CacheModes.NoCache;

 

            // JavaScript 허용

            Control.Settings.JavaScriptEnabled = true;

 

            // Cookie 허용

            CookieManager cookieManager = CookieManager.Instance;

            cookieManager.SetAcceptCookie(true);

            cookieManager.SetAcceptThirdPartyCookies(Control, true);

        }

    }

}

 

* 참고링크

https://stackoverflow.com/questions/42853636/put-cookie-on-a-webview-in-xamarin/42854428

 

* 참고지식 - Android 기준

mixedContentMode

혼합 컨텐츠 모드를 지정합니다. 즉, WebView를 사용하면 안전한 출처가 다른 출처의 콘텐츠를로드 할 수 있습니다.

never (기본값) : WebView는 보안 오리진이 안전하지 않은 오리진에서 컨텐츠를로드하도록 허용하지 않습니다.

always : WebView를 사용하면 보안 출처가 다른 출처에서 콘텐츠를로드 할 수 있습니다 (해당 출처가 안전하지 않은 경우에도).

compatibility : WebView는 혼합 컨텐츠와 관련하여 최신 웹 브라우저의 접근 방식과 호환되도록 시도합니다.

 

 

thirdPartyCookiesEnabled

WebView 에서 타사 쿠키를 활성화하는 부울 값입니다. Android Kitkat 이상 및 iOS에서 타사 쿠키가 기본적으로 활성화 된 경우에만 Android Lollipop 이상에서 사용됩니다.

기본값은 true 입니다.

 

 

 

728x90
반응형
728x90
반응형

Image 를 원형으로 잘라 보이게 하고 싶을때는

Frame 로 감싸서 만들면 된다.


아래는 xaml 단 코드 예시이다.

<Frame 

    Margin="0" 

    Padding="0" 

    CornerRadius="30" 

    WidthRequest="60" 

    HeightRequest="60" 

    BackgroundColor="Transparent" 

    HasShadow="False" 

    IsClippedToBounds="True">

    <Image x:Name="simpleOrder2Image" Source="coffee.png"/>

</Frame>


여기서 유의할건 Frame 에 IsClippedToBounds="True" 를 반드시 설정해야한다는것이고

Xamarin.Forms 4.8.0 이어야 iOS 에서도 정상적으로 잘려서 보이게된다.

4.7.0 이하 버전에서는 iOS 에서 이미지가 잘려서 원형으로 나타나지 않는다. 


이는 버그로 수정되어 업데이트 된지 얼마되지 않었다.

https://github.com/xamarin/Xamarin.Forms/pull/11129



728x90
반응형
728x90
반응형

자마린에서 기본 폰트가 아닌 다른 폰트를 사용하는 방법입니다.

 

우선 폰트를 다운 받습니다.

전 타이포_어울림체를 다운받았습니다.(무료)

 

폰트파일을 아래처럼 위치시킵니다.

(폴더구성은 다르게 해도 상관없습니다.)

 

 

각 폰트 속성에서 "포함리소스"(Embedded Resource) 를 선택합니다.

 

 

이제 준비는 끝났습니다.

App.xaml.cs 로 들어가 아래 처럼 namespace 위쪽에 assembly 를 정의합니다.

(참고로  Xamarin.forms  구버전이면 동작하지 않습니다.)

 

[assembly: ExportFont("Typo_EoulrimL.ttf", Alias = "RegularFont")]

[assembly: ExportFont("Typo_EoulrimM.ttf", Alias = "MediumFont")]

[assembly: ExportFont("Typo_EoulrimB.ttf", Alias = "BoldFont")]

 

 

 

 

이제 xaml 단에서 아래처럼 위에서 정의한 Alias 로 FontFamily 에 지정해서 쓰면됩니다.

(여러가지 방법이 있지만 이 방법이 저한테는 가장 간단한거 같습니다.)

 

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"

             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"

             xmlns:local="clr-namespace:FontXam"

             x:Class="FontXam.MainPage">

 

    <StackLayout>

        <Label Text="안녕하세요(기본)" FontSize="20"

           HorizontalOptions="Center"

           VerticalOptions="CenterAndExpand" />

        <Label Text="안녕하세요(BoldFont)"

           HorizontalOptions="Center" FontSize="20"

               FontFamily="BoldFont"

           VerticalOptions="CenterAndExpand" />

        <Label Text="안녕하세요(MediumFont)"

           HorizontalOptions="Center" FontSize="20"

               FontFamily="MediumFont"

           VerticalOptions="CenterAndExpand" />

        <Label Text="안녕하세요(RegularFont)"

           HorizontalOptions="Center" FontSize="20"

               FontFamily="RegularFont"

           VerticalOptions="CenterAndExpand" />

    </StackLayout>

 

</ContentPage>

 

 

(결과)

iOS

 

 

Android

 

소스

https://github.com/kei-soft/FontXam

 

 

 

728x90
반응형
728x90
반응형

Visual Studio 2017 에서 소스를 열었는데 아래처럼 오류가 났다.


심각도 코드 설명 프로젝트 파일 비표시 오류(Suppression) 상태

오류 필요한 Android 구성 요소가 일부 없습니다. 여기를 두 번 클릭하고 지시에 따라 설치하세요. 0

오류 WeatherApp.Android 프로젝트에 빌드에 필요한 Android SDK가 없습니다. 이 메시지를 두 번 클릭하고 지시에 따라 설치하세요. 0


더블 클릭하니 아래와 같은 창이 떴고 Accept 를 했으나 설치가 진행되지 않고 팝업만 닫히고 위 오류가 계속 떠있는 상황이..;;


아래 메뉴를 통해 SDK MAnager 로 들어가 봤다.


흠.. 먼가 잘못되있다...


옵션에서 봤을땐 제대로 되있는데 말이다.;;


아무튼 직접 지정을 해보았다.


그래도 제대로 안된다...


결론은 Visual Studio 2019 를 설치하고 2019 에서 실행하니 잘되었다^^;;


참고

https://docs.microsoft.com/ko-kr/xamarin/android/get-started/installation/android-sdk?tabs=windows


728x90
반응형
728x90
반응형

iOS 에서 SafeArea 를 지정 하면

상단과 하단에 영역이 생기면서 그쪽에는 앱구동 화면이 표시되지 않는다

하지만 하단의 영역은 살려두고 싶을때가 있다. 

이때는 OnAppearing() 에 아래처럼 코딩하면 하단의 영역을 살려 

앱구동화면이 하단에도 문제 없이 표시된다.


protected override void OnAppearing()

{

    base.OnAppearing();

    var safeInsets = On<iOS>().SafeAreaInsets();

    safeInsets.Bottom = 0;

    Padding = safeInsets;

}



728x90
반응형
728x90
반응형


Rg.Plugins.Popup 을 이용해서 팝업을 호출한 경우 Back  버튼이나 팝업을 벗어난 화면을 터치한 경우

팝업이 닫히게 되는데 이를 막기 위해서 코드단에 아래와 같은 코드를 넣으면 된다.


CloseWhenBackgroundIsClicked = false;

728x90
반응형
728x90
반응형

Shell.Current.GoToAsync("..");

페이지를 지정하지 않고 바로 이전 페이지로 가고 싶을때 사용합니다.


728x90
반응형
728x90
반응형

Android 쪽 타겟팅 Android 버전을 Android 9.0 에서 Android 10.0 으로 올렸더니 

아래와 같은 에러가 발생되었다.


Could not find 2 Android X assemblies, make sure to install the following NuGet packages:

 - Xamarin.AndroidX.MediaRouter

You can also copy-and-paste the following snippet into your .csproj file:

    <PackageReference Include="Xamarin.AndroidX.MediaRouter" Version="1.1.0.1" /> UnitConversion.Android


위에러는 Nuget 의 AndroidX 의 패키지가 더이상 지원을 안해서 발생하는 문제로

NugetPackage 에서 Xamarin.Android.Support.v7.MediaRouter 를 제거하면 해결된다.



728x90
반응형

+ Recent posts