* add new module for referrer api * add dependency * rm boiler * return the result * end connection when finished * add js types
This commit is contained in:
@@ -0,0 +1,47 @@
|
|||||||
|
apply plugin: 'com.android.library'
|
||||||
|
|
||||||
|
group = 'expo.modules.googleplayreferrer'
|
||||||
|
version = '0.6.0'
|
||||||
|
|
||||||
|
def expoModulesCorePlugin = new File(project(":expo-modules-core").projectDir.absolutePath, "ExpoModulesCorePlugin.gradle")
|
||||||
|
apply from: expoModulesCorePlugin
|
||||||
|
applyKotlinExpoModulesCorePlugin()
|
||||||
|
useCoreDependencies()
|
||||||
|
useExpoPublishing()
|
||||||
|
|
||||||
|
// If you want to use the managed Android SDK versions from expo-modules-core, set this to true.
|
||||||
|
// The Android SDK versions will be bumped from time to time in SDK releases and may introduce breaking changes in your module code.
|
||||||
|
// Most of the time, you may like to manage the Android SDK versions yourself.
|
||||||
|
def useManagedAndroidSdkVersions = false
|
||||||
|
if (useManagedAndroidSdkVersions) {
|
||||||
|
useDefaultAndroidSdkVersions()
|
||||||
|
} else {
|
||||||
|
buildscript {
|
||||||
|
// Simple helper that allows the root project to override versions declared by this library.
|
||||||
|
ext.safeExtGet = { prop, fallback ->
|
||||||
|
rootProject.ext.has(prop) ? rootProject.ext.get(prop) : fallback
|
||||||
|
}
|
||||||
|
}
|
||||||
|
project.android {
|
||||||
|
compileSdkVersion safeExtGet("compileSdkVersion", 34)
|
||||||
|
defaultConfig {
|
||||||
|
minSdkVersion safeExtGet("minSdkVersion", 21)
|
||||||
|
targetSdkVersion safeExtGet("targetSdkVersion", 34)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
android {
|
||||||
|
namespace "expo.modules.googleplayreferrer"
|
||||||
|
defaultConfig {
|
||||||
|
versionCode 1
|
||||||
|
versionName "0.6.0"
|
||||||
|
}
|
||||||
|
lintOptions {
|
||||||
|
abortOnError false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
dependencies {
|
||||||
|
implementation("com.android.installreferrer:installreferrer:2.2")
|
||||||
|
}
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
<manifest>
|
||||||
|
</manifest>
|
||||||
+47
@@ -0,0 +1,47 @@
|
|||||||
|
package expo.modules.googleplayreferrer
|
||||||
|
|
||||||
|
import com.android.installreferrer.api.InstallReferrerClient
|
||||||
|
import com.android.installreferrer.api.InstallReferrerStateListener
|
||||||
|
import expo.modules.kotlin.modules.Module
|
||||||
|
import expo.modules.kotlin.modules.ModuleDefinition
|
||||||
|
import expo.modules.kotlin.Promise
|
||||||
|
|
||||||
|
class ExpoGooglePlayReferrerModule : Module() {
|
||||||
|
override fun definition() = ModuleDefinition {
|
||||||
|
Name("ExpoGooglePlayReferrer")
|
||||||
|
|
||||||
|
AsyncFunction("getReferrerInfoAsync") { promise: Promise ->
|
||||||
|
val referrerClient = InstallReferrerClient.newBuilder(appContext.reactContext).build()
|
||||||
|
referrerClient.startConnection(object : InstallReferrerStateListener {
|
||||||
|
override fun onInstallReferrerSetupFinished(responseCode: Int) {
|
||||||
|
if (responseCode == InstallReferrerClient.InstallReferrerResponse.OK) {
|
||||||
|
val response = referrerClient.installReferrer
|
||||||
|
promise.resolve(
|
||||||
|
mapOf(
|
||||||
|
"installReferrer" to response.installReferrer,
|
||||||
|
"clickTimestamp" to response.referrerClickTimestampSeconds,
|
||||||
|
"installTimestamp" to response.installBeginTimestampSeconds
|
||||||
|
)
|
||||||
|
)
|
||||||
|
} else {
|
||||||
|
promise.reject(
|
||||||
|
"ERR_GOOGLE_PLAY_REFERRER_UNKNOWN",
|
||||||
|
"Failed to get referrer info",
|
||||||
|
Exception("Failed to get referrer info")
|
||||||
|
)
|
||||||
|
}
|
||||||
|
referrerClient.endConnection()
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onInstallReferrerServiceDisconnected() {
|
||||||
|
promise.reject(
|
||||||
|
"ERR_GOOGLE_PLAY_REFERRER_DISCONNECTED",
|
||||||
|
"Failed to get referrer info",
|
||||||
|
Exception("Failed to get referrer info")
|
||||||
|
)
|
||||||
|
referrerClient.endConnection()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
{
|
||||||
|
"platforms": ["android"],
|
||||||
|
"ios": {
|
||||||
|
"modules": ["ExpoGooglePlayReferrerModule"]
|
||||||
|
},
|
||||||
|
"android": {
|
||||||
|
"modules": ["expo.modules.googleplayreferrer.ExpoGooglePlayReferrerModule"]
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
import {GooglePlayReferrerModule} from './src/ExpoGooglePlayReferrerModule'
|
||||||
|
|
||||||
|
export default GooglePlayReferrerModule
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
export type GooglePlayReferrerInfo = {
|
||||||
|
installReferrer: string
|
||||||
|
clickTimestamp: number
|
||||||
|
installTimestamp: number
|
||||||
|
}
|
||||||
|
|
||||||
|
export type ExpoGooglePlayReferrerModule = {
|
||||||
|
getReferrerInfoAsync(): Promise<GooglePlayReferrerInfo>
|
||||||
|
}
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
import {requireNativeModule} from 'expo-modules-core'
|
||||||
|
|
||||||
|
import {ExpoGooglePlayReferrerModule} from './ExpoGooglePlayReferrer.types'
|
||||||
|
|
||||||
|
export const BackgroundNotificationHandler =
|
||||||
|
requireNativeModule<ExpoGooglePlayReferrerModule>('ExpoGooglePlayReferrer')
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
import {
|
||||||
|
ExpoGooglePlayReferrerModule,
|
||||||
|
GooglePlayReferrerInfo,
|
||||||
|
} from './ExpoGooglePlayReferrer.types'
|
||||||
|
|
||||||
|
export const GooglePlayReferrerModule = {
|
||||||
|
getReferrerInfoAsync(): Promise<GooglePlayReferrerInfo> {
|
||||||
|
console.error('getReferrerInfoAsync is only available on Android')
|
||||||
|
return Promise.reject('getReferrerInfoAsync is only available on Android')
|
||||||
|
},
|
||||||
|
} as ExpoGooglePlayReferrerModule
|
||||||
Reference in New Issue
Block a user