투케이2K

889. (Android/Java) [간단 소스] 스키마 접속 여부 확인 및 파라미터 데이터 확인 - App Scheme Run 본문

Android

889. (Android/Java) [간단 소스] 스키마 접속 여부 확인 및 파라미터 데이터 확인 - App Scheme Run

투케이2K 2024. 10. 23. 19:34

[개발 환경 설정]

개발 툴 : AndroidStudio

개발 언어 : Java / Kotlin

 

[소스 코드]

 


// --------------------------------------------------------------------------------------
[개발 및 테스트 환경]
// --------------------------------------------------------------------------------------

- 언어 : Java

- 개발 툴 : Android Studio

- 구분 : Scheme 스키마

- 사전 준비 필요 : AndroidManifest.xml 파일에서 스키마 접속을 처리하려는 액티비티 설정 필요

// --------------------------------------------------------------------------------------






// --------------------------------------------------------------------------------------
[소스 코드]
// --------------------------------------------------------------------------------------

    // TODO [SEARCH FAST] : [URL 스키마 접속 확인 실시]
    public void innerUrlScheme(){
        try {

            /**
             * // -----------------------------------------
             * [스키마 데이터 형식]
             * // -----------------------------------------
             * 1. 예시 : test://call?
             * // -----------------------------------------
             * 2. 예시 : test://call?name=twok&age=29
             * // -----------------------------------------
             * 3. 스키마 데이터 초기화 :
             *    - [애플리케이션 시작] : S_Preference.proccessCreateClear
             *    - [애플리케이션 종료] : S_Preference.proccessFinishClear
             * // -----------------------------------------
             * */


            // [스키마 접속 여부 확인 실시]
            if(getIntent() != null){

                // [URL 스키마 전달 받은 데이터 확인 실시]
                Uri uri = getIntent().getData();
                if(uri != null){

                    // [스키마 및 호스트 데이터 확인 실시]
                    String total = String.valueOf(uri.toString()); // [스키마 + 호스트 + 데이터 전체]
                    String scheme = String.valueOf(uri.getScheme()); // [스키마]
                    String host = String.valueOf(uri.getHost()); // [호스트]

                    String endCheck = host + "?"; // [마지막 종료 형식 확인 위함 : 스키마 데이터 널 체크]

                    Log.i("---","---");
                    Log.w("//===========//","================================================");
                    Log.i("","\n"+"["+String.valueOf(ACTIVITY_NAME)+" >> innerUrlScheme() :: URL 스키마 getData() 접속 확인]");
                    Log.i("","\n"+"[접속 여부 :: 스키마 접속 확인]");
                    Log.i("","\n"+"[uri :: "+String.valueOf(total)+"]");
                    Log.w("//===========//","================================================");
                    Log.i("---","---");


                    // TODO [로그인 연동 : 스키마 / 호스트 접속 : login]
                    if (scheme.trim().equals(S_FinalData.SCHEME_IN_TITLE_APP)
                            && host.trim().equals(S_FinalData.SCHEME_IN_HOST_LOGIN)){

                        // [스키마 데이터 체크 수행 실시]
                        try {
                            if (uri.getQueryParameterNames() != null
                                    && uri.getQueryParameterNames().size() > 0
                                    && total.trim().endsWith(endCheck.trim()) == false){ // KEY 값이 하나라도 포함된 경우

                                Log.i("---","---");
                                Log.w("//===========//","================================================");
                                Log.i("","\n"+"["+String.valueOf(ACTIVITY_NAME)+" >> innerUrlScheme() :: 스키마 접속 분기 처리 실시]");
                                Log.i("","\n"+"--------------------------------");
                                Log.i("","\n"+"[로 직 :: [로그인 연동] 스키마 접속 처리 실시]");
                                Log.i("","\n"+"--------------------------------");
                                Log.i("","\n"+"[스키마 데이터 :: 전달 받은 스키마 데이터 있음]");
                                Log.w("//===========//","================================================");
                                Log.i("---","---");

                                // [배열에 스키마 데이터 담기 수행 실시]
                                ArrayList keyList = new ArrayList(uri.getQueryParameterNames());
                                JSONObject schemeJSON = new JSONObject();
                                for (int i=0; i<keyList.size(); i++){
                                    schemeJSON.put(String.valueOf(keyList.get(i)), uri.getQueryParameter(String.valueOf(keyList.get(i))));
                                }

                                // [프리퍼런스에 [로그인] 스키마 데이터 저장 실시]
                                S_Preference.setString(getApplication(), S_FinalData.PRE_SCHEME_DATA_LOGIN, schemeJSON.toString());
                            }

                            else {
                                Log.i("---","---");
                                Log.e("//===========//","================================================");
                                Log.i("","\n"+"["+String.valueOf(ACTIVITY_NAME)+" >> innerUrlScheme() :: 스키마 접속 분기 처리 실시]");
                                Log.i("","\n"+"--------------------------------");
                                Log.i("","\n"+"[로 직 :: [로그인 연동] 스키마 접속 처리 실시]");
                                Log.i("","\n"+"--------------------------------");
                                Log.i("","\n"+"[스키마 데이터 :: 전달 받은 스키마 데이터 없음]");
                                Log.e("//===========//","================================================");
                                Log.i("---","---");
                            }
                        }
                        catch (Exception e){
                            e.printStackTrace();
                        }
                        // [로그 출력 실시]
                        Log.i("---","---");
                        Log.w("//===========//","================================================");
                        Log.i("","\n"+"["+String.valueOf(ACTIVITY_NAME)+" >> innerUrlScheme() :: 스키마 접속 분기 처리 실시]");
                        Log.i("","\n"+"--------------------------------");
                        Log.i("","\n"+"[로 직 :: [로그인 연동] 스키마 접속 처리 실시]");
                        Log.i("","\n"+"--------------------------------");
                        Log.i("","\n"+"[스키마 :: "+String.valueOf(scheme)+"]");
                        Log.i("","\n"+"--------------------------------");
                        Log.i("","\n"+"[호스트 :: "+String.valueOf(host)+"]");
                        Log.i("","\n"+"--------------------------------");
                        Log.i("","\n"+"[KEY [ALL] :: "+String.valueOf(uri.getQueryParameterNames())+"]");
                        //Log.i("","\n"+"[KEY [name] :: "+String.valueOf(uri.getQueryParameter("name"))+"]");
                        Log.i("","\n"+"--------------------------------");
                        Log.i("","\n"+"[스키마 데이터 [PRE_SCHEME_DATA_LOGIN] :: "+String.valueOf(S_Preference.getString(getApplication(), S_FinalData.PRE_SCHEME_DATA_LOGIN))+"]");
                        Log.w("//===========//","================================================");
                        Log.i("---","---");

                        // [SEARCH FAST] : [URL 스키마 접속 확인 실시]
                        S_Preference.setString(getApplication(), S_FinalData.PRE_APP_NEW_TASK, "TRUE");
                    }
                    // TODO [일반 호출 : 스키마 / 호스트 접속 : call]
                    else {

                        // [스키마 데이터 체크 수행 실시]
                        try {
                            if (uri.getQueryParameterNames() != null
                                    && uri.getQueryParameterNames().size() > 0
                                    && total.trim().endsWith(endCheck.trim()) == false){ // KEY 값이 하나라도 포함된 경우
                                Log.i("---","---");
                                Log.w("//===========//","================================================");
                                Log.i("","\n"+"["+String.valueOf(ACTIVITY_NAME)+" >> innerUrlScheme() :: 스키마 접속 분기 처리 실시]");
                                Log.i("","\n"+"--------------------------------");
                                Log.i("","\n"+"[로 직 :: [일반] 스키마 접속 처리 실시]");
                                Log.i("","\n"+"--------------------------------");
                                Log.i("","\n"+"[스키마 데이터 :: 전달 받은 스키마 데이터 있음]");
                                Log.w("//===========//","================================================");
                                Log.i("---","---");

                                // [배열에 스키마 데이터 담기 수행 실시]
                                ArrayList keyList = new ArrayList(uri.getQueryParameterNames());
                                JSONObject schemeJSON = new JSONObject();
                                for (int i=0; i<keyList.size(); i++){
                                    schemeJSON.put(String.valueOf(keyList.get(i)), uri.getQueryParameter(String.valueOf(keyList.get(i))));
                                }

                                // [프리퍼런스에 [일반] 스키마 데이터 저장 실시]
                                S_Preference.setString(getApplication(), S_FinalData.PRE_SCHEME_DATA_CALL, schemeJSON.toString());
                            }
                            else {
                                Log.i("---","---");
                                Log.e("//===========//","================================================");
                                Log.i("","\n"+"["+String.valueOf(ACTIVITY_NAME)+" >> innerUrlScheme() :: 스키마 접속 분기 처리 실시]");
                                Log.i("","\n"+"--------------------------------");
                                Log.i("","\n"+"[로 직 :: [일반] 스키마 접속 처리 실시]");
                                Log.i("","\n"+"--------------------------------");
                                Log.i("","\n"+"[스키마 데이터 :: 전달 받은 스키마 데이터 없음]");
                                Log.e("//===========//","================================================");
                                Log.i("---","---");
                            }
                        }
                        catch (Exception e){
                            e.printStackTrace();
                        }

                        // [로그 출력 실시]
                        Log.i("---","---");
                        Log.w("//===========//","================================================");
                        Log.i("","\n"+"["+String.valueOf(ACTIVITY_NAME)+" >> innerUrlScheme() :: 스키마 접속 분기 처리 실시]");
                        Log.i("","\n"+"--------------------------------");
                        Log.i("","\n"+"[로 직 :: [일반] 스키마 접속 처리 실시]");
                        Log.i("","\n"+"--------------------------------");
                        Log.i("","\n"+"[스키마 :: "+String.valueOf(scheme)+"]");
                        Log.i("","\n"+"--------------------------------");
                        Log.i("","\n"+"[호스트 :: "+String.valueOf(host)+"]");
                        Log.i("","\n"+"--------------------------------");
                        Log.i("","\n"+"[KEY [ALL] :: "+String.valueOf(uri.getQueryParameterNames())+"]");
                        //Log.i("","\n"+"[KEY [name] :: "+String.valueOf(uri.getQueryParameter("name"))+"]");
                        Log.i("","\n"+"--------------------------------");
                        Log.i("","\n"+"[스키마 데이터 [PRE_SCHEME_DATA_CALL] :: "+String.valueOf(S_Preference.getString(getApplication(), S_FinalData.PRE_SCHEME_DATA_CALL))+"]");
                        Log.w("//===========//","================================================");
                        Log.i("---","---");

                        // [SEARCH FAST] : [URL 스키마 접속 확인 실시]
                        S_Preference.setString(getApplication(), S_FinalData.PRE_APP_NEW_TASK, "TRUE");
                    }
                }
                else {
                    Log.i("---","---");
                    Log.d("//===========//","================================================");
                    Log.i("","\n"+"["+String.valueOf(ACTIVITY_NAME)+" >> innerUrlScheme() :: URL 스키마 getData() 접속 확인]");
                    Log.i("","\n"+"[접속 여부 :: [1] 일반 실행]");
                    Log.i("","\n"+"[로 직 :: 스키마 데이터 및 접속 상태 플래그 초기화 실시]");
                    Log.d("//===========//","================================================");
                    Log.i("---","---");

                    // [로그인 : 스키마 데이터 초기화]
                    S_Preference.setString(getApplication(), S_FinalData.PRE_SCHEME_DATA_LOGIN, "");

                    // [일반 : 스키마 데이터 초기화]
                    S_Preference.setString(getApplication(), S_FinalData.PRE_SCHEME_DATA_CALL, "");

                    // [SEARCH FAST] : [URL 스키마 접속 확인 실시]
                    S_Preference.setString(getApplication(), S_FinalData.PRE_APP_NEW_TASK, "");
                }
            }
            else {
                Log.i("---","---");
                Log.d("//===========//","================================================");
                Log.i("","\n"+"["+String.valueOf(ACTIVITY_NAME)+" >> innerUrlScheme() :: URL 스키마 getIntent() 접속 없음]");
                Log.i("","\n"+"[접속 여부 :: [2] 일반 실행]");
                Log.i("","\n"+"[로 직 :: 스키마 데이터 및 접속 상태 플래그 초기화 실시]");
                Log.d("//===========//","================================================");
                Log.i("---","---");

                // [로그인 : 스키마 데이터 초기화]
                S_Preference.setString(getApplication(), S_FinalData.PRE_SCHEME_DATA_LOGIN, "");

                // [일반 : 스키마 데이터 초기화]
                S_Preference.setString(getApplication(), S_FinalData.PRE_SCHEME_DATA_CALL, "");

                // [SEARCH FAST] : [URL 스키마 접속 확인 실시]
                S_Preference.setString(getApplication(), S_FinalData.PRE_APP_NEW_TASK, "");
            }
        }
        catch (Exception e){
            e.printStackTrace();
        }
    }


// --------------------------------------------------------------------------------------






// --------------------------------------------------------------------------------------
[참고 사이트]
// --------------------------------------------------------------------------------------

[Android - C_MoveApp - 외부 앱 실행 , 스키마 실행 , 앱 설치 여부 , 마켓 이동 , 크롬 기반 외부 링크 이동]

https://blog.naver.com/kkh0977/222678185676?trackingCode=blog_bloghome_searchlist


[Android - URL SCHEMA (스키마) 사용해 외부 앱 실행 및 QueryParameter 데이터 전송 실시]

https://blog.naver.com/kkh0977/222324984002?trackingCode=blog_bloghome_searchlist


[Android - 앱 스키마 (scheme) 접속 시 중복 실행 방지 - 앱 아이콘 클릭 시 앱 초기화 현상 해결]

https://blog.naver.com/kkh0977/222696613021?trackingCode=blog_bloghome_searchlist

// --------------------------------------------------------------------------------------

 

반응형
Comments