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
[참고]
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