728x90
반응형

하나의 Grid 안에서 두개의 사각형이 있는 경우 이를 서로 영향받을수 있도록 처리하기 위해서 DataDataTrigger 를 이용하면된다.

아래 예시는 하나의 사각형에 마우스가 간 경우 다른 하나의 사각형 컨트롤이 숨겨져있다가 보여지는 처리를 한것이다

<Window x:Class="WpfAppControlTest.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfAppControlTest"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Grid HorizontalAlignment="Center">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="100"/>
            <ColumnDefinition Width="100"/>
        </Grid.ColumnDefinitions>

        <Rectangle x:Name="B" Grid.Column="0" Fill="Green" Width="100" Height="100"/>

        <Rectangle x:Name="C" Grid.Column="1" Fill="Yellow" Width="100" Height="100">
            <Rectangle.Style>
                <Style TargetType="Rectangle">
                    <Setter Property="Visibility" Value="Collapsed"/>
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding ElementName=B,Path=IsMouseOver}" Value="True">
                            <Setter Property="Visibility" Value="Visible" />
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </Rectangle.Style>
        </Rectangle>
    </Grid>
</Window>

Grid 의 Trigger 을 통해 처리하는 것을 불가능하며 위 처럼 영향 받고자 하는 컨트롤에 처리를 해주어야한다.

참고 : stackoverflow.com/questions/4208731/create-a-simple-wpf-trigger-on-one-object-that-affects-another

 

728x90
반응형
728x90
반응형
<Window x:Class="WpfAppControlTest.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfAppControlTest"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Window.Resources>
        <Style x:Key="Flat">
            <Setter Property="Control.Background" Value="{x:Null}" />
            <!--<Setter Property="Control.BorderBrush" Value="{x:Null}" />-->
            <Style.Triggers>
                <Trigger Property="Control.IsMouseOver" Value="True">
                    <Setter Property="Control.Background" Value="{x:Null}" />
                    <!--<Setter Property="Control.BorderBrush" Value="{x:Null}" />-->
                    <Setter Property="Control.FontWeight" Value="Bold" />
                </Trigger>
                <Trigger Property="Control.IsFocused" Value="True">
                    <Setter Property="Control.FontWeight" Value="Bold" />
                </Trigger>
            </Style.Triggers>
        </Style>
    </Window.Resources>
    <StackPanel>
        <Button Style="{StaticResource Flat}" Width="100">Hello</Button>
    </StackPanel>
</Window>

테두리도 보기 싫다면 주석 되있는 내용을 주석처리를 풀면된다.

 

728x90
반응형
728x90
반응형

728x90
반응형
728x90
반응형

728x90
반응형
728x90
반응형

ListView 를 쓸때 iOS 는 마지막에 약 2줄 정도가 비어서 보이게 된다.

이때 ListView 속성의 Footer 를 공백으로 주면 해결된다.

<ListView SeparatorColor="Gray" SeparatorVisibility="Default" BackgroundColor="Transparent" Footer="">

728x90
반응형
728x90
반응형

iOS

 

github.com/xamarin/GoogleApisForiOSComponents/blob/master/docs/Firebase/CloudMessaging/GettingStarted.md

 

xamarin/GoogleApisForiOSComponents

Contribute to xamarin/GoogleApisForiOSComponents development by creating an account on GitHub.

github.com

xamarinlatino.com/xamarin-forms-firebase-cloud-messaging-ios-setup-1961a91d4055

 

Xamarin Forms & Firebase Cloud Messaging: iOS Setup

En mis últimas publicaciones, he hablado de cómo integrar OneSignal (una plataforma que facilita el envío de Push Notifications a…

xamarinlatino.com

docs.microsoft.com/ko-kr/xamarin/ios/platform/user-notifications/deprecated/remote-notifications-in-ios

 

IOS의 푸시 알림 - Xamarin

이 문서에서는 iOS 9 및 이전 버전에서 푸시 알림을 사용 하는 방법을 설명 합니다. 인증서에 대해 설명 하 고 APNS (Apple Push Notification Gateway Service) 등에 등록 합니다.

docs.microsoft.com

Android

github.com/iBobb/xamarin_firebaseapi

 

iBobb/xamarin_firebaseapi

An example project for using the newest APIs to send push notifications using the Firebase - iBobb/xamarin_firebaseapi

github.com

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using Android.App;
using Android.Content;
using Android.Graphics;
using Android.Media;
using Android.OS;
using Android.Runtime;
using Android.Support.V4.App;
using Android.Util;
using Android.Views;
using Android.Widget;
using Firebase.Messaging;

namespace XamarinFirebaseExample.Droid
{
    [Service]
    [IntentFilter(new[] { "com.google.firebase.MESSAGING_EVENT" })]
    public class MyFirebaseMessagingService : FirebaseMessagingService
    {
        private const string defaultNotificationTitle = "App name";
        private const string newsChannelId = "1"; // not sure I just use 1 you should be able to use anything as long as its unique per channel
        private const string newsChannelDescription = "Channel name shown to user e.g. News";
        private long[] vibrationPattern = { 500, 500, 500, 500, 500, 500, 500, 500, 500 };
        private NotificationManager notificationManager;

        public override void OnNewToken(string newToken)
        {
            base.OnNewToken(newToken);
            Log.Info("MyFirebaseMessagingService", "Firebase Token: " + newToken);
            saveRegistrationToApp(newToken);
        }

        public override void OnMessageReceived(RemoteMessage remoteMessage)
        {
            base.OnMessageReceived(remoteMessage);
            // depending on how you send the notifications you might get the message as per documentation
            // using remoteMessage.getNotification().getBody()
            var message = remoteMessage.Data["message"];
            Log.Debug("MyFirebaseMessagingService", "From:    " + remoteMessage.From);
            Log.Debug("MyFirebaseMessagingService", "Message: " + message);

            sendNotification(defaultNotificationTitle, message);
        }

        private void sendNotification(string title, string message)
        {
            var intent = new Intent(this, typeof(MainActivity));
            intent.AddFlags(ActivityFlags.SingleTop);
            var pendingIntent = PendingIntent.GetActivity(this, 0, intent, PendingIntentFlags.OneShot);
            notificationManager = (NotificationManager)GetSystemService(Context.NotificationService);

            if (Android.OS.Build.VERSION.SdkInt >= Android.OS.BuildVersionCodes.O)
            {
                NotificationImportance importance = NotificationImportance.High;
                NotificationChannel notificationChannel = new NotificationChannel(newsChannelId, newsChannelDescription, importance);
                notificationChannel.EnableLights(true);
                notificationChannel.LightColor = Color.Red;
                notificationChannel.EnableVibration(true);
                notificationChannel.SetSound(RingtoneManager.GetDefaultUri(RingtoneType.Notification), new AudioAttributes.Builder()
            .SetContentType(AudioContentType.Sonification)
            .SetUsage(AudioUsageKind.Notification)
            .Build());
                notificationManager.CreateNotificationChannel(notificationChannel);
            }

            Notification notification = new NotificationCompat.Builder(this, newsChannelId)
                .SetLargeIcon(BitmapFactory.DecodeResource(Resources, Resource.Mipmap.icon)) //newest projects use mipmaps and drawables, you can go to drawables too
                .SetSmallIcon(Resource.Mipmap.icon)
                .SetContentTitle(title)
                .SetContentText(message)
                .SetAutoCancel(true)
                .SetVisibility((int)NotificationVisibility.Private)
                .SetContentIntent(pendingIntent)
                .SetVibrate(vibrationPattern)
                .SetSound(RingtoneManager.GetDefaultUri(RingtoneType.Notification))
                .Build();

            notificationManager.Notify(0, notification); // overrides old notification if it's still visible because it uses same Id
        }

        private void saveRegistrationToApp(string token)
        {
           // send to server or store locally
        }
    }
}
728x90
반응형
728x90
반응형

docs.microsoft.com/ko-kr/xamarin/ios/get-started/installation/device-provisioning/automatic-provisioning?tabs=windows

 

Xamarin.iOS에 대한 자동 프로비저닝 - Xamarin

Xamarin.iOS가 성공적으로 설치된 후 iOS 개발의 다음 단계는 iOS 디바이스를 프로비전하는 것입니다. 이 가이드에서는 자동 서명을 사용하여 개발 인증서와 프로필을 요청하는 방법을 설명합니다.

docs.microsoft.com

Xamarin.iOS에 대한 자동 프로비저닝

  • 2020. 03. 05.
  • 읽는 데 5분 걸림

Xamarin.iOS가 성공적으로 설치된 후 iOS 개발의 다음 단계는 iOS 디바이스를 프로비전하는 것입니다. 이 가이드에서는 자동 프로비저닝을 사용하여 개발 인증서와 프로필을 요청하는 방법을 설명합니다.

요구 사항

자동 프로비저닝은 Mac용 Visual Studio, Visual Studio 2019 및 Visual Studio 2017(버전 15.7 이상)에서 사용할 수 있습니다.

 참고

이 기능을 사용하려면 유료 Apple 개발자 계정도 필요합니다. Apple 개발자 계정에 대한 자세한 내용은 디바이스 프로비저닝 가이드를 참조하세요. 유료 Apple 개발자 계정이 없는 경우 Xamarin.iOS에 대한 체험 프로비저닝 가이드를 참조하세요.

 참고

시작하기에 앞서, Apple 개발자 포털 또는 App Store Connect에서 모든 라이선스 계약에 동의하시기 바랍니다.

자동 프로비저닝 사용

자동 서명 프로세스를 시작하기 전에 Apple 계정 관리 가이드에 설명된 대로 Visual Studio에 Apple ID를 추가했는지 확인해야 합니다.

Apple ID를 추가했다면 모든 관련 _팀_을 사용할 수 있습니다. 따라서 팀에 대해 인증서, 프로필 및 다른 ID를 만들 수 있습니다. 팀 ID는 프로비저닝 프로필에 포함될 앱 ID의 접두사를 만들 때도 사용됩니다. 이 요소가 있으면 Apple이 신원을 확인할 수 있습니다.

IOS 디바이스에 배포할 앱에 자동으로 서명하려면 다음을 수행합니다.

 참고

Visual Studio 2017 또는 Visual Studio 2019(버전 16.4 이상)를 사용하는 경우 계속하기 전에 Mac 빌드 호스트에 페어링되어 있어야 합니다.

  1. 솔루션 탐색기에서 iOS 프로젝트 이름을 마우스 오른쪽 단추로 클릭하고 속성을 선택합니다. 그런 다음 iOS 번들 서명 탭으로 이동합니다.

  2. 자동 프로비저닝 구성표를 선택합니다.

  3.  드롭다운 메뉴에서 팀을 선택하여 자동 서명 프로세스를 시작합니다. Visual Studio에 프로세스가 성공적으로 완료되었는지 표시됩니다.

자동 프로비저닝 실행

자동 프로비저닝이 사용하도록 설정되면 다음과 같은 상황이 발생할 경우 필요에 따라 Visual Studio가 이 프로세스를 다시 실행합니다.

  • iOS 디바이스가 mac에 플러그 인됩니다.
    • 디바이스가 Apple Developer Portal에 등록되었는지 자동으로 검사합니다. 등록되지 않은 경우 디바이스를 추가하고 이를 포함하는 새 프로비저닝 프로필을 생성합니다.
  • 앱의 번들 ID가 변경된 경우
    • 앱 ID를 업데이트합니다. 이 앱 ID를 포함하는 새 프로비저닝 프로필이 생성됩니다.
  • 지원되는 기능은 Entitlements.plist 파일에 활성화됩니다.
    • 이 기능은 앱 ID에 추가되고, 업데이트된 앱 ID가 포함된 새 프로비저닝 프로필이 생성됩니다.
    • 일부 기능은 현재 지원되지 않습니다. 지원되는 기능에 대한 자세한 내용은 기능 사용 가이드를 참조하세요.

와일드카드 앱 ID

Mac용 Visual Studio 및 Visual Studio 2019(버전 16.5 이상)에서, 자동 프로비저닝은 기본적으로 명시적 앱 ID 대신 Info.plist에 지정된 번들 식별자를 기반으로 와일드카드 앱 ID 및 프로비저닝 프로필을 만들고 사용하려고 시도합니다. 와일드카드 앱 ID는 프로필 및 Apple Developer Portal에서 유지 관리하는 ID 수를 줄입니다.

경우에 따라 앱의 자격에는 명시적인 앱 ID가 필요합니다. 다음 자격은 와일드카드 앱 ID를 지원하지 않습니다.

  • 앱 그룹
  • 연결된 도메인
  • Apple Pay
  • Game Center
  • HealthKit
  • HomeKit
  • 핫스폿
  • 앱에서 바로 구매
  • 다중 경로
  • NFC
  • Personal VPN(개인 VPN)
  • 푸시 알림
  • 무선 액세서리 구성

앱에서 해당 자격 중 하나를 사용하는 경우 Visual Studio는 와일드카드 앱 ID 대신 명시적인 앱 ID를 만들려고 시도합니다.

문제 해결

  • 새 Apple 개발자 계정이 승인되기까지 몇 시간 정도 걸릴 수 있습니다. 계정이 승인되기 전까지는 자동 프로비저닝을 사용할 수 없습니다.
  • 자동 프로비저닝 프로세스가 Authentication Service Is Unavailable 오류 메시지와 함께 실패할 경우, App Store Connect 또는 appleid.apple.com에 로그인하여 최신 서비스 계약에 동의했는지 확인하세요.
  • Authentication Error: Xcode 7.3 or later is required to continue developing with your Apple ID. 오류 메시지가 표시된다면 선택한 팀에 Apple Developer Program에 대한 유효한 유료 멤버 자격이 있는지 확인하세요. 유료 Apple 개발자 계정을 사용하려면 Xamarin.iOS 앱에 대한 체험 프로비저닝 가이드를 참조하세요.
728x90
반응형
728x90
반응형

Firebase 를 사용하기 위해 FirebasePushNotificationPlugin Nuget을 설치했는데 아래 와 같은 에러가 발생되었습니다.

 

Java.Lang.IllegalStateException: 'Default FirebaseApp is not initialized  

in this process com.companyname.firebasetest.  

Make sure to call FirebaseApp.initializeApp(Context) first.'

 

해결은.. 솔루션 정리하고 다시 빌드 하면 된다.;;

 

(내가 겪은 자마린의 에러는 거의 반정도가 정리하고 다시 빌드하면 해결이되는데 왜그런걸까;;;)

 

참고

docs.microsoft.com/en-us/xamarin/android/data-cloud/google-messaging/remote-notifications-with-fcm?tabs=macos#firebaseapp-is-not-initialized

github.com/CrossGeeks/FirebasePushNotificationPlugin/issues/338

728x90
반응형
728x90
반응형

Android 에서 Xamarin.Firebase.Messaging Nuget 패키지를 설치하고 빌드하면

아래 처럼 추가 설치할 Nuget 패키지가 있다면서 에러가 발생된다.

(좀 같이 설치되면 좋은텐데 쩝;;)

 

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

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

 - Xamarin.AndroidX.Lifecycle.LiveData

 - Xamarin.AndroidX.Browser

 - Xamarin.Google.Android.Material

 - Xamarin.AndroidX.Legacy.Support.V4

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

    <PackageReference Include="Xamarin.AndroidX.Lifecycle.LiveData" Version="2.1.0.1" />

    <PackageReference Include="Xamarin.AndroidX.Browser" Version="1.0.0.1" />

    <PackageReference Include="Xamarin.Google.Android.Material" Version="1.0.0.1" />

    <PackageReference Include="Xamarin.AndroidX.Legacy.Support.V4" Version="1.0.0.1" /> PushApp.Android

 

이를 다 설치하고 기기 디버깅을 하니 아래처럼 또 에러가 발생되었다

 

Java.Lang.NoSuchMethodError: 'No static method checkBuilderRequirement(Ljava/lang/Object;Ljava/lang/Class;)V in class Ldagger/internal/Preconditions; or its super classes (declaration of 'dagger.internal.Preconditions' appears in /data/app/kr.kjun.pushapp-0PZ39LHoTTqI5_AobAXDhQ==/base.apk)'

 

dagger??? ㅜㅠ

 

해결방법은 'Xamarin.Google.Dagger'  Nuget 패키지를 설치해주면 해결된다.

 

설치후 실행 하니 정상적으로 실행 완료!

 

참고

https://stackoverflow.com/questions/64428377/java-lang-nosuchmethoderror-no-static-method-checkbuilderrequirement

 

 

 

 

 

728x90
반응형
728x90
반응형

Firebase 를 사용하는데 

Messaging.SharedInstance.RemoteMessageDelegate = this;

이부분이 처리가 안되서 Push 메세지가 수신이 안되었다

확인해 보니 아래 처럼 변경해서 처리하면 된다.

(별것도 아닌데 찾아본시간이 ㅠㅠ)

Messaging.SharedInstance.Delegate = this;

 

참고

stackoverflow.com/questions/54470715/property-remotemessagedelegate-not-found-on-object-of-type-firmessaging

 

Property 'remoteMessageDelegate' not found on object of type 'FIRMessaging *'

I'm working with some Swift and FCM code and after updating pods I'm getting two errors. I have done research but can't figure out what to do to fix it. Here is the code: // For iOS 10 display

stackoverflow.com

 

728x90
반응형

+ Recent posts