on master help sign in
Merge pull request #1 from ElvishJerricco/aa-clib-appcallbacks

Added support for iOS universal links

commit3642fd7cd8560366d6de9597f9484a20549cfdd6 authorAli Abrar <aliabrar@gmail.com> dateTue 30 May 2017, 17:51 (9 years ago) parent52b2a91c662afb
2 files changed+18
jsaddle-wkwebview/cbits-uikit/AppDelegate.m+13 jsaddle-wkwebview/src-ghc/Language/Javascript/JSaddle/WKWebView.hs+5
jsaddle-wkwebview/cbits-uikit/AppDelegate.m+13
@@ -19,6 +19,7 @@ HsStablePtr global_applicationDidEnterBackground = 0;
1919HsStablePtr global_applicationWillEnterForeground = 0;
2020HsStablePtr global_applicationWillTerminate = 0;
2121HsStablePtr global_applicationSignificantTimeChange = 0;
22+HsStablePtr global_applicationUniversalLink = 0;
2223uint64_t global_requestAuthorizationWithOptions = 0;
2324uint64_t global_requestAuthorizationOptionBadge = 0;
2425uint64_t global_requestAuthorizationOptionSound = 0;
@@ -119,6 +120,16 @@ HsStablePtr global_didFailToRegisterForRemoteNotificationsWithError = 0;
119120 callIO(global_applicationSignificantTimeChange);
120121}
121122
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+
122133@end
123134
124135void runInWKWebView(HsStablePtr handler,
@@ -131,6 +142,7 @@ void runInWKWebView(HsStablePtr handler,
131142 HsStablePtr hs_applicationWillEnterForeground,
132143 HsStablePtr hs_applicationWillTerminate,
133144 HsStablePtr hs_applicationSignificantTimeChange,
145+ HsStablePtr hs_applicationUniversalLink,
134146 const uint64_t hs_requestAuthorizationWithOptions,
135147 const uint64_t hs_requestAuthorizationOptionBadge,
136148 const uint64_t hs_requestAuthorizationOptionSound,
@@ -149,6 +161,7 @@ void runInWKWebView(HsStablePtr handler,
149161 global_applicationWillEnterForeground = hs_applicationWillEnterForeground;
150162 global_applicationWillTerminate = hs_applicationWillTerminate;
151163 global_applicationSignificantTimeChange = hs_applicationSignificantTimeChange;
164+ global_applicationUniversalLink = hs_applicationUniversalLink;
152165 global_requestAuthorizationWithOptions = hs_requestAuthorizationWithOptions;
153166 global_requestAuthorizationOptionBadge = hs_requestAuthorizationOptionBadge;
154167 global_requestAuthorizationOptionSound = hs_requestAuthorizationOptionSound;
jsaddle-wkwebview/src-ghc/Language/Javascript/JSaddle/WKWebView.hs+5
@@ -33,6 +33,7 @@ foreign import ccall runInWKWebView
3333 -> StablePtr (IO ()) -- applicationWillEnterForeground
3434 -> StablePtr (IO ()) -- applicationWillTerminate
3535 -> StablePtr (IO ()) -- applicationSignificantTimeChange
36+ -> StablePtr (CString -> IO ()) -- applicationUniversalLink
3637 -> Word64 -- whether to run requestAuthorizationWithOptions
3738 -> Word64 -- Ask for Badge authorization
3839 -> Word64 -- Ask for Sound authorization
@@ -52,6 +53,7 @@ data AppDelegateConfig = AppDelegateConfig
5253 , _appDelegateConfig_applicationWillEnterForeground :: IO ()
5354 , _appDelegateConfig_applicationWillTerminate :: IO ()
5455 , _appDelegateConfig_applicationSignificantTimeChange :: IO ()
56+ , _appDelegateConfig_applicationUniversalLink :: CString -> IO ()
5557 , _appDelegateConfig_appDelegateNotificationConfig :: AppDelegateNotificationConfig
5658 }
5759
@@ -65,6 +67,7 @@ instance Default AppDelegateConfig where
6567 , _appDelegateConfig_applicationWillEnterForeground = return ()
6668 , _appDelegateConfig_applicationWillTerminate = return ()
6769 , _appDelegateConfig_applicationSignificantTimeChange = return ()
70+ , _appDelegateConfig_applicationUniversalLink = \_ -> return ()
6871 , _appDelegateConfig_appDelegateNotificationConfig = def
6972 }
7073
@@ -122,6 +125,7 @@ run' mUrl cfg f = do
122125 applicationWillEnterForeground <- newStablePtr $ _appDelegateConfig_applicationWillEnterForeground cfg
123126 applicationWillTerminate <- newStablePtr $ _appDelegateConfig_applicationWillTerminate cfg
124127 applicationSignificantTimeChange <- newStablePtr $ _appDelegateConfig_applicationSignificantTimeChange cfg
128+ applicationUniversalLink <- newStablePtr $ _appDelegateConfig_applicationUniversalLink cfg
125129
126130 -- AppDelegate notification configuration
127131 let ncfg = _appDelegateConfig_appDelegateNotificationConfig cfg
@@ -143,6 +147,7 @@ run' mUrl cfg f = do
143147 applicationWillEnterForeground
144148 applicationWillTerminate
145149 applicationSignificantTimeChange
150+ applicationUniversalLink
146151 (fromBool requestAuthorizationWithOptions)
147152 (fromBool $ Set.member AuthorizationOption_Badge authorizationOptions)
148153 (fromBool $ Set.member AuthorizationOption_Sound authorizationOptions)