SEO: Provide redirect for new users (#3786)
This commit is contained in:
parent
31403702fe
commit
c201fc0d7c
@ -20,6 +20,7 @@ import {
|
|||||||
IS_ELECTRON,
|
IS_ELECTRON,
|
||||||
IS_TEST,
|
IS_TEST,
|
||||||
PRODUCTION_HOSTNAME,
|
PRODUCTION_HOSTNAME,
|
||||||
|
WEB_VERSION_BASE,
|
||||||
} from '../../../config';
|
} from '../../../config';
|
||||||
import {
|
import {
|
||||||
INITIAL_PERFORMANCE_STATE_MAX,
|
INITIAL_PERFORMANCE_STATE_MAX,
|
||||||
@ -37,8 +38,7 @@ import buildClassName from '../../../util/buildClassName';
|
|||||||
import captureEscKeyListener from '../../../util/captureEscKeyListener';
|
import captureEscKeyListener from '../../../util/captureEscKeyListener';
|
||||||
import { formatDateToString } from '../../../util/dateFormat';
|
import { formatDateToString } from '../../../util/dateFormat';
|
||||||
import { getPromptInstall } from '../../../util/installPrompt';
|
import { getPromptInstall } from '../../../util/installPrompt';
|
||||||
import { setPermanentWebVersion } from '../../../util/permanentWebVersion';
|
import { switchPermanentWebVersion } from '../../../util/permanentWebVersion';
|
||||||
import { clearWebsync } from '../../../util/websync';
|
|
||||||
import { IS_APP, IS_MAC_OS } from '../../../util/windowEnvironment';
|
import { IS_APP, IS_MAC_OS } from '../../../util/windowEnvironment';
|
||||||
|
|
||||||
import useAppLayout from '../../../hooks/useAppLayout';
|
import useAppLayout from '../../../hooks/useAppLayout';
|
||||||
@ -99,7 +99,6 @@ type StateProps =
|
|||||||
|
|
||||||
const CLEAR_DATE_SEARCH_PARAM = { date: undefined };
|
const CLEAR_DATE_SEARCH_PARAM = { date: undefined };
|
||||||
const CLEAR_CHAT_SEARCH_PARAM = { id: undefined };
|
const CLEAR_CHAT_SEARCH_PARAM = { id: undefined };
|
||||||
const WEBK_VERSION_URL = 'https://web.telegram.org/k/';
|
|
||||||
|
|
||||||
const LeftMainHeader: FC<OwnProps & StateProps> = ({
|
const LeftMainHeader: FC<OwnProps & StateProps> = ({
|
||||||
shouldHideSearch,
|
shouldHideSearch,
|
||||||
@ -140,7 +139,6 @@ const LeftMainHeader: FC<OwnProps & StateProps> = ({
|
|||||||
openChatByUsername,
|
openChatByUsername,
|
||||||
lockScreen,
|
lockScreen,
|
||||||
requestNextSettingsScreen,
|
requestNextSettingsScreen,
|
||||||
skipLockOnUnload,
|
|
||||||
openUrl,
|
openUrl,
|
||||||
updatePerformanceSettings,
|
updatePerformanceSettings,
|
||||||
} = getActions();
|
} = getActions();
|
||||||
@ -252,9 +250,7 @@ const LeftMainHeader: FC<OwnProps & StateProps> = ({
|
|||||||
});
|
});
|
||||||
|
|
||||||
const handleSwitchToWebK = useLastCallback(() => {
|
const handleSwitchToWebK = useLastCallback(() => {
|
||||||
setPermanentWebVersion('K');
|
switchPermanentWebVersion('K');
|
||||||
clearWebsync();
|
|
||||||
skipLockOnUnload();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
const handleOpenTipsChat = useLastCallback(() => {
|
const handleOpenTipsChat = useLastCallback(() => {
|
||||||
@ -378,7 +374,7 @@ const LeftMainHeader: FC<OwnProps & StateProps> = ({
|
|||||||
<MenuItem
|
<MenuItem
|
||||||
icon="K"
|
icon="K"
|
||||||
isCharIcon
|
isCharIcon
|
||||||
href={WEBK_VERSION_URL}
|
href={`${WEB_VERSION_BASE}k`}
|
||||||
onClick={handleSwitchToWebK}
|
onClick={handleSwitchToWebK}
|
||||||
>
|
>
|
||||||
Switch to K Version
|
Switch to K Version
|
||||||
@ -394,9 +390,8 @@ const LeftMainHeader: FC<OwnProps & StateProps> = ({
|
|||||||
)}
|
)}
|
||||||
</>
|
</>
|
||||||
), [
|
), [
|
||||||
animationLevelValue, archivedUnreadChatsCount, canInstall, handleAnimationLevelChange, handleBugReportClick, lang,
|
animationLevelValue, archiveSettings.isHidden, archivedUnreadChatsCount, canInstall, lang, onSelectArchived,
|
||||||
handleChangelogClick, handleDarkModeToggle, handleOpenTipsChat, handleSelectSaved, handleSwitchToWebK,
|
onSelectContacts, onSelectSettings, theme, withOtherVersions,
|
||||||
onSelectArchived, onSelectContacts, onSelectSettings, theme, withOtherVersions, archiveSettings,
|
|
||||||
]);
|
]);
|
||||||
|
|
||||||
const searchContent = useMemo(() => {
|
const searchContent = useMemo(() => {
|
||||||
|
|||||||
@ -6,6 +6,7 @@ export const RELEASE_DATETIME = process.env.RELEASE_DATETIME;
|
|||||||
|
|
||||||
export const PRODUCTION_HOSTNAME = 'web.telegram.org';
|
export const PRODUCTION_HOSTNAME = 'web.telegram.org';
|
||||||
export const PRODUCTION_URL = 'https://web.telegram.org/a';
|
export const PRODUCTION_URL = 'https://web.telegram.org/a';
|
||||||
|
export const WEB_VERSION_BASE = 'https://web.telegram.org/'; // Used to redirect to other versions
|
||||||
|
|
||||||
export const IS_MOCKED_CLIENT = process.env.APP_MOCKED_CLIENT === '1';
|
export const IS_MOCKED_CLIENT = process.env.APP_MOCKED_CLIENT === '1';
|
||||||
export const IS_TEST = process.env.APP_ENV === 'test';
|
export const IS_TEST = process.env.APP_ENV === 'test';
|
||||||
|
|||||||
@ -15,6 +15,7 @@ import { enableStrict, requestMutation } from './lib/fasterdom/fasterdom';
|
|||||||
import { selectTabState } from './global/selectors';
|
import { selectTabState } from './global/selectors';
|
||||||
import { establishMultitabRole, subscribeToMasterChange } from './util/establishMultitabRole';
|
import { establishMultitabRole, subscribeToMasterChange } from './util/establishMultitabRole';
|
||||||
import { requestGlobal, subscribeToMultitabBroadcastChannel } from './util/multitab';
|
import { requestGlobal, subscribeToMultitabBroadcastChannel } from './util/multitab';
|
||||||
|
import { checkAndAssignPermanentWebVersion } from './util/permanentWebVersion';
|
||||||
import { onBeforeUnload } from './util/schedulers';
|
import { onBeforeUnload } from './util/schedulers';
|
||||||
import updateWebmanifest from './util/updateWebmanifest';
|
import updateWebmanifest from './util/updateWebmanifest';
|
||||||
import { IS_MULTITAB_SUPPORTED } from './util/windowEnvironment';
|
import { IS_MULTITAB_SUPPORTED } from './util/windowEnvironment';
|
||||||
@ -37,6 +38,8 @@ async function init() {
|
|||||||
|
|
||||||
if (!(window as any).isCompatTestPassed) return;
|
if (!(window as any).isCompatTestPassed) return;
|
||||||
|
|
||||||
|
checkAndAssignPermanentWebVersion();
|
||||||
|
|
||||||
if (IS_MULTITAB_SUPPORTED) {
|
if (IS_MULTITAB_SUPPORTED) {
|
||||||
subscribeToMultitabBroadcastChannel();
|
subscribeToMultitabBroadcastChannel();
|
||||||
|
|
||||||
|
|||||||
@ -1,5 +1,7 @@
|
|||||||
import BigInt from 'big-integer';
|
import BigInt from 'big-integer';
|
||||||
|
|
||||||
|
import type TelegramClient from './TelegramClient';
|
||||||
|
|
||||||
import Deferred from '../../../util/Deferred';
|
import Deferred from '../../../util/Deferred';
|
||||||
import { Foreman } from '../../../util/foreman';
|
import { Foreman } from '../../../util/foreman';
|
||||||
import errors from '../errors';
|
import errors from '../errors';
|
||||||
@ -7,7 +9,6 @@ import Api from '../tl/api';
|
|||||||
|
|
||||||
import { sleep } from '../Helpers';
|
import { sleep } from '../Helpers';
|
||||||
import { getDownloadPartSize } from '../Utils';
|
import { getDownloadPartSize } from '../Utils';
|
||||||
import type TelegramClient from './TelegramClient';
|
|
||||||
|
|
||||||
interface OnProgress {
|
interface OnProgress {
|
||||||
isCanceled?: boolean;
|
isCanceled?: boolean;
|
||||||
|
|||||||
@ -1,7 +1,57 @@
|
|||||||
|
import { getActions } from '../global';
|
||||||
|
|
||||||
|
import { PRODUCTION_HOSTNAME, WEB_VERSION_BASE } from '../config';
|
||||||
|
import { clearWebsync } from './websync';
|
||||||
|
|
||||||
|
const SEARCH_ENGINE_REFERRERS = ['google', 'bing', 'duckduckgo', 'ya', 'yandex'];
|
||||||
// Handled by the legacy version. Cannot be updated
|
// Handled by the legacy version. Cannot be updated
|
||||||
const PERMANENT_VERSION_KEY = 'kz_version';
|
const PERMANENT_VERSION_KEY = 'kz_version';
|
||||||
const AVAILABLE_VERSIONS = ['Z', 'K'] as const;
|
const AVAILABLE_VERSIONS = ['Z', 'K'] as const;
|
||||||
|
const CLIENT_VERSION = 'Z';
|
||||||
|
type AvailableVersions = typeof AVAILABLE_VERSIONS[number];
|
||||||
|
|
||||||
export function setPermanentWebVersion(version: typeof AVAILABLE_VERSIONS[number]) {
|
function setPermanentWebVersion(version: AvailableVersions) {
|
||||||
localStorage.setItem(PERMANENT_VERSION_KEY, JSON.stringify(version));
|
localStorage.setItem(PERMANENT_VERSION_KEY, JSON.stringify(version));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function getPermanentWebVersion(): AvailableVersions | undefined {
|
||||||
|
const version = localStorage.getItem(PERMANENT_VERSION_KEY);
|
||||||
|
if (version) {
|
||||||
|
return JSON.parse(version);
|
||||||
|
}
|
||||||
|
|
||||||
|
return undefined;
|
||||||
|
}
|
||||||
|
|
||||||
|
export function switchPermanentWebVersion(version: AvailableVersions) {
|
||||||
|
setPermanentWebVersion(version);
|
||||||
|
clearWebsync();
|
||||||
|
getActions().skipLockOnUnload();
|
||||||
|
window.location.assign(`${WEB_VERSION_BASE}${version}`);
|
||||||
|
}
|
||||||
|
|
||||||
|
export function checkAndAssignPermanentWebVersion() {
|
||||||
|
if (window.location.hostname !== PRODUCTION_HOSTNAME) return;
|
||||||
|
|
||||||
|
const referrer = document.referrer.toLowerCase();
|
||||||
|
if (!SEARCH_ENGINE_REFERRERS.some((engine) => referrer.match(`(\\/\\/:|\\.)${engine}\\.`))) return;
|
||||||
|
|
||||||
|
const currentVersion = getPermanentWebVersion();
|
||||||
|
if (currentVersion) {
|
||||||
|
if (currentVersion !== CLIENT_VERSION) {
|
||||||
|
switchPermanentWebVersion(currentVersion);
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const urlParams = new URLSearchParams(window.location.search);
|
||||||
|
const hasTest = (urlParams.get('test') ?? undefined) !== undefined;
|
||||||
|
const shouldRedirect = Math.random() < 0.5;
|
||||||
|
|
||||||
|
if (hasTest || !shouldRedirect) {
|
||||||
|
setPermanentWebVersion('Z');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
switchPermanentWebVersion('K');
|
||||||
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user