从 iOS 中的共享按钮启动应用程序 - Objective C 和 React Native

Posted

技术标签:

【中文标题】从 iOS 中的共享按钮启动应用程序 - Objective C 和 React Native【英文标题】:Launch app from share button in iOS - Objective C and React Native 【发布时间】:2018-01-26 22:47:50 【问题描述】:

当用户在照片中选择任何图像并点击共享 -> MyApp 时,我正在尝试启动 MyApp。 现在(UIView*) shareView 已成功启动,但我需要进入MyApp 中的正常流程,我的意思是,启动所有带有反应本机视图的应用程序,而不是shareView

- (UIView*) shareView 
  NSURL *jsCodeLocation;

  jsCodeLocation = [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"src/components/share/share" fallbackResource:nil];

  RCTRootView *rootView = [[RCTRootView alloc] initWithBundleURL:jsCodeLocation
                                                      moduleName:@"Share"
                                               initialProperties:nil
                                                   launchOptions:nil];

  UILabel *myLabel = [[UILabel alloc]initWithFrame:CGRectMake(10, 50, 200, 40)];
  [myLabel setBackgroundColor:[UIColor clearColor]];
  [myLabel setText:@"THIS IS A LABEL FOR TEST"];
  [rootView addSubview:myLabel];
  rootView.backgroundColor = UIColor.whiteColor;


  return rootView;

(如果从这里调用,react native 组件将不起作用,永远不会被调用或渲染)

所有权限都在工作,共享按钮出现在活动操作表中。

我想知道这是否是一项不可能完成的任务(根据苹果的指导方针,活动表中的共享应该是发送数据的简单任务,可能使用NSUserDefaults)但我不知道是否以编程方式或在 ios 应用的生命周期中这是被禁止的。

我尝试使用 NSURL 调用应用程序并添加方案标识符,但这不起作用。

感谢您的帮助。

【问题讨论】:

【参考方案1】:

我想您可能会谈论应用共享扩展。你应该知道的一件事,扩展不能直接访问容器应用程序的资源和数据。如果要共享资源,则必须使用扩展程序和容器应用程序进行应用程序组配置。然后使用共享资源空间。 NSUserDefault 和 NSFileManager 都有访问共享空间的方法。您的代码直接访问容器 App 的资源空间,而不是通过共享空间。这就是你失败的原因,我想。

【讨论】:

感谢您的回答,我们再次检查并在共享扩展中使用 shareViewController 中的 didSelectPost 工作,扩展范围是问题所在。谢谢。

以上是关于从 iOS 中的共享按钮启动应用程序 - Objective C 和 React Native的主要内容,如果未能解决你的问题,请参考以下文章

如何从 iTunes 文件共享文件夹 iOS 中删除文件

使用 iOS 中的共享扩展从 Mail App 共享附件

有没有办法使用 worklight 6.2 或 phonegap 混合应用程序从 android 和 ios 中的另一个应用程序启动一个应用程序?

iOS 扩展 - 共享气泡与共享按钮?

如何使用 Swift 从 iOS 应用程序共享音频/图像到 whatsapp

将文件从 iOS 应用程序扩展保存到包含的应用程序