Add newly recommended method for RCTLinkingManager due to deprecation
Summary: What existing problem does the pull request solve? Beginning in iOS9, Apple has deprecated `-application:openURL:sourceApplication:annotations:` `- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(nullable NSString *)sourceApplication annotation:(id)annotation NS_DEPRECATED_IOS(4_2, 9_0, "Please use application:openURL:options:") __TVOS_PROHIBITED;` This PR uses the newly recommended method: `- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey, id> *)` while meanwhile, leaving the deprecated one for developers wishing to use the older `-application:openURL:sourceApplication:annotations:` for apps that support versions 8.x or less. Benefits will include: - [x] less warnings - [x] official deprecation should happen when iOS 11 is deployed - [x] TVOS support Closes https://github.com/facebook/react-native/pull/13615 Differential Revision: D4987980 Pulled By: javache fbshipit-source-id: ae07715a55ca627860262a9c8cf7df1e3c5e752b
This commit is contained in:
parent
9b4a644fec
commit
ff78a8de22
|
@ -72,37 +72,35 @@ const LinkingManager = Platform.OS === 'android' ?
|
|||
* execution, you'll need to add the following lines to your `*AppDelegate.m`:
|
||||
*
|
||||
* ```
|
||||
* // iOS 10
|
||||
* // iOS 9.x or newer
|
||||
* #import <React/RCTLinkingManager.h>
|
||||
*
|
||||
* - (BOOL)application:(UIApplication *)application
|
||||
* openURL:(NSURL *)url
|
||||
* options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options
|
||||
* {
|
||||
*
|
||||
* return [RCTLinkingManager application:application openURL:url
|
||||
* sourceApplication:options[UIApplicationOpenURLOptionsSourceApplicationKey]
|
||||
* annotation:options[UIApplicationOpenURLOptionsAnnotationKey]];
|
||||
*
|
||||
* return [RCTLinkingManager application:app openURL:url options:options];
|
||||
* }
|
||||
* ```
|
||||
*
|
||||
* If you're targeting iOS 9 or older, you can use the following code instead:
|
||||
* If you're targeting iOS 8.x or older, you can use the following code instead:
|
||||
*
|
||||
* ```
|
||||
* // iOS 9 or older
|
||||
* // iOS 8.x or older
|
||||
* #import <React/RCTLinkingManager.h>
|
||||
*
|
||||
* - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url
|
||||
* sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
|
||||
* {
|
||||
* return [RCTLinkingManager application:application openURL:url
|
||||
* sourceApplication:sourceApplication annotation:annotation];
|
||||
* sourceApplication:sourceApplication annotation:annotation];
|
||||
* }
|
||||
* ```
|
||||
*
|
||||
* If your app is using [Universal Links](https://developer.apple.com/library/prerelease/ios/documentation/General/Conceptual/AppSearch/UniversalLinks.html),
|
||||
*
|
||||
*
|
||||
* // If your app is using [Universal Links](https://developer.apple.com/library/prerelease/ios/documentation/General/Conceptual/AppSearch/UniversalLinks.html),
|
||||
* you'll need to add the following code as well:
|
||||
*
|
||||
*
|
||||
* ```
|
||||
* - (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity
|
||||
* restorationHandler:(void (^)(NSArray * _Nullable))restorationHandler
|
||||
|
@ -111,7 +109,6 @@ const LinkingManager = Platform.OS === 'android' ?
|
|||
* continueUserActivity:userActivity
|
||||
* restorationHandler:restorationHandler];
|
||||
* }
|
||||
*
|
||||
* ```
|
||||
*
|
||||
* And then on your React component you'll be able to listen to the events on
|
||||
|
|
|
@ -13,6 +13,10 @@
|
|||
|
||||
@interface RCTLinkingManager : RCTEventEmitter
|
||||
|
||||
+ (BOOL)application:(UIApplication *)app
|
||||
openURL:(NSURL *)URL
|
||||
options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options;
|
||||
|
||||
+ (BOOL)application:(UIApplication *)application
|
||||
openURL:(NSURL *)URL
|
||||
sourceApplication:(NSString *)sourceApplication
|
||||
|
|
|
@ -15,6 +15,15 @@
|
|||
|
||||
NSString *const RCTOpenURLNotification = @"RCTOpenURLNotification";
|
||||
|
||||
|
||||
static void postNotificationWithURL(NSURL *URL, id sender)
|
||||
{
|
||||
NSDictionary<NSString *, id> *payload = @{@"url": URL.absoluteString};
|
||||
[[NSNotificationCenter defaultCenter] postNotificationName:RCTOpenURLNotification
|
||||
object:sender
|
||||
userInfo:payload];
|
||||
}
|
||||
|
||||
@implementation RCTLinkingManager
|
||||
|
||||
RCT_EXPORT_MODULE()
|
||||
|
@ -42,15 +51,20 @@ RCT_EXPORT_MODULE()
|
|||
return @[@"url"];
|
||||
}
|
||||
|
||||
+ (BOOL)application:(UIApplication *)app
|
||||
openURL:(NSURL *)URL
|
||||
options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options
|
||||
{
|
||||
postNotificationWithURL(URL, self);
|
||||
return YES;
|
||||
}
|
||||
|
||||
+ (BOOL)application:(UIApplication *)application
|
||||
openURL:(NSURL *)URL
|
||||
sourceApplication:(NSString *)sourceApplication
|
||||
annotation:(id)annotation
|
||||
{
|
||||
NSDictionary<NSString *, id> *payload = @{@"url": URL.absoluteString};
|
||||
[[NSNotificationCenter defaultCenter] postNotificationName:RCTOpenURLNotification
|
||||
object:self
|
||||
userInfo:payload];
|
||||
postNotificationWithURL(URL, self);
|
||||
return YES;
|
||||
}
|
||||
|
||||
|
|
|
@ -56,6 +56,12 @@
|
|||
fallbackResource:nil];
|
||||
}
|
||||
|
||||
- (BOOL)application:(UIApplication *)app
|
||||
openURL:(NSURL *)url
|
||||
options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options
|
||||
{
|
||||
return [RCTLinkingManager application:app openURL:url options:options];
|
||||
}
|
||||
|
||||
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url
|
||||
sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
|
||||
|
|
Loading…
Reference in New Issue