다른 사람(iPhone) 내에서 앱 실행
다른 앱 내에서 임의의 아이폰 애플리케이션을 실행할 수 있습니까?예를 들어 내 응용 프로그램에서 사용자가 버튼을 누르고 전화 앱으로 바로 시작하기를 원하는 경우(현재 앱 닫기, 전화 앱 열기).
이것이 가능할까요?전화 URL 링크로 전화를 걸 때는 이렇게 할 수 있지만, 대신 특정 번호로 전화를 걸지 않고 전화 앱을 실행하고 싶습니다.
Kevin이 지적했듯이, URL Scheme은 앱 간의 의사소통을 위한 유일한 방법입니다.그래서, 아니요, 임의의 앱을 실행하는 것은 불가능합니다.
그러나 Apple의 앱이든, 귀하의 앱이든, 다른 개발자의 앱이든 URL Scheme을 등록하는 앱을 실행할 수 있습니다.문서는 다음과 같습니다.
전화를 시작하는 것에 관해서는, 당신의 것처럼 보입니다.tel:
전화기를 시작하려면 링크에 최소 세 자리 숫자가 있어야 합니다.그래서 번호를 누르지 않고 앱에 들어갈 수 없습니다.
저는 다른 앱을 열 수 있는 앱을 만드는 것이 쉽다는 것을 알았습니다.
해 보겠습니다.FirstApp
그리고.SecondApp
첫 번째 앱을 열 때 단추를 클릭하여 두 번째 앱을 열 수 있습니다.이를 위한 솔루션은 다음과 같습니다.
두 번째 앱에서
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:
의 UIApplication
class.의 . 메인 애플리케이션의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®istered=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
'programing' 카테고리의 다른 글
HTTPS를 통해 각도 조절 서버 가져오기 (0) | 2023.06.04 |
---|---|
WPF DataGrid 렌더링 속도가 매우 느림 (0) | 2023.06.04 |
철도에서 루비의 수집 경로와 회원 경로의 차이? (0) | 2023.06.04 |
Git Bash의 Azure CLI (0) | 2023.06.04 |
여러 모니터에서 Eclipse 환경을 구성하는 방법에 대한 팁이 있습니까? (0) | 2023.06.04 |