ProgramingTip

오늘 앱 확장 위젯 탭하여 포함 앱 열기

bestdevel 2020. 12. 14. 20:38
반응형

오늘 앱 확장 위젯 탭하여 포함 앱 열기


Apple Docs 의 도움 알림 센터 내에서 오늘의 견적을 표시하는 내 애플리케이션 + 견적에 대한 오늘 위젯을 구현했습니다 . 내가 달성하고 싶은 것 포함 앱 (이 경우 + 인용문)을 여는 것입니다. 사용자가 Today 알림보기에서 + Quotes 위젯을 탭하면 위젯을 어떤 것으로 불러야 확실하지 않습니다. 오늘보기. -(void)openURL:(NSURL *)URL completionHandler:(void (^)(BOOL success))completionHandler탭할 때 호출 레이블 위에 버튼을 내리기 위해 다음 컨테이너 앱을 위해 선언 한 사용자 지정 URL 체계를 다. 문제는 포함 앱이 열리지는 것입니다.

+ Quotes Today 앱 확장 위젯

-(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

반응형