/** * Called upon user click. Attempts open mopubnativebrowser links in the device browser and all * other links in the MoPub in-app browser. */ @VisibleForTesting void handleClick(final List<String> clickThroughTrackers, final String clickThroughUrl) { makeTrackingHttpRequest(clickThroughTrackers, getContext(), BaseEvent.Name.CLICK_REQUEST); if (clickThroughUrl == null) { return; } broadcastAction(ACTION_INTERSTITIAL_CLICK); if (Intents.isNativeBrowserScheme(clickThroughUrl)) { try { final Intent intent = Intents.intentForNativeBrowserScheme(clickThroughUrl); Intents.startActivity(getContext(), intent); return; } catch (UrlParseException e) { MoPubLog.d(e.getMessage()); } catch (IntentNotResolvableException e) { MoPubLog.d("Could not handle intent for URI: " + clickThroughUrl + ". " + e.getMessage()); } return; } Bundle bundle = new Bundle(); bundle.putString(MoPubBrowser.DESTINATION_URL_KEY, clickThroughUrl); getBaseVideoViewControllerListener() .onStartActivityForResult(MoPubBrowser.class, MOPUB_BROWSER_REQUEST_CODE, bundle); }
@Override protected void performAction( @NonNull final Context context, @NonNull final Uri uri, @NonNull final UrlHandler urlHandler) throws IntentNotResolvableException { final String errorMessage = "Unable to load mopub native browser url: " + uri; try { final Intent intent = Intents.intentForNativeBrowserScheme(uri); Intents.launchIntentForUserClick(context, intent, errorMessage); } catch (UrlParseException e) { throw new IntentNotResolvableException(errorMessage + "\n\t" + e.getMessage()); } }
@Override protected void performAction( @NonNull final Context context, @NonNull final Uri uri, @NonNull final UrlHandler urlHandler) throws IntentNotResolvableException { Intents.launchApplicationUrl(context, uri); }
@Override protected void performAction( @NonNull final Context context, @NonNull final Uri uri, @NonNull final UrlHandler urlHandler) throws IntentNotResolvableException { Preconditions.checkNotNull(context); Preconditions.checkNotNull(uri); final String chooserText = "Share via"; final String errorMessage = "Could not handle share tweet intent with URI " + uri; try { final Intent shareTweetIntent = Intents.intentForShareTweet(uri); final Intent chooserIntent = Intent.createChooser(shareTweetIntent, chooserText); Intents.launchIntentForUserClick(context, chooserIntent, errorMessage); } catch (UrlParseException e) { throw new IntentNotResolvableException(errorMessage + "\n\t" + e.getMessage()); } }
@Override protected void performAction( @NonNull final Context context, @NonNull final Uri uri, @NonNull final UrlHandler urlHandler) throws IntentNotResolvableException { if (!urlHandler.shouldSkipShowMoPubBrowser()) { Intents.showMoPubBrowserForUrl(context, uri); } }
@Override protected void performAction( @NonNull final Context context, @NonNull final Uri uri, @NonNull final UrlHandler urlHandler) throws IntentNotResolvableException { final String errorMessage = "Could not handle intent with URI: " + uri + "\n\tIs " + "this intent supported on your phone?"; Intents.launchActionViewIntent(context, uri, errorMessage); }
@Override protected void performAction( @NonNull final Context context, @NonNull final Uri uri, @NonNull final UrlHandler urlHandler) throws IntentNotResolvableException { // 1. Parse the URL as a valid deeplink+ if (!"navigate".equalsIgnoreCase(uri.getHost())) { throw new IntentNotResolvableException( "Deeplink+ URL did not have 'navigate' as" + " the host."); } final String primaryUrl; final List<String> primaryTrackingUrls; final String fallbackUrl; final List<String> fallbackTrackingUrls; try { primaryUrl = uri.getQueryParameter("primaryUrl"); primaryTrackingUrls = uri.getQueryParameters("primaryTrackingUrl"); fallbackUrl = uri.getQueryParameter("fallbackUrl"); fallbackTrackingUrls = uri.getQueryParameters("fallbackTrackingUrl"); } catch (UnsupportedOperationException e) { // If the URL is not hierarchical, getQueryParameter[s] will throw // UnsupportedOperationException (see // http://developer.android.com/reference/android/net/Uri.html#getQueryParameter(java.lang.String) throw new IntentNotResolvableException("Deeplink+ URL was not a hierarchical" + " URI."); } if (primaryUrl == null) { throw new IntentNotResolvableException( "Deeplink+ did not have 'primaryUrl' query" + " param."); } final Uri primaryUri = Uri.parse(primaryUrl); if (shouldTryHandlingUrl(primaryUri)) { // Nested Deeplink+ URLs are not allowed throw new IntentNotResolvableException( "Deeplink+ had another Deeplink+ as the " + "'primaryUrl'."); } // 2. Attempt to handle the primary URL try { Intents.launchApplicationUrl(context, primaryUri); makeTrackingHttpRequest(primaryTrackingUrls, context, BaseEvent.Name.CLICK_REQUEST); return; } catch (IntentNotResolvableException e) { // Primary URL failed; proceed to attempt fallback URL } // 3. Attempt to handle the fallback URL if (fallbackUrl == null) { throw new IntentNotResolvableException( "Unable to handle 'primaryUrl' for " + "Deeplink+ and 'fallbackUrl' was missing."); } if (shouldTryHandlingUrl(Uri.parse(fallbackUrl))) { // Nested Deeplink+ URLs are not allowed throw new IntentNotResolvableException( "Deeplink+ URL had another Deeplink+ " + "URL as the 'fallbackUrl'."); } // UrlAction.handleUrl already verified this comes from a user interaction final boolean fromUserInteraction = true; urlHandler.handleUrl(context, fallbackUrl, true, fallbackTrackingUrls); }