62 lines
2.2 KiB
TypeScript
62 lines
2.2 KiB
TypeScript
// (C) Copyright 2015 Moodle Pty Ltd.
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
import { Injectable } from '@angular/core';
|
|
import { makeSingleton } from '@singletons';
|
|
import { CoreConfig } from './config';
|
|
import { CoreNative } from '@features/native/services/native';
|
|
|
|
/**
|
|
* Manage referrers.
|
|
*/
|
|
@Injectable({ providedIn: 'root' })
|
|
export class CoreReferrerService {
|
|
|
|
protected static readonly INSTALL_REFERRER_CONSUMED = 'install_referrer_consumed';
|
|
|
|
/**
|
|
* Consume the install referrer URL (Android only).
|
|
* This function will try to retrieve the siteurl supplied as referrer to Google Play.
|
|
*
|
|
* @returns Referrer URL, undefined if not supported, already consumed or no referrer URL.
|
|
*/
|
|
async consumeInstallReferrerUrl(): Promise<string | undefined> {
|
|
const installReferrerPlugin = CoreNative.plugin('installReferrer');
|
|
if (!installReferrerPlugin) {
|
|
return;
|
|
}
|
|
|
|
// Only get the referrer URL once, it's only needed when the app is installed.
|
|
const referredConsumed = await CoreConfig.get(CoreReferrerService.INSTALL_REFERRER_CONSUMED, 0);
|
|
if (referredConsumed) {
|
|
return;
|
|
}
|
|
|
|
try {
|
|
const result = await installReferrerPlugin.getReferrer();
|
|
|
|
const siteUrlMatch = (result.referrer ?? '').match(/siteurl=([^&]+)/);
|
|
|
|
return siteUrlMatch?.[1];
|
|
} catch {
|
|
// Error getting referrer, it probably means Google Play is not available.
|
|
} finally {
|
|
await CoreConfig.set(CoreReferrerService.INSTALL_REFERRER_CONSUMED, 1);
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
export const CoreReferrer = makeSingleton(CoreReferrerService);
|