오늘 앱 확장 위젯 탭하여 포함 앱 열기
이 Apple Docs 의 도움 알림 센터 내에서 오늘의 견적을 표시하는 내 애플리케이션 + 견적에 대한 오늘 위젯을 구현했습니다 . 내가 달성하고 싶은 것 포함 앱 (이 경우 + 인용문)을 여는 것입니다. 사용자가 Today 알림보기에서 + Quotes 위젯을 탭하면 위젯을 어떤 것으로 불러야 확실하지 않습니다. 오늘보기. -(void)openURL:(NSURL *)URL completionHandler:(void (^)(BOOL success))completionHandler
탭할 때 호출 할 레이블 위에 버튼을 내리기 위해 다음 컨테이너 앱을 위해 선언 한 사용자 지정 URL 체계를 다. 문제는 포함 앱이 열리지는 것입니다.
-(IBAction)myButton:(id)sender {
NSURL *customURL = [NSURL URLWithString:@"PositiveQuotes://"];
[self openURL:customURL completionHandler:nil];
}
편집 : 좋아, 여기에 약간의 수정이 있습니다. 위의 제안과 다음 코드와 같이 레이블 위에 버튼을 배치하여 작업했습니다.
- (IBAction) goToApp: (id)sender {
NSURL *url = [NSURL URLWithString:@"floblog://"];
[self.extensionContext openURL:url completionHandler:nil];
}
"Touch Up Inside"이벤트에 연결되었습니다. 그러나 이로 인해 사용자가 오늘보기를 스크롤 할 때 앱이 시작됩니다.
=====================================
나는 같은 문제에 부딪쳤다. 그러나 iOS 8의 첫 번째 베타 릴리스 노트 에 다음과 같이 언급 된 이후 현재 존재 합니다.
문제 해결 : openURL은 확장 프로그램에서 작동하지 않습니다.
그래서 앞으로 베타 2까지 기다려야 할 것입니다.
Apple Doc 에 따르면 Swift 2 버전
extensionContext?.openURL(NSURL(string: "foo://")!, completionHandler: nil)
Swift 3 버전
extensionContext?.open(URL(string: "foo://")! , completionHandler: nil)
그리고 추가하는 것을 잊지 마세요. URL 구성표 로Info.plist
@sunseeker의 대답은 좋은 것이지만 주석에 "숨겨져"있습니다. 그리고 받아 들여진 대답은 이것이 가능하지 않다고 말하면서 방문자를 오도 할 수 있습니다.
이 코드는 다음과 같이 작동합니다.
- (IBAction)launchHostingApp:(id)sender
{
NSURL *pjURL = [NSURL URLWithString:@"hostingapp://home"];
[self.extensionContext openURL:pjURL completionHandler:nil];
}
Yosemite Beta 1과 함께 Xcode 6.0 (6A215l)을 사용하고 있습니다.
그리고 Apple이 Commons Scenarios 처리 에서 말한 것처럼 :
확장 프로그램은 포함 된 앱이 열리도록 직접 지시하지 않습니다. 대신 NSExtensionContext의 openURL : completionHandler : 메소드를 사용하여 시스템에 포함 된 앱을 열도록 지시합니다. 확장 프로그램이이 방법을 사용하여 URL을 열면 시스템은 요청을 이행하기 전에 요청의 유효성을 검사합니다.
숨겨진 버튼을 추가하지 않고이를 수행하는 또 다른 방법은 UILabel에 UITapGestureRecognizer를 추가하는 것입니다 (레이블에서 userInteractionEnabled를 true로 설정해야 함). 처리기에서 인식기 상태를 확인하여 UIGestureReconizerStateEnded (취소 또는 실패가 아님)에 도달했는지 확인한 다음 openUrl 코드를 실행합니다.
혹시라도 오류 처리 버전이있는 Swift 3 버전은 다음과 같습니다.
let myAppUrl = URL(string: "main-screen:")!
extensionContext?.open(myAppUrl, completionHandler: { (success) in
if (!success) {
print("error: failed to open app from Today Extension")
}
})
작동하게하려면 애플리케이션의 info.plist (소스 코드로 열기)를 열고 맨 위에 있어야합니다.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
다음을 추가하면 앱이 처리해야하는 URL 을 알 수 있습니다. 포함 된 앱을 열고 앱과 확장간에 사용자 기본값을 공유하는 방법에 대한 완전한 예 는 다음과 같습니다 .
참고 URL : https://stackoverflow.com/questions/24019820/today-app-extension-widget-tap-to-open-tained-app
'ProgramingTip' 카테고리의 다른 글
프로그래밍 방식으로 Android 앱 아이콘 배포 / 배포 해제 (0) | 2020.12.14 |
---|---|
tar : 파일을 업그레이드 됨 변경됨 (0) | 2020.12.14 |
C for 루프의 조건에서 상수 대신에 필요한 이유는 무엇입니까? (0) | 2020.12.14 |
LESS를 설치하려고 할 때 "루트 / 관리자 로이 명령을 다시 실행하십시오" (0) | 2020.12.14 |
Ubuntu에 Android Studio를 설치하는 방법은 무엇입니까? (0) | 2020.12.14 |