programing

다른 사람(iPhone) 내에서 앱 실행

testmans 2023. 6. 4. 10:20
반응형

다른 사람(iPhone) 내에서 앱 실행

다른 앱 내에서 임의의 아이폰 애플리케이션을 실행할 수 있습니까?를 들어 내 응용 프로그램에서 사용자가 버튼을 누르고 전화 앱으로 바로 시작하기를 원하는 경우(현재 앱 닫기, 전화 열기).

이것이 가능할까요?전화 URL 링크로 전화를 걸 때는 이렇게 할 수 있지만, 대신 특정 번호로 전화를 걸지 않고 전화 앱을 실행하고 싶습니다.

Kevin이 지적했듯이, URL Scheme은 앱 간의 의사소통을 위한 유일한 방법입니다.그래서, 아니요, 임의의 앱을 실행하는 것은 불가능합니다.

그러나 Apple의 앱이든, 귀하의 앱이든, 다른 개발자의 앱이든 URL Scheme을 등록하는 앱을 실행할 수 있습니다.문서는 다음과 같습니다.

앱에 대한 사용자 지정 URL 구성표 정의

전화를 시작하는 것에 관해서는, 당신의 것처럼 보입니다.tel:전화기를 시작하려면 링크에 최소 세 자리 숫자가 있어야 합니다.그래서 번호를 누르지 않고 앱에 들어갈 수 없습니다.

저는 다른 앱을 열 수 있는 앱을 만드는 것이 쉽다는 것을 알았습니다.

해 보겠습니다.FirstApp그리고.SecondApp첫 번째 앱을 열 때 단추를 클릭하여 두 번째 앱을 열 수 있습니다.이를 위한 솔루션은 다음과 같습니다.

  1. 두 번째 앱에서

    SecondApp의 plist 파일로 이동하면 문자열 iOSDevTips가 포함된 URL Scheme을 추가해야 합니다(물론 다른 string.it 도 마음대로 작성할 수 있습니다).

여기에 이미지 설명 입력

2. 첫 번째 앱에서

다음 작업을 사용하여 단추를 만듭니다.

- (void)buttonPressed:(UIButton *)button
{
  NSString *customURL = @"iOSDevTips://";

  if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:customURL]])
  {
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:customURL]];
  }
  else
  {
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"URL error"
                              message:[NSString stringWithFormat:@"No custom URL defined for %@", customURL]
                              delegate:self cancelButtonTitle:@"Ok" 
                              otherButtonTitles:nil];
    [alert show];
  }

}

바로 그겁니다.이제 첫 번째 앱에서 버튼을 클릭하면 두 번째 앱이 열립니다.

8시 이전의 iOS에 대해서는 리 답변이 절대적으로 맞습니다.

iOS 9+에서는 앱이 LSApplicationQuerySchees 키(문자열 배열) 아래의 Info.plist에서 쿼리하려는 URL 구성표를 화이트리스트에 추가해야 합니다.

여기에 이미지 설명 입력

인 스위프트

누군가 빠른 스위프트 복사해서 붙여넣기를 찾고 있을 때를 대비해서요.

if let url = URL(string: "app://"), UIApplication.shared.canOpenURL(url) {
            UIApplication.shared.open(url, options: [:], completionHandler: nil)
        } else if let itunesUrl = URL(string: appLink), UIApplication.shared.canOpenURL(itunesUrl) {
            UIApplication.shared.open(itunesUrl, options: [:], completionHandler: nil)
        }

다른 응용프로그램에서 응용프로그램을 열 수 있도록 하려면 두 응용프로그램을 모두 변경해야 합니다.다음은 iOS 10 업데이트와 함께 Swift 3을 사용하는 단계입니다.

열려는 응용프로그램 등록

Info.plist응용 프로그램의 사용자 지정 및 고유 URL 구성표를 정의합니다.

여기에 이미지 설명 입력

구성표 이름은 고유해야 합니다. 그렇지 않으면 장치에 동일한 URL 구성표 이름을 가진 다른 응용 프로그램이 설치되어 있으면 이 응용 프로그램이 어떤 프로그램을 열 것인지 결정됩니다.

기본 응용 프로그램에 이전 URL 구성표 포함

할 수 canOpenURL:UIApplicationclass.의 . 메인 애플리케이션의Info.plist을 른다응프램 URL 구합니에 합니다.LSApplicationQueriesSchemes(iOS 9.0에 소개됨)

여기에 이미지 설명 입력

응용프로그램을 여는 작업 구현

이제 모든 것이 설정되었으므로 다른 앱을 여는 기본 프로그램에 코드를 작성하면 됩니다.이것은 다음과 같이 보여야 합니다.

let appURLScheme = "MyAppToOpen://"

guard let appURL = URL(string: appURLScheme) else {
    return
}

if UIApplication.shared.canOpenURL(appURL) {

    if #available(iOS 10.0, *) {
        UIApplication.shared.open(appURL)
    }
    else {
        UIApplication.shared.openURL(appURL)
    }
}
else {
    // Here you can handle the case when your other application cannot be opened for any reason.
}

기존 앱(AppStore에서 설치)을 열려면 이러한 변경 사항을 새 버전으로 변경해야 합니다.이미 Apple AppStore에 릴리스한 응용 프로그램을 열려면 먼저 URL 구성표 등록이 포함된 새 버전을 업로드해야 합니다.

다음은 다른 앱 내에서 애플리케이션을 시작하기 위한 좋은 튜토리얼입니다.
SDK: Scheme으로 iOS SDK: URL 파일
또한 임의 응용 프로그램을 실행할 수 없고 URL 구성표를 등록한 기본 응용 프로그램을 실행할 수 있습니다.

이를 위해 두 앱 모두에 코드 줄을 몇 개 추가해야 합니다.

A 앱: 다른 앱에서 열고 싶은 앱. (소스)

B 앱: B 앱에서 A 앱(대상)엽니다.

A코드

A 앱의 목록에 태그를 몇 개 추가합니다. XML 아래에서 A 앱의 오픈 플리스트 소스 및 과거

<key>CFBundleURLTypes</key>
<array>
    <dict>
        <key>CFBundleURLName</key>
        <string>com.TestApp</string>
        <key>CFBundleURLSchemes</key>
        <array>
            <string>testApp.linking</string>
        </array>
    </dict>
</array>

A의 앱 대리인 - 여기서 다시 전화 받기

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url
  sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
// You we get the call back here when App B will try to Open 
// sourceApplication will have the bundle ID of the App B
// [url query] will provide you the whole URL 
// [url query] with the help of this you can also pass the value from App B and get that value here 
}

B 앱 코드로 이동 중 -

만약 당신이 입력 파라미터 없이 A 앱을 열고 싶다면.

-(IBAction)openApp_A:(id)sender{

    if(![[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"testApp.linking://?"]]){
         UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"App is not available!" message:nil delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil];
            [alert show];

        }
}

만약 당신이 B 에서 A 앱으로 매개 변수를 전달하고 싶다면, 아래 코드를 사용하세요.

-(IBAction)openApp_A:(id)sender{
    if(![[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"testApp.linking://?userName=abe&registered=1&Password=123abc"]]){
         UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"App is not available!" message:nil delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil];
            [alert show];

        }
}

참고: 사파리 브라우저에서 testApp.linking://?만 입력해도 앱을 열 수 있습니다.

다음 코드를 사용하면 응용프로그램에서 응용프로그램을 실행하는 데 도움이 됩니다.

참고: 이름 판타지를 실제 응용 프로그램 이름으로 바꿉니다.

NSString *mystr=[[NSString alloc] initWithFormat:@"fantacy://location?id=1"];
NSURL *myurl=[[NSURL alloc] initWithString:mystr];
[[UIApplication sharedApplication] openURL:myurl];

URL 구성표를 등록한 앱만 실행할 수 있습니다.그런 다음 SMS:를 사용하여 SMS 앱을 여는 것과 마찬가지로, URL 방식을 사용하여 앱을 열 수 있습니다.

LaunchMe라는 문서에 이를 보여주는 매우 좋은 예가 있습니다.

2017년 11월 6일 현재 LaunchMe 샘플 코드입니다.

Swift 4.1 및 Xcode 9.4.1에서

1)PageViewControllerExample과 2)DelegateExample 두 개의 앱이 있습니다.이제 PageViewControllerExample 앱으로 DelegateExample 앱을 열고 싶습니다.PageViewControllerExample에서 Open 버튼을 클릭하면 DelegateExample 앱이 열립니다.

이를 위해 두 앱 모두에 대해 .plist 파일을 변경해야 합니다.

1단계

DelegateExample app에서 .plist 파일을 열고 URL 유형 및 URL 체계를 추가합니다.여기서 "myapp"과 같은 필수 이름을 추가해야 합니다.

여기에 이미지 설명 입력

2단계

PageViewControllerExample app에서 .plist 파일을 열고 이 코드를 추가합니다.

<key>LSApplicationQueriesSchemes</key>
<array>
    <string>myapp</string>
</array>

이제 PageViewControllerExample에서 버튼을 클릭하면 DelegateExample 앱을 열 수 있습니다.

//In PageViewControllerExample create IBAction
@IBAction func openapp(_ sender: UIButton) {

    let customURL = URL(string: "myapp://")
    if UIApplication.shared.canOpenURL(customURL!) {

        //let systemVersion = UIDevice.current.systemVersion//Get OS version
        //if Double(systemVersion)! >= 10.0 {//10 or above versions
            //print(systemVersion)
            //UIApplication.shared.open(customURL!, options: [:], completionHandler: nil)
        //} else {
            //UIApplication.shared.openURL(customURL!)
        //}

        //OR

        if #available(iOS 10.0, *) {
            UIApplication.shared.open(customURL!, options: [:], completionHandler: nil)
        } else {
            UIApplication.shared.openURL(customURL!)
        }
    } else {
         //Print alert here
    }
}

아니야.문서화된 URL 핸들러 외에 다른 앱과 통신하거나 실행할 수 있는 방법이 없습니다.

저도 얼마 전에 이것을 시도해봤지만(아이덴티티 포함 아이폰 애플리케이션 실행), 이를 위한 문서화된 방법은 분명히 없습니다.:)

이 주제와 관련된 참고 사항...

등록되지 않은 프로토콜에는 50개의 요청 제한이 있습니다.

토론에서 애플은 특정 버전의 앱에 대해서만 쿼리할 수 있다고 언급합니다.canOpenUrl제한된 횟수이며 선언되지 않은 스킴에 대해 50회 호출실패합니다.일단 이 실패 상태로 들어간 후 프로토콜을 추가해도 여전히 실패한다는 것도 보았습니다.

누군가에게 유용할 수 있다는 것을 알아두세요.

@villy393의 Swift 3 퀵 앤 페이스트 버전은 다음에 대한 답을 제공합니다.

if UIApplication.shared.canOpenURL(openURL) {
    UIApplication.shared.openURL(openURL)
} else if UIApplication.shared.canOpenURL(installUrl) 
    UIApplication.shared.openURL(installUrl)
}

언급URL : https://stackoverflow.com/questions/419119/launch-an-app-from-within-another-iphone

반응형