블로그 이미지
Every unexpected event is a path to learning for you. blueasa

카테고리

분류 전체보기 (2797)
Unity3D (853)
Script (91)
Extensions (16)
Effect (3)
NGUI (81)
UGUI (9)
Physics (2)
Shader (37)
Math (1)
Design Pattern (2)
Xml (1)
Tips (201)
Link (23)
World (1)
AssetBundle (25)
Mecanim (2)
Plugins (79)
Trouble Shooting (70)
Encrypt (7)
LightMap (4)
Shadow (4)
Editor (12)
Crash Report (3)
Utility (9)
UnityVS (2)
Facebook SDK (2)
iTween (3)
Font (13)
Ad (14)
Photon (2)
IAP (1)
Google (8)
Android (51)
iOS (44)
Programming (479)
Server (33)
Unreal (4)
Gamebryo (56)
Tip & Tech (185)
협업 (61)
3DS Max (3)
Game (12)
Utility (68)
Etc (98)
Link (32)
Portfolio (19)
Subject (90)
iOS,OSX (55)
Android (14)
Linux (5)
잉여 프로젝트 (2)
게임이야기 (3)
Memories (20)
Interest (38)
Thinking (38)
한글 (30)
PaperCraft (5)
Animation (408)
Wallpaper (2)
재테크 (18)
Exercise (3)
나만의 맛집 (3)
냥이 (10)
육아 (16)
Total
Today
Yesterday

Android 13에서 Runtime에 android.permission.POST_NOTIFICATIONS Permission 요청하기.

----

 

1. Android Target API 33으로 셋팅

 

2. AndroidManifest.xml에 POST_NOTIFICATIONS Permission 추가

<manifest ...>
    <application ...>
        ...
    </application>
    <uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>
</manifest>

 

3. 권한 요청 원하는 시점에 아래 함수 호출(함수 호출하면 Android 13이상 폰에서는 알림 권한 허용 요청 팝업이 뜸)

void CheckPermission_PostNotifications_Android13()
{
    // 디바이스의 안드로이드 api level 얻기
    // ex) Prints "Android OS API-33" on Android 13.0
    // https://docs.unity3d.com/ScriptReference/SystemInfo-operatingSystem.html
    string androidInfo = SystemInfo.operatingSystem;
    Debug.Log("androidInfo: " + androidInfo);
    
    int apiLevel = int.Parse(androidInfo.Substring(androidInfo.IndexOf("-") + 1, 3), System.Globalization.CultureInfo.InvariantCulture);
    Debug.Log("apiLevel: " + apiLevel);

    // 디바이스의 api level이 33 이상이라면 퍼미션 요청
    if (33 <= apiLevel 
        && !UnityEngine.Android.Permission.HasUserAuthorizedPermission("android.permission.POST_NOTIFICATIONS"))
    {
        UnityEngine.Android.Permission.RequestUserPermission("android.permission.POST_NOTIFICATIONS");
    }
}

 

 

-----------------------------------------------------------------------------------------

[참고]

안드로이드 알림은 api level 26 과 33 에서 변경점이 있다. 내 앱이 대상으로 삼은 Sdk Version 범위에 이 버전이 포함되어 있다면 버전에 따라 분기 처리를 해주는 편이 좋다.
API level 26 (Android 8.0 Oreo) 이상 변경점
API level 33 (Android 13 Tiramisu) 이상 변경점

public void InitializeAndroidLocalPush()
{
	// 디바이스의 안드로이드 api level 얻기
	string androidInfo = SystemInfo.operatingSystem;
	Debug.Log("androidInfo: " + androidInfo);
	apiLevel = int.Parse(androidInfo.Substring(androidInfo.IndexOf("-") + 1, 2));
	Debug.Log("apiLevel: " + apiLevel);

	// 디바이스의 api level이 33 이상이라면 퍼미션 요청
	if (apiLevel >= 33 &&
		!Permission.HasUserAuthorizedPermission("android.permission.POST_NOTIFICATIONS"))
	{
		Permission.RequestUserPermission("android.permission.POST_NOTIFICATIONS");
	}

	// 디바이스의 api level이 26 이상이라면 알림 채널 설정
	if (apiLevel >= 26)
	{
		var channel = new AndroidNotificationChannel()
		{
			Id = CHANNEL_ID,
			Name = "pubSdk",
			Importance = Importance.High,
			Description = "for test",
		};
		AndroidNotificationCenter.RegisterNotificationChannel(channel);
	}
}

api level 얻기 코드 출처

 

 

[참고 내용 출처]

https://velog.io/@maratangsoft/%EC%9C%A0%EB%8B%88%ED%8B%B0-%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C-%EC%95%B1%EC%97%90%EC%84%9C-FCM-%EC%84%9C%EB%B2%84-%ED%91%B8%EC%8B%9C-%EB%B0%9B%EA%B8%B0

 

유니티 안드로이드 앱에서 FCM 서버 푸시 받기

유니티 모바일 앱 개발시 안드로이드 앱은 Firebase Cloud Messaging(이하 FCM) 서비스, iOS 앱은 Apple Push Notification 서비스를 이용해서 (FCM으로도 가능) 푸시를 수신할 수 있다. 그 중 FCM을 이용한 안드로

velog.io

 

[참고]

https://android-developer.tistory.com/entry/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C13%EC%97%90%EC%84%9C-Notification-%ED%97%88%EA%B0%80-%EB%B0%9B%EA%B8%B0-%EB%B0%A9%EB%B2%95-%EB%B0%8F-%EB%B3%80%EA%B2%BD%EC%A0%90

 

안드로이드13에서 Notification 허가 받기 방법 및 변경점

안드로이드13에서 Notification에 대해 바뀐점 POST_NOTIFICATIONS (Notification Permission) 은 Target SDK API 33 이상부터 추가 가능 Target SDK API 32 이하의 앱이 Android 13 디바이스에 설치되면 Notification Channel을 등록

android-developer.tistory.com

반응형
Posted by blueasa
, |

Unity 2021.3.19f1

Firebase 9.6.0

Facebook Android Plugin 15.0.2

 

[Case 1]

 

Firebase로 Facebook 연동을 했는데,

Facebook Web에서는 로그인이 잘되는데

위 스크린샷처럼 Facebook App이 설치돼 있는상태에서 App으로 로그인 하려하면 Invalid key hash 에러가 발생했다.

 

Facebook Web Login이랑 Facebook App Login이랑 Hash Key가 다른것 같다.

 

에러 메시지에 뜨는 key hash를 페이스북 개발자 페이지에 추가해주니 정상적으로 Facebook App 로그인이 됐다.

 

----

[Case 2]

- 스토어에서 받은 앱은 Facebook App 로그인 진행하려니 Key hash는 안보이고 위와 같이 에러 메시지만 띄운다.

- 혹시나해서 LogCat으로  보니 Key hash가 보여서 등록하고 정상 로그인 확인 함.

 

 

[참조]

https://bozeury.tistory.com/entry/%ED%8E%98%EC%9D%B4%EC%8A%A4%EB%B6%81-%EC%97%B0%EB%8F%99%EC%8B%9C-invaild-key-hash%EB%9D%BC%EB%8A%94-%EC%97%90%EB%9F%AC%EA%B0%80-%EB%82%98%EC%98%AC%EB%95%8C

 

페이스북 연동시 invaild key hash라는 에러가 나올때

페이스북을 연동하고나서 적용했을때 이런 에러가 날때가 있다. facebook 개발자 페이지에 등록되어있는 해쉬키와 현재 내 앱의 해쉬키가 다르기 때문에 나는 에러이다. 어째서 이런 에러가 나는

bozeury.tistory.com

 

반응형
Posted by blueasa
, |

Unity 2022.2.5f1

----

 

[빌드에러]

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':launcher:packageRelease'.
> A failure occurred while executing com.android.build.gradle.tasks.PackageAndroidArtifact$IncrementalSplitterRunnable
   > com.android.ide.common.signing.KeytoolException: Failed to read key anne from store 
      "C:\Test_Unity2022\Keystore\testapp.keystore": Cannot recover key

 

Unity 2022 포팅 테스트 해볼 겸 올려보다가 빌드 에러가 나서 보니 위와 같은 에러가 뜨고 있다.

 

[해결]

확인해보니 keystore 비밀번호를 잘못 입력한 것 같다.

비밀번호는 별표(*)로 나와서 안보이니 입력할 때 꼼꼼하게 잘 확인하자.

 

[참조] https://kwonyoonjae.tistory.com/112

 

유니티 a failure occurred while executing com.android.build.gradle.internal.tasks.workers$actionfacade 해결 방법

유튜브를 보면서 처음으로 유니티를 이용해 게임을 만들던 중 문제가 생겼습니다. 바로 "a failure occurred while executing com.android.build.gradle.internal.tasks.workers$actionfacade"에러가 나온 것인데요. 처음에

kwonyoonjae.tistory.com

[참조2] https://appletreeworkplace.tistory.com/6

 

[유니티] android gradle build failed 뜰 때 해결법

UnityPlayerActivity.java uses or overrides a deprecated API. 갑자기요..? 정상적인 유니티에서 안드로이드 플랫폼 성공 과정이라 하믄~ build gradle project에서 그 다음 Copying APK를 봐야 안심이 된다. 그러나 build gr

appletreeworkplace.tistory.com

 

반응형
Posted by blueasa
, |

[링크] http://yoonhada.com/?p=1398 

 

[Build]유니티 안드로이드 Gradle Version 관리 – yoonhada

Gradle 도구를 사용할 때 꼭 알아야 할 버전관리 이슈을 정리해보았다. 특히 유니티 엔진같은 경우 특수한 경우이기 때문에 더욱더 중요하다. (내용은 안드로이드 스튜디오에서도 동일하게 적용

yoonhada.com

 

[링크2] https://chc3484.tistory.com/74

 

[Android Build] 유니티 안드로이드 Gradle Version 관리

Gradle 도구를 사용할 때 꼭 알아야 할 버전관리 이슈을 정리해보았다. 특히 유니티 엔진같은 경우 특수한 경우이기 때문에 더욱더 중요하다. (내용은 안드로이드 스튜디오에서도 동일하게 적용

chc3484.tistory.com

 

반응형
Posted by blueasa
, |

Unity 2021.3.14f1

----

 

Android 12 미만(예: Android 9에서 확인됨)에서 갑자기 FullScreen(전체화면)이 안되는 이슈가 생겨서 처리하고 올려 둠.

 

예상으로는 Android 12(API 31) 대응이후 Android 12 미만 디바이스에서 생기는 것 같다.

확인된 걸로는 Android 9에서 아래와 같이 '이 앱은 전체 화면에서는 정상적으로 작동하지 않을 수 있습니다.' 라고 뜬다.

Android 9 설정 화면

 

위 설정이 꺼져있을 때 Android 12미만에서 대충 아래와 같은 느낌으로 뜬다.

FullScreen 꺼져있을 때 참조 이미지

[참조이미지 링크] https://answers.unity.com/questions/1577161/game-not-expanding-to-fill-full-screen-on-s8-andro.html

 

수동으로 '활성화'하면 정상적으로 전체화면으로 보이기는 한데, 처음부터 정상적으로 보여야 될 것 같아서 알아보고 수정해둠.

 

[결론]

수정방법은 의외로 심플하다.

아래 코드를 앱 최초 실행 시 어딘가에 추가해 두자.

Screen.fullScreen = true;

 

밥아저씨 : "참 쉽죠~?"

 

 

[참조] https://forum.unity.com/threads/disable-immersivemode-unity5.313911/#post-3090959

 

Disable ImmersiveMode (Unity5)

Is there a way to disable the immersive mode in Unity 5? It's a cool feature, but IMHO it's not right to presume that this settings is appropriated to...

forum.unity.com

 

[추가]

아래 링크를 보면 android:theme를 써서 전체화면을 만드는 것 같은데 나중에 이것도 테스트 해봐야 될 것 같다.

android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen"

 

[참조2] https://gamedev.stackexchange.com/questions/166667/why-do-i-have-to-set-my-unity-app-to-full-screen-manually-on-my-phone

 

Why do I have to set my Unity app to full-screen manually on my phone

When I open my unity app it doesn't go full-screen until I change it in the settings, isn't there a way to do that... it actually isn't a scaling problem or an aspect ratio.... Because you can see ...

gamedev.stackexchange.com

 

[참조3] https://202psj.tistory.com/1342

 

[Unity] 유니티 소프트키 관련

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 출처: https://m.blog.naver.com/PostView.nhn?blogId=uponsky&logNo=220334847464&proxyRefe

202psj.tistory.com

 

반응형
Posted by blueasa
, |

Unity 2021.3.14f1

Firebase 9.6.0

----

 

[Google Store Warning]

  • com.google.android.gms:play-services-safetynet:17.0.0
    이 SDK 버전에는 SDK 개발자의 메모가 포함되어 있습니다. SDK 개발자가 신고한 내용은 다음과 같습니다.
  • The SafetyNet Attestation API is being discontinued and replaced by the new Play Integrity API. Begin migration as soon as possible to avoid user disruption. The Play Integrity API includes all the integrity signals that SafetyNet Attestation offers and more, like Google Play licensing and better error messaging. Learn more and start migrating at https://developer.android.com/training/safetynet/deprecation-timeline

----

최근 앱을 구글 스토어에 올리면서 위와 같은 경고가 떴는데, 알아보니 FirebaseAuth가 play-services-safetynet을 참조하고 있는 것 같다.

그래서 exclude를 하기 위해 좀 찾아보니 아래와 같은 방법을 제안한다.

implementation ('com.google.firebase:firebase-auth:17.0.0'){
    exclude group: 'com.google.android.gms', module: 'play-services-safetynet'
}

[참조] https://kwonsaw.tistory.com/1227

 

[Android] 구글 플레이 콘솔 com.google.android.gms:play-services-safetynet 해결 방법

얼마 전 안드로이드 스튜디오 프로젝트를 업로드하는데 구글 플레이 콘솔 메시지 창에 다음과 같은 경고가 발생했습니다. com.google.android.gms:play-services-safetynet SDK 개발자의 보고 내용은 다음과

kwonsaw.tistory.com

 

그런데 이 방법은 Firebase 관련 Defendencies.xml에서 생성하는거라 Android Resolve를 하면 자동으로 다시 삭제돼 버린다.

 

그래서 별도로 빼서 exclude를 할 방법이 없나하고 찾아보니 아래 3가지 방법을 보여주고 있다.

구성 전반적으로 제외 하는 방법

  configurations.all {
    exclude group: 'com.android.support', module: 'customtabs'
  }

단지, 컴파일에서 제외하는 방법

  configurations {
    compile.exclude group: 'com.android.support', module: 'customtabs'
  }

Dependencies에서 제외하는 방법

dependencies {
    implementation ('com.android.support:appcompat-v7:27.1.1'){
        exclude group: 'com.android.support', module: 'customtabs'
    }
}

[참조] https://ovso.github.io/blog/2018/04/18/gradle-dependencies-exclude/

 

Gradle dependencies exclude(Gradle 의존성 제거)

Gradle 의존성 제거

ovso.github.io

 

3번째 방법은 Android Resolve 시 초기화를 해버려서 configurations.all과 configurations를 어디에 넣어야되는지 찾아봤는데, 아래와 같이 mainTemplate.gradle의 dependencies에 넣나보다.

dependencies {
    ...
    
    configurations.all {
        exclude group: 'com.android.billingclient', module: 'billing'
    }
}

[참조] https://documentation.qonversion.io/docs/unity-sdk

 

Unity in-app purchases SDK | Qonversion

Install Unity SDK to validate user receipts, get in-app subscription analytics, and 3-rd party integrations.

documentation.qonversion.io

 

그래서 com.google.android.gms:play-services-safetynet:17.0.0를 exclude 하기 위해 아래와 같이 추가했다.

dependencies {
    ...
    
    configurations.all {
        exclude group: 'com.google.android.gms', module: 'play-services-safetynet'
    }
}

 

일단 빌드는 잘되고, Android Resolve 해도 삭제되지 않는 건 확인 했는데..

스토어 올려봐야 사라진건지 알 수 있으려나..?

반응형
Posted by blueasa
, |

[링크] https://kwonsaw.tistory.com/1227

 

[Android] 구글 플레이 콘솔 com.google.android.gms:play-services-safetynet 해결 방법

얼마 전 안드로이드 스튜디오 프로젝트를 업로드하는데 구글 플레이 콘솔 메시지 창에 다음과 같은 경고가 발생했습니다. com.google.android.gms:play-services-safetynet SDK 개발자의 보고 내용은 다음과

kwonsaw.tistory.com

 

[참조] https://stackoverflow.com/questions/73028990/play-store-warning-play-services-safetynet-com-google-android-gmsplay-servic

 

Play Store Warning : play-services-safetynet (com.google.android.gms:play-services-safetynet) has reported critical issues with

I got this warning from play store when I was trying to update my Flutter on play store. The developer of play-services-safetynet (com.google.android.gms:play-services-safetynet) has reported criti...

stackoverflow.com

 

[참조2] https://github.com/firebase/firebase-android-sdk/issues/3890

 

How can I handle this warning?(com.google.android.gms:play-services-safetynet:17.0.0) · Issue #3890 · firebase/firebase-androi

[READ] Step 1: Are you in the right place? [REQUIRED] Step 2: Describe your environment Android Studio version: 2021.2.1 Patch 1 Firebase Component: implementation platform("com.google.firebas...

github.com

 

반응형
Posted by blueasa
, |

Unity 2021.3.14f1

Advertisement 3.7.5(자동설치 된 듯)

 

---

구글스토어에 앱 출시하고나니 아래와 같은 경고가 뜬다.

 

 

Unity-Package Manager에서 확인해보니 'Advertisement'가 있고, 아래에 'Advertisement with Mediation'이 또 있다.

(Advertisement를 일부러 설치하진 않았었는데 설치돼 있는거보니 기존에 설치된 정보가 남아서 계속 유지되고 있었나보다.)

 

경고 메시지는 4.0.1 이상으로 올리라는데

기존 Advertisement는 3.7.5에서 더이상 업데이트가 안되는거 보니 Legacy로 처리하고 더이상 안쓰나보다.

 

[해결]

UnityAds를 쓴다면 Advertisement를 지우고, Advertisement with Mediation을 쓰면 될 것 같은데..

난 UnityAds를 안쓰고 Admob을 쓰니 그냥 Advertisement를 Uninstall만 했다.

 

 

[참조] https://gall.dcinside.com/mgallery/board/view/?id=game_dev&no=103736 

 

앱에 규정을 준수하지 않는 SDK 정책 - 인디 게임 개발 마이너 갤러리

개인 정보 또는 민감한 정보를 수집하면서도 Advertising ID, Android ID 식별자로 제한되지 않는 com.unity3d.ads:unity-ads SDK 또는 라이브러리 중 하나가 사용하는 SDK가 포함

gall.dcinside.com

 

반응형
Posted by blueasa
, |

Unity 2021.3.14f1

Firebase 9.6.0

 

----

FirebaseAuth를 사용해서 Google/Facebook/Apple/Guest 로그인을 사용 중..

 

[버그]

개발중에 직접 빌드한 앱이 Android에서 'Google 로그인'이 정상적으로 되는데,

출시하면서 'Google 스토어'에서 받은 앱에서 'Google 로그인'이 실패함.

 

[원인]

확인해보니 직접 만든 Keystore 인증키(SHA-1)는 'Google API 콘솔'에 정상적으로 등록돼 있는데,

'구글 스토어'의 인증키(SHA-1)는 '구글 API 콘솔'에 등록안되고 빠져 있다.

 

[해결]

'구글 스토어'의 인증키(SHA-1)를 '구글 API 콘솔'에 추가 등록 함

 

- 'Google Play Console-해당 앱-설정-앱 무결성-앱 서명'으로 가기

[앱 서명 키 인증서 위치]

구글 플레이 콘솔-앱 하위 메뉴

 

- '앱 서명 키 인증서(구글스토어)'를 'Google API 콘솔'에 등록해 주자

'앱 서명 키 인증서'(구글스토어) / '업로드 키 인증서'(업로드 한 Keystore)

 

[참조] https://blueasa.tistory.com/2425

 

[버그] APP NOT CORRECTLY CONFIGURED TO USE GOOGLE PLAY GAME SERVICES

2020-02-18 01:09:43.567 4919-11220/? E/SignInAuthenticator: **** **** APP NOT CORRECTLY CONFIGURED TO USE GOOGLE PLAY GAME SERVICES **** This is usually caused by one of these reasons: **** (1) Your package name and certificate fingerprint do not match ***

blueasa.tistory.com

 

반응형
Posted by blueasa
, |

[링크] https://mrw0119.tistory.com/147

 

[Unity] 안드로이드 플러그인 (Android Plugin JAR, AAR)

유니티에서 사용하는 안드로이드 플러그인 파일은 두가지로 구분된다. JAR과 AAR이다. JAR은 class만 포함된 파일이고, AAR은 class + manifest + resource가 전부 포함된 파일이다. class만 사용할 경우 JAR 파

mrw0119.tistory.com

 

반응형
Posted by blueasa
, |