본문 바로가기

공부하기/Development

웹에서 안드로이드, iOS 어플리케이션 호출 시키는 방법

웹에서 특정 어플을 호출시키는 방법을 찾다가 정리해놓고 싶어서 글을 남긴다


우선 어플리케이션에서는 아래와 같은 수정을 해줘야한다.


안드로이드


어플

AndroidManifest.xml

<intent-filter>

    <action android:name="android.intent.action.VIEW" />

    <category android:name="android.intent.category.DEFAULT" />

    <category android:name="android.intent.category.BROWSABLE"/>  

    <data android:scheme="schemeName" android:host="hostName"  />

</intent-filter>



위에서 schemeName과 hostName을 원하는대로 수정.

단지 이렇게만 처리를 하면 해당 액티비티가 계속해서 중복 실행되는 문제가 발생한다.

해당 액티비티 안에

android:launchMode="singleTask"

를 추가해서 중복 실행이 되지 않도록 해주자.





iOS

어플

info.plist에서

URL types

       └ item 0

             └ URL identifier : hostName

                 URL Schemes

                    └ item 0 : schemeName



위에서 schemeName과 hostName을 원하는대로 수정.


위와 같이 작성 해준다.


그리고 schemeName://hostName


으로 호출하면 해당 어플리케이션 호출이 가능하다



그리고 파라미터를 전달하고 싶을때가 생긴다.

schemeName://hostName?param1=test1&param2=test2


와 같은 식으로 전달 해주면 된다.

파라미터를 전달했으면 받는법도 알아야 사용할 수 있을것이다.

파라미터를 전달 받는 방법은 아래와 같다


안드로이드

onResume에서 아래와 같은 코드를 추가 하여 사용한다

if(getIntent()!=null){

    Uri uri = getIntent().getData();

    if(uri != null){ 

        Log.d("Test", "URI: " + uri.toString()); 

        Log.d("Test", "Parameter1: " + uri.getQueryParameter("param1"));

        Log.d("Test", "Parameter2: " + uri.getQueryParameter("param2"));

     }

 }


위에 액티비티 중복 실행을 방지하려고 singleTask 모드로 설정해놨다면 onResume이 아니라 onNewIntent에서 받아줘야 한다.


@Override

protected void onNewIntent(Intent intent) {

super.onNewIntent(intent);

Log.d(LOG_TAG, "onNewIntent()");


Uri uri = intent.getData();


   Log.d("Test", "URI: " + uri.toString()); 

   Log.d("Test", "Parameter1: " + uri.getQueryParameter("param1"));

   Log.d("Test", "Parameter2: " + uri.getQueryParameter("param2"));

 }


이렇게 쓰도록 하자



iOS

AppDelegate.m 파일에 아래와 같은 함수를 추가 하여 사용한다


- (BOOL)application:(UIApplication *)application

  openURL:(NSURL *)url

                          sourceApplication:(NSString *)sourceApplication

         annotation:(id)annotation {


queries = [[url query] componentsSeparatedByString:@"&"];

    

    for(int i=0; i<[queries count]; i++)

    {

        NSArray *param = [[queries objectAtIndex:i] componentsSeparatedByString:@"="];

        NSString *name = [param objectAtIndex:0];

        NSString *value = [param objectAtIndex:1];

        

  NSLog(@"name : %@ , value : %@", name, value);

    }


}