요즘은 매장에 가면 다들 테이블에 테블릿 하나쯤 거치하고 주문을 받고 실시간으로 결제도 진행하고 그렇게 매장을 운영하는 경우를 종종 보게 됩니다. 그것이 좋은 지 어떤지는 모르겠지만... 그런 매장을 하나 가져보고 싶은 욕망(?)이 생기는 건... 이제 떠나야 할 곳이 어디인지 보이기 때문 이기도 합니다.
앱 로고 이미지
이것은 맞는 가 하는 문제는 나중에 생각해 보려 합니다. 지금은 무언가를 해야할 것 같은 시기이기도 하고 해서...
준비사항
아직은 아무런 준비도 없고 그저 앱을 하나 기획하고 기본 화면만 하나 만들어서 무작정 게시를 시작합니다.
다들 아시는 것처럼 playstore console 에서 새로 앱 만들기를 하고 게시할 준비를 시작합니다.
기본 스토어 등록 정보
이걸 하기 전에 준비해야 할 것들은
로그 이미지 (앱 아이콘은 투명한 PNG 또는 JPEG, 최대 1MB, 512px X 512px이어야 하며디자인 사양및메타데이터 정책을 준수해야 합니다.),
기본 아미지 (그래픽 이미지는 PNG 또는 JPEG, 최대 1MB, 1024px X 500px이어야 합니다.),
동영상 링크 (보통은 youtube 링크를 입력합니다.)
그리고 여러 장의 앱 이미지 (휴대전화 스크린숏을 2~8장 업로드하세요. 스크린숏은 PNG 또는 JPEG, 장당 최대 8MB, 가로세로 비율 16:9 또는 9:16, 가로세로 길이는 320px X 3840px 사이여야 합니다.) 등을 준비하여야 합니다.
다음은 앱 콘텐츠에서 나오는 각 항목을 설정해 두어야 합니다. 그다음은 앱을 빌드해서 내부 테스트부터 하건, 바로 프로덕션으로 하건 앱을 업로드하고 게시 허가가 나오길 기다려 봅니다.
지오펜스 앱을 수정하면서 또 하나를 찾았습니다. 구현해 보고 싶었던 것은 지오펜싱에서 찾은 위치에 대한 알림을 구현할 때 현재 내가 도착한 위치가 어떤 것 때문에 표시가 되고 있는지 알고 싶다는 것입니다. 물론 잘 아시는 분들은 이미 찾으셨을리라고 생각이 되지만, 이제 구현을 해 가고 있는 분들을 위해서 기억을 남겨 두고자 합니다.
class GeofenceBroadcastReceiver : BroadcastReceiver() {
companion object { var TAG = "GeofenceBroadcastReceiver" internal const val ACTION_GEOFENCE_EVENT = "action.ACTION_GEOFENCE_EVENT" }
override fun onReceive(context: Context, intent: Intent) {
if (intent.action == ACTION_GEOFENCE_EVENT) { Log.e(TAG, "onReceive ...")
val geofencingEvent = GeofencingEvent.fromIntent(intent) // Test that the reported transition was of interest. if (geofencingEvent != null) {
if (geofencingEvent.hasError()) { val errorMessage = GeofenceStatusCodes.getStatusCodeString(geofencingEvent.errorCode) Log.e("GeofenceBR", errorMessage) return }
// 트리거된 위치에 대한 정보를 취득해 보기 위해서... var geofenceList = geofencingEvent.triggeringGeofences var whereString = " " if (geofenceList != null) { for (geofence in geofenceList) { Log.e(TAG, "requestId = ${geofence.requestId}") whereString += "${geofence.requestId} " } }
위에 기술된 전체 소스의 내용과 같이 트리거 되는 위치에 대한 정보를 취해서 그곳에 대한 알림을 전달하는 방식으로 내가 지정한 위치에 도달하였을 때 명칭을 표시하는 방법을 구현해 보게 됩니다.
지오펜싱 위치 도달 알림.
트리거 명칭 전달 방법
참 저렇게 trigger 되게 하는 부분은 다음과 같이 적용했습니다. 아래처럼 geofenceList.add을 하게 되는 경우 builder을 설정하면서 setRequestId에 넣는 값을 표시하고자 하는 장소의 명칭을 넣었습니다. 그러면 위에 기술된 코드에서는 getRequestId로 값을 가져와 현재 표시되는 위치의 명칭을 보여주는 기능을 구현할 수 있습니다.
private fun doAddGeoFence(documents: ResponseBean.Documents) { geofenceList.clear() geofenceList.add(Geofence.Builder() // Set the request ID of the geofence. This is a string to identify this // geofence. .setRequestId(documents.placeName)
// Set the circular region of this geofence. .setCircularRegion( documents.posY, documents.posX, sp.getFloat("aroundArea", 300f) )
// Set the expiration duration of the geofence. This geofence gets automatically // removed after this period of time. .setExpirationDuration(sp.getFloat("geofenceTime", 1.0f).toLong() * 60 * 60 * 1000)
// Set the transition types of interest. Alerts are only generated for these // transition. We track entry and exit transitions in this sample. .setTransitionTypes(Geofence.GEOFENCE_TRANSITION_ENTER or Geofence.GEOFENCE_TRANSITION_EXIT)
private val geofencePendingIntent: PendingIntent by lazy { val intent = Intent(this, GeofenceBroadcastReceiver::class.java) intent.action = ACTION_GEOFENCE_EVENT PendingIntent.getBroadcast(this, 0, intent, FLAG_MUTABLE) }
지오펜스는실제 지리적 영역에 대한가상경계 경계입니다.[1]지오펜스는 동적으로 생성되거나(포인트 위치 주변의 반경에서와 같이) 미리 정의된 경계 세트(예: 스쿨 존 또는 이웃 경계)와 일치할 수 있습니다.
지오펜스의 사용은 지오펜싱이라고 하며 , 사용의한 예는지오펜스에 들어가거나 나가는위치 기반 서비스 (LBS) 사용자의 위치인식장치를 포함합니다.이 활동은 장치 사용자에 대한 경고와 지오펜스 운영자에게 메시지를 보낼 수 있습니다.장치의 위치를 포함할 수 있는 이 정보는휴대폰 이나 이메일 계정으로 전송될 수 있습니다.
해서 나는 오늘도 지오펜싱에 대한 오해(?)를 하고 있었습니다. 위에서 기술된 소스는 geofence 수신을 설정하기 구현하는 예제를 android codelab에서 보면서 따라 하기를 하면서 구현한 소스이기도 합니다
android 가 API 13을 위해서 퍼블리싱을 해야 하는 경우 경고를 날리는(?) 부분이 있습니다. 어디냐 하면 PendingIntent을 broadcast 하는 경우 따라가는 파라미터 중 FLAG_IMMUTABLE을 서술하라고 하는 경우 입니다. gradle build 을 하는 경우 에러 메시지가 나타나고 가이드 문구에 FLAG_IMMUTABLE 을 넣으라고 안내를 합니다.
그래서 난 착하게(?) 그대로 따라 해 보았습니다. 그런데... 그것 때문인지 아직 잘 알지는 못하지만, 지오펜싱을 수신할 때
진입, 이탈하는 것을 결괏값으로 수신하여야 하나, 그것이 잘 되지 않는 문제가 발생했습니다. 아래 소스 예시 중에서 Geofence.GEOFENCE_TRANSITION_DWELL, GEOFENCE_TRANSITION_ENTER, GEOFENCE_TRANSITION_EXIT 등의 결과 구분을 못하는 경우를 말합니다. 그래서 구현하고자 했던 기능 구현이 어렵게 되는 현상이 있었습니다.
<GeofenceBroadcastReceiver 소스의 일부 발췌>
override fun onReceive(context: Context, intent: Intent) {
if (intent.action == ACTION_GEOFENCE_EVENT) { Log.e(TAG, "onReceive ...")
val geofencingEvent = GeofencingEvent.fromIntent(intent) // Test that the reported transition was of interest. if (geofencingEvent != null) {
if (geofencingEvent.hasError()) { val errorMessage = GeofenceStatusCodes.getStatusCodeString(geofencingEvent.errorCode) Log.e("GeofenceBR", errorMessage) return }
#스하리1000명프로젝트, कभी-कभी विदेशी कामगारों से बात करना कठिन होता है, है न? मैंने एक सरल ऐप बनाया है जो मदद करता है! आप अपनी भाषा में लिखते हैं, और दूसरे इसे अपनी भाषा में देखते हैं। यह सेटिंग्स के आधार पर स्वचालित अनुवाद करता है। आसान चैट के लिए बहुत उपयोगी। जब मौका मिले तो देख लेना! https://play.google.com/store/apps/details?id=com.billcoreatech.multichat416
#billcorea #운동동아리관리앱 🏸 श्नीडल, बैडमिंटन क्लबों के लिए एक आवश्यक ऐप! 👉 मैच खेलें - स्कोर रिकॉर्ड करें और विरोधियों को खोजें 🎉 कहीं भी, अकेले, दोस्तों के साथ, या क्लब में बिल्कुल सही! 🤝 अगर आपको बैडमिंटन पसंद है तो इसे जरूर ट्राई करें
ऐप पर जाएं 👉 https://play.google.com/store/apps/details?id=com.billcorea.matchplay