on master help sign in
Added support for iOS universal links
c662afbWill Fancher
jsaddle-wkwebview/cbits-uikit/AppDelegate.m+13
@@ -19,6 +19,7 @@ HsStablePtr global_applicationDidEnterBackground = 0;
19HsStablePtr global_applicationWillEnterForeground = 0;
19HsStablePtr global_applicationWillEnterForeground = 0;
20HsStablePtr global_applicationWillTerminate = 0;
20HsStablePtr global_applicationWillTerminate = 0;
21HsStablePtr global_applicationSignificantTimeChange = 0;
21HsStablePtr global_applicationSignificantTimeChange = 0;
22+HsStablePtr global_applicationUniversalLink = 0;
22uint64_t global_requestAuthorizationWithOptions = 0;
23uint64_t global_requestAuthorizationWithOptions = 0;
23uint64_t global_requestAuthorizationOptionBadge = 0;
24uint64_t global_requestAuthorizationOptionBadge = 0;
24uint64_t global_requestAuthorizationOptionSound = 0;
25uint64_t global_requestAuthorizationOptionSound = 0;
@@ -119,6 +120,16 @@ HsStablePtr global_didFailToRegisterForRemoteNotificationsWithError = 0;
119 callIO(global_applicationSignificantTimeChange);
120 callIO(global_applicationSignificantTimeChange);
120}
121}
121
122
123+- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray *restorableObjects))restorationHandler {
124+ // TODO: Reroute universal links when they're clicked in-app.
125+ // https://developer.apple.com/reference/webkit/wknavigationdelegate/1455643-webview?language=objc
126+ if ([userActivity.activityType isEqualToString:NSUserActivityTypeBrowsingWeb] && userActivity.webpageURL) {
127+ callWithCString([userActivity.webpageURL.absoluteString UTF8String], global_applicationUniversalLink);
128+ return YES;
129+ }
130+ return NO;
131+}
132+
122@end
133@end
123
134
124void runInWKWebView(HsStablePtr handler,
135void runInWKWebView(HsStablePtr handler,
@@ -131,6 +142,7 @@ void runInWKWebView(HsStablePtr handler,
131 HsStablePtr hs_applicationWillEnterForeground,
142 HsStablePtr hs_applicationWillEnterForeground,
132 HsStablePtr hs_applicationWillTerminate,
143 HsStablePtr hs_applicationWillTerminate,
133 HsStablePtr hs_applicationSignificantTimeChange,
144 HsStablePtr hs_applicationSignificantTimeChange,
145+ HsStablePtr hs_applicationUniversalLink,
134 const uint64_t hs_requestAuthorizationWithOptions,
146 const uint64_t hs_requestAuthorizationWithOptions,
135 const uint64_t hs_requestAuthorizationOptionBadge,
147 const uint64_t hs_requestAuthorizationOptionBadge,
136 const uint64_t hs_requestAuthorizationOptionSound,
148 const uint64_t hs_requestAuthorizationOptionSound,
@@ -149,6 +161,7 @@ void runInWKWebView(HsStablePtr handler,
149 global_applicationWillEnterForeground = hs_applicationWillEnterForeground;
161 global_applicationWillEnterForeground = hs_applicationWillEnterForeground;
150 global_applicationWillTerminate = hs_applicationWillTerminate;
162 global_applicationWillTerminate = hs_applicationWillTerminate;
151 global_applicationSignificantTimeChange = hs_applicationSignificantTimeChange;
163 global_applicationSignificantTimeChange = hs_applicationSignificantTimeChange;
164+ global_applicationUniversalLink = hs_applicationUniversalLink;
152 global_requestAuthorizationWithOptions = hs_requestAuthorizationWithOptions;
165 global_requestAuthorizationWithOptions = hs_requestAuthorizationWithOptions;
153 global_requestAuthorizationOptionBadge = hs_requestAuthorizationOptionBadge;
166 global_requestAuthorizationOptionBadge = hs_requestAuthorizationOptionBadge;
154 global_requestAuthorizationOptionSound = hs_requestAuthorizationOptionSound;
167 global_requestAuthorizationOptionSound = hs_requestAuthorizationOptionSound;
jsaddle-wkwebview/src-ghc/Language/Javascript/JSaddle/WKWebView.hs+5
@@ -33,6 +33,7 @@ foreign import ccall runInWKWebView
33 -> StablePtr (IO ()) -- applicationWillEnterForeground
33 -> StablePtr (IO ()) -- applicationWillEnterForeground
34 -> StablePtr (IO ()) -- applicationWillTerminate
34 -> StablePtr (IO ()) -- applicationWillTerminate
35 -> StablePtr (IO ()) -- applicationSignificantTimeChange
35 -> StablePtr (IO ()) -- applicationSignificantTimeChange
36+ -> StablePtr (CString -> IO ()) -- applicationUniversalLink
36 -> Word64 -- whether to run requestAuthorizationWithOptions
37 -> Word64 -- whether to run requestAuthorizationWithOptions
37 -> Word64 -- Ask for Badge authorization
38 -> Word64 -- Ask for Badge authorization
38 -> Word64 -- Ask for Sound authorization
39 -> Word64 -- Ask for Sound authorization
@@ -52,6 +53,7 @@ data AppDelegateConfig = AppDelegateConfig
52 , _appDelegateConfig_applicationWillEnterForeground :: IO ()
53 , _appDelegateConfig_applicationWillEnterForeground :: IO ()
53 , _appDelegateConfig_applicationWillTerminate :: IO ()
54 , _appDelegateConfig_applicationWillTerminate :: IO ()
54 , _appDelegateConfig_applicationSignificantTimeChange :: IO ()
55 , _appDelegateConfig_applicationSignificantTimeChange :: IO ()
56+ , _appDelegateConfig_applicationUniversalLink :: CString -> IO ()
55 , _appDelegateConfig_appDelegateNotificationConfig :: AppDelegateNotificationConfig
57 , _appDelegateConfig_appDelegateNotificationConfig :: AppDelegateNotificationConfig
56 }
58 }
57
59
@@ -65,6 +67,7 @@ instance Default AppDelegateConfig where
65 , _appDelegateConfig_applicationWillEnterForeground = return ()
67 , _appDelegateConfig_applicationWillEnterForeground = return ()
66 , _appDelegateConfig_applicationWillTerminate = return ()
68 , _appDelegateConfig_applicationWillTerminate = return ()
67 , _appDelegateConfig_applicationSignificantTimeChange = return ()
69 , _appDelegateConfig_applicationSignificantTimeChange = return ()
70+ , _appDelegateConfig_applicationUniversalLink = \_ -> return ()
68 , _appDelegateConfig_appDelegateNotificationConfig = def
71 , _appDelegateConfig_appDelegateNotificationConfig = def
69 }
72 }
70
73
@@ -122,6 +125,7 @@ run' mUrl cfg f = do
122 applicationWillEnterForeground <- newStablePtr $ _appDelegateConfig_applicationWillEnterForeground cfg
125 applicationWillEnterForeground <- newStablePtr $ _appDelegateConfig_applicationWillEnterForeground cfg
123 applicationWillTerminate <- newStablePtr $ _appDelegateConfig_applicationWillTerminate cfg
126 applicationWillTerminate <- newStablePtr $ _appDelegateConfig_applicationWillTerminate cfg
124 applicationSignificantTimeChange <- newStablePtr $ _appDelegateConfig_applicationSignificantTimeChange cfg
127 applicationSignificantTimeChange <- newStablePtr $ _appDelegateConfig_applicationSignificantTimeChange cfg
128+ applicationUniversalLink <- newStablePtr $ _appDelegateConfig_applicationUniversalLink cfg
125
129
126 -- AppDelegate notification configuration
130 -- AppDelegate notification configuration
127 let ncfg = _appDelegateConfig_appDelegateNotificationConfig cfg
131 let ncfg = _appDelegateConfig_appDelegateNotificationConfig cfg
@@ -143,6 +147,7 @@ run' mUrl cfg f = do
143 applicationWillEnterForeground
147 applicationWillEnterForeground
144 applicationWillTerminate
148 applicationWillTerminate
145 applicationSignificantTimeChange
149 applicationSignificantTimeChange
150+ applicationUniversalLink
146 (fromBool requestAuthorizationWithOptions)
151 (fromBool requestAuthorizationWithOptions)
147 (fromBool $ Set.member AuthorizationOption_Badge authorizationOptions)
152 (fromBool $ Set.member AuthorizationOption_Badge authorizationOptions)
148 (fromBool $ Set.member AuthorizationOption_Sound authorizationOptions)
153 (fromBool $ Set.member AuthorizationOption_Sound authorizationOptions)