自分のappを他のアプリケーションの開き方リストに表示します.

4692 ワード

最近、会社では、ユーザーが微信、qqまたはその他のappでWord、Ecxel、PDFファイルを受け取るときに、開く方法を選択すると、自分のappが開く方法のリストに表示され、自分のappにジャンプして開くか、アップロードすることができ、解決方法は以下の通りです.
以下は例にすぎませんが、具体的には参考にしてください.https://developer.apple.com/library/content/documentation/Miscellaneous/Reference/UTIRef/Articles/System-DeclaredUniformTypeIdentifiers.html#//apple_ref/doc/uid/TP40009259-SW1
部分コード参照:自http://stackoverflow.com/questions/15836145/associate-files-type-with-my-iphone-app

1.info.plistファイルは次のように構成されています。

  • 1.1 CFBundleDocumentTypeというkeyが追加されました.対応するvalueは辞書配列で、具体的には
  • のように構成されています.
    CFBundleDocumentTypes
     
        
           CFBundleTypeName
               Molecules Structure File
           CFBundleTypeIconFiles
           
              [email protected]
              icon.png
           
          LSItemContentTypes
             
                com.adobe.pdf
                com.microsoft.word.doc
                com.microsoft.excel.xls
             
         CFBundleTypeRole
             Viewer
         LSHandlerRank
           Owner
        
     
    
  • 1.2サポートされているファイルタイプとファイル拡張子を宣言し、UTExportedType Declarationsというkeyを追加しました.構成は以下の
  • です.
    UTExportedTypeDeclarations
     
      
       UTTypeConformsTo
       
        public.data
        public.composite-content
       
       UTTypeIdentifier
       com.adobe.pdf
       UTTypeDescription
       PDF  
       UTTypeTagSpecification
       
        public.mime-type
        application/pdf
        public.filename-extension
        
         pdf
        
       
      
      
       UTTypeConformsTo
       
        public.data
       
       UTTypeIdentifier
       com.microsoft.word.doc
       UTTypeDescription
       Word  
       UTTypeTagSpecification
       
        public.mime-type
        application/msword
        public.filename-extension
        
         doc
         docx
        
       
      
      
       UTTypeConformsTo
       
        public.data
       
       UTTypeIdentifier
       com.microsoft.excel.xls
       UTTypeDescription
       Excel Document
       UTTypeTagSpecification
       
        public.mime-type
        application/vnd.ms-excel
        public.filename-extension
        
         xls
        
       
      
     
    
    

    2.これらのファイルを処理するコントローラを作成し、AppDelegateメソッドでこれらのファイルのオープンを傍受します。

  • 2.1一般的なコントローラQYFileReader Controllerを作成しました.コントローラにはUIWebViewプロパティがあり、UIWebViewでこれらのファイルを自動的に解析できます.
  • 2.2 QYFileReader Controllerは、これらのファイルを受信するためのurlコードが次のようにNSUrlタイプの属性を外部に暴露した.
    @interface QYFileReaderController : UIViewController
    /**     url */
    @property (nonatomic,strong)NSURL *absoluteUrl;
    @end
    
    @interface QYFileReaderController ()
    @property (weak, nonatomic)  UIWebView *webView;
    @end
    
    @implementation QYFileReaderController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        
        [self setupWebView];
        //   
        [self.webView loadRequest:[NSURLRequest requestWithURL:self.absoluteUrl]];
    }
       
    - (void)setupWebView{
        UIWebView *webView = [[UIWebView alloc]initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height)];
        self.webView = webView;
        [self.view addSubview:self.webView];
        
        //       
        self.webView.scalesPageToFit = YES;
        
        //       
        self.webView.scrollView.bounces = NO;    
    }
    
  • 2.3 AppDelegate(BOOL)アプリケーション:(UIApplication*)アプリケーションhandleOpenURL:(NSURL*)urlメソッドでこれらのファイルのオープンおよび取得に対応するファイルのurlを傍受し、QYFileReader Controller
  • にurlを渡す
    
    - (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
    //    NSLog(@"url:%@",url.absoluteString);
    //    NSLog(@"host:%@",url.host);
        BOOL isLogin = YES; //        
       if (isLogin)
        {
            QYFileReaderController *readerVC = [[QYFileReaderController alloc] init];
            readerVC.absoluteUrl = url;
            UINavigationController *nav = self.window.rootViewController;
            [nav pushViewController:readerVC animated:YES];
        }
        return YES;
    }