하루에 0.01%라도 성장하자

Develop/Android

Android App to App 통신에 관하여 - scheme

뚠님 2020. 8. 5. 14:06
반응형

안드로이드 앱개발을 하면서 앱투앱 통신을 해야할 때가 있습니다.

 

예를 들면 A앱에서 B앱을 통해 인증을 받고 다시 A앱으로 돌아오는 로직을 갖는 ( KT PASS 같은.. ) 절차에서 사용됩니다.

 

이때 안드로이드에서 사용할 수 있는 선택지는 꽤 많습니다.

 

1. ContentProvider

2. BroadCastReceiver

3. Intent

4. Scheme

 

이 중에서 Scheme에 대한 내용을 작성하고자 합니다.

 

앱투앱 통신에 대한 설명이다 보니 두가지 앱이 존재합니다.

따라서 편하게 아래와 같이 명시하고 진행하겠습니다.

 

 

A앱 : 호출 하는 앱
B앱 : 호출 당하는 앱

ex ) A앱이 B앱을 호출하였...

scheme의 형태

 

scheme은 스킴, 스키마 등으로 명칭되고 있습니다.

 

scheme://action 형태로 구성되어 있습니다.

 

scheme 정의 및 B앱 사전코딩

 

우선 통신하려는 앱과 사전에 약속같은 개념으로 scheme을 정의해야 합니다.

먼저 B앱에 대한 설정입니다.

 

먼저 AndroidManiest.xml에 아래와 같은 설정을 합니다.

 

이후 '호출 당했을(?)' 때 실행할 Activity에 아래와 같은 코드를 작성합니다.

 

이렇게 작성하면 이제 A앱에서 B앱의 scheme설정으로 앱호출을 할 수 있습니다.

 

 

A앱 사전 코딩

 

이제는 A앱의 코드를 작성해보겠습니다.

 

MainActivity에 작성하였으며, 내용을 보면 크게 어렵지 않습니다.

 

1. B앱의 PackageName을 미리 확인하여 디바이스에 설치되어 있는지 확인한다.

2. 설치되어 있지 않다면 마켓으로 연결하여 앱을 설치하도록 한다.

3. 설치되어 있다면 마켓으로 해당 앱을 실행한다.

 

어렵지 않습니다.

 

그렇다면 다음은 A앱이 B앱을 호출할 때 호출과 동시에 B앱에 데이터를 전달하는 예시를 보겠습니다.

 

A앱에서 B앱으로 데이터를 전달 할 때.

 

먼저 데이터를 전달할 때 A앱에서 '어떤 파라미터'로 데이터를 전달할지 서로 약속이 필요합니다.

물론 약속 없이 전달하면 받는 입장에서 intet의 모든 extra를 확인할 수 도 있겠지만 서로 약속한 상황이니 번거로움을 덜어내기 위해 특정 파라미터를 정하는 것이 좋습니다.

 

requestTestApp() 안에 appData변수를 만들었으며 이는  B앱에 전달할 '데이터' 입니다.

이걸 전달할 때 RESTful GET방식을 사용하며 그중에서도 Qurey 형식을 사용합니다.

 

 

A앱에서 전달한 데이터를 B앱에서 받아 처리하기.

 

이렇게 전달하면 B앱에서는 아래와 같이 받습니다

 

A앱에서 'test_data'라는 파라미터로 데이터를 전달 하였으며, B앱에서는 앱호출을 받으면 전달받은 intent의 data를 확인하여 'test_data' 라는 파라미터를 찾아 Log.i로 뿌려주는 코드를 작성 하였습니다.

 

 

개발하시는데 도움이 되길 바랍니다.

반응형