MinaSamir11 / react-native-in-app-review

The Google Play In-App Review API, App store rating API lets you prompt users to submit Play Store or App store ratings and reviews without the inconvenience of leaving your app or game.
MIT License
646 stars 56 forks source link

[React Native] [Android] - No activity found to handle intent act=com.huawei.appmarket.intent.action.guidecomment pkg=com.huawei.appmarket #157

Open wellespaiva-dev opened 10 months ago

wellespaiva-dev commented 10 months ago

Hello, I'm implementing the 'react-native-in-app-review' lib in my app, I did the android configuration following these steps but I'm getting the following error when calling the 'requestInAppCommentAppGallery' function: No activity found to handle intent act=com.huawei.appmarket.intent.action.guidecomment pkg=com.huawei.appmarket

How should I proceed?

Below are the implementation codes.

package.json: { "dependencies": { "@react-native-async-storage/async-storage": "^1.17.10", "@react-native-clipboard/clipboard": "^1.11.1", "@react-native-community/checkbox": "^0.5.15", "@react-native-community/picker": "^1.8.1", "@react-navigation/drawer": "^6.4.4", "@react-navigation/native": "^6.0.12", "@react-navigation/native-stack": "^6.8.0", "axios": "^0.27.2", "date-fns": "^2.29.3", "flipper-plugin-redux-debugger": "^2.0.1", "jail-monkey": "^2.8.0", "lodash": "^4.17.21", "lodash.memoize": "^4.1.2", "obfuscator-io-metro-plugin": "^2.1.2", "react": "18.0.0", "react-native": "0.69.7", "react-native-biometrics": "^3.0.1", "react-native-config": "^1.4.6", "react-native-confirmation-code-field": "^7.3.0", "react-native-currency-input": "^1.1.0", "react-native-device-info": "^10.2.0", "react-native-flipper": "^0.177.0", "react-native-fs": "^2.20.0", "react-native-gesture-handler": "^2.6.0", "react-native-in-app-review": "^4.3.3", "react-native-keychain": "^8.1.1", "react-native-kill-app": "^1.0.4", "react-native-linear-gradient": "^2.6.2", "react-native-paper": "^4.12.4", "react-native-permissions": "^3.6.1", "react-native-picker-select": "^8.0.4", "react-native-popover-view": "^5.1.7", "react-native-portalize": "^1.0.7", "react-native-reanimated": "^2.12.0", "react-native-safe-area-context": "^4.3.3", "react-native-screens": "^3.17.0", "react-native-screenshot-prevent": "^1.1.1", "react-native-share": "^8.2.0", "react-native-share-pdf": "^0.0.6", "react-native-snap-carousel": "^3.9.1", "react-native-splash-screen": "^3.3.0", "react-native-svg": "^13.1.0", "react-native-vector-icons": "^9.2.0", "react-native-webview": "^12.1.0", "react-navigation-backhandler": "^2.0.1", "react-redux": "^8.0.2", "redux": "^4.2.0", "redux-flipper": "^2.0.2", "redux-persist": "^6.0.0", "redux-saga": "^1.2.1", "reduxsauce": "^1.2.1", "rn-fetch-blob": "^0.12.0", "styled-components": "^5.3.5", "styled-theming": "^2.2.0", "yarn": "^1.22.19" }, }

Arquivo.js: `import InAppReview from 'react-native-in-app-review'; const AvaliablePod = () => { if (InAppReview.isAvailable()) { InAppReview.RequestInAppReview() .then((hasFlowFinishedSuccessfully) => { if (hasFlowFinishedSuccessfully) { InAppReview.requestInAppCommentAppGallery() .then((resultCode) => { console.log('in app comment app gallery', resultCode); }) .catch((error) => { console.log('AQUI', error); }); } .catch((error) => { console.log(error); }); } };

useEffect(() => { if (isFocused) { AvaliablePod(); }

return () => cleanState();

}, []);`

android/build.gradle: `import org.apache.tools.ant.taskdefs.condition.Os

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript { } repositories { google() mavenCentral() maven { url("https://developer.huawei.com/repo/") } } dependencies { classpath("com.android.tools.build:gradle:7.1.1") classpath("com.facebook.react:react-native-gradle-plugin") classpath("de.undercouch:gradle-download-task:5.0.1") classpath 'com.huawei.agconnect:agcp:1.6.0.300' } }

allprojects { repositories { maven { // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm url("$rootDir/../node_modules/react-native/android") } maven { // Android JSC is installed from npm url("$rootDir/../node_modules/jsc-android/dist") } maven { url("https://developer.huawei.com/repo/") } mavenCentral { // We don't want to fetch react-native from Maven Central as there are // older versions over there. content { excludeGroup "com.facebook.react" } } exclusiveContent { filter { includeGroup "com.facebook.react" } forRepository { maven { url "$rootDir/../node_modules/react-native/android" } } } google() maven { url 'https://www.jitpack.io' } } } `

android/app/build.gradle:

apply plugin: "com.android.application" apply from: project(":react-native-config").projectDir.getPath() + "/dotenv.gradle" apply plugin: "com.huawei.agconnect"

import com.android.build.OutputFile

/**

project.ext.react = [ enableHermes: false, // clean and rebuild if changing ]

apply from: "../../node_modules/react-native/react.gradle"

/**

/**

/**

/**

/**

android { ndkVersion rootProject.ext.ndkVersion

compileSdkVersion rootProject.ext.compileSdkVersion

defaultConfig {
    applicationId "br.com.alelo.alelopod.android"
    minSdkVersion rootProject.ext.minSdkVersion
    targetSdkVersion rootProject.ext.targetSdkVersion
    versionCode 1
    versionName "1.1.1"
    buildConfigField "boolean", "IS_NEW_ARCHITECTURE_ENABLED", isNewArchitectureEnabled().toString()

    if (isNewArchitectureEnabled()) {
        // We configure the NDK build only if you decide to opt-in for the New Architecture.
        externalNativeBuild {
            ndkBuild {
                arguments "APP_PLATFORM=android-21",
                    "APP_STL=c++_shared",
                    "NDK_TOOLCHAIN_VERSION=clang",
                    "GENERATED_SRC_DIR=$buildDir/generated/source",
                    "PROJECT_BUILD_DIR=$buildDir",
                    "REACT_ANDROID_DIR=$rootDir/../node_modules/react-native/ReactAndroid",
                    "REACT_ANDROID_BUILD_DIR=$rootDir/../node_modules/react-native/ReactAndroid/build",
                    "NODE_MODULES_DIR=$rootDir/../node_modules"
                cFlags "-Wall", "-Werror", "-fexceptions", "-frtti", "-DWITH_INSPECTOR=1"
                cppFlags "-std=c++17"
                // Make sure this target name is the same you specify inside the
                // src/main/jni/Android.mk file for the `LOCAL_MODULE` variable.
                targets "alelo_appmodules"
            }
        }
        if (!enableSeparateBuildPerCPUArchitecture) {
            ndk {
                abiFilters (*reactNativeArchitectures())
            }
        }
    }
    resValue "string", "build_config_package", "br.com.alelo.alelopod.android"
}

if (isNewArchitectureEnabled()) {
    // We configure the NDK build only if you decide to opt-in for the New Architecture.
    externalNativeBuild {
        ndkBuild {
            path "$projectDir/src/main/jni/Android.mk"
        }
    }
    def reactAndroidProjectDir = project(':ReactAndroid').projectDir
    def packageReactNdkDebugLibs = tasks.register("packageReactNdkDebugLibs", Copy) {
        dependsOn(":ReactAndroid:packageReactNdkDebugLibsForBuck")
        from("$reactAndroidProjectDir/src/main/jni/prebuilt/lib")
        into("$buildDir/react-ndk/exported")
    }
    def packageReactNdkReleaseLibs = tasks.register("packageReactNdkReleaseLibs", Copy) {
        dependsOn(":ReactAndroid:packageReactNdkReleaseLibsForBuck")
        from("$reactAndroidProjectDir/src/main/jni/prebuilt/lib")
        into("$buildDir/react-ndk/exported")
    }
    afterEvaluate {
        // If you wish to add a custom TurboModule or component locally,
        // you should uncomment this line.
        // preBuild.dependsOn("generateCodegenArtifactsFromSchema")
        preDebugBuild.dependsOn(packageReactNdkDebugLibs)
        preReleaseBuild.dependsOn(packageReactNdkReleaseLibs)

        // Due to a bug inside AGP, we have to explicitly set a dependency
        // between configureNdkBuild* tasks and the preBuild tasks.
        // This can be removed once this is solved: https://issuetracker.google.com/issues/207403732
        configureNdkBuildRelease.dependsOn(preReleaseBuild)
        configureNdkBuildDebug.dependsOn(preDebugBuild)
        reactNativeArchitectures().each { architecture ->
            tasks.findByName("configureNdkBuildDebug[${architecture}]")?.configure {
                dependsOn("preDebugBuild")
            }
            tasks.findByName("configureNdkBuildRelease[${architecture}]")?.configure {
                dependsOn("preReleaseBuild")
            }
        }
    }
}

splits {
    abi {
        reset()
        enable enableSeparateBuildPerCPUArchitecture
        universalApk false  // If true, also generate a universal APK
        include (*reactNativeArchitectures())
    }
}
signingConfigs {
    // debug {
    //     storeFile file('debug.keystore')
    //     storePassword 'android'
    //     keyAlias 'androiddebugkey'
    //     keyPassword 'android'
    // }

    // release {
    //     if (project.hasProperty('MYAPP_UPLOAD_STORE_FILE')) {
    //         storeFile file(MYAPP_UPLOAD_STORE_FILE)
    //         storePassword MYAPP_UPLOAD_STORE_PASSWORD
    //         keyAlias MYAPP_UPLOAD_KEY_ALIAS
    //         keyPassword MYAPP_UPLOAD_KEY_PASSWORD
    //     }
    // }
}
buildTypes {
    debug {
        // signingConfig signingConfigs.debug
    }
    release {
        // Caution! In production, you need to generate your own keystore file.
        // see https://reactnative.dev/docs/signed-apk-android.
        // signingConfig signingConfigs.debug

        // debuggable false
        // shrinkResources enableProguardInReleaseBuilds
        // minifyEnabled enableProguardInReleaseBuilds
        proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
    }
}

flavorDimensions "config"

productFlavors {
    staging {
        dimension "config"
        applicationId "br.com.alelo.alelopod.android"
    }
    hml {
        dimension "config"
        applicationId "br.com.alelo.alelopod.android"
    }
    production {
        dimension "config"
        applicationId "br.com.alelo.alelopod.android"
    }
}

// applicationVariants are e.g. debug, release
applicationVariants.all { variant ->
    variant.outputs.each { output ->
        // For each separate APK per architecture, set a unique version code as described here:
        // https://developer.android.com/studio/build/configure-apk-splits.html
        // Example: versionCode 1 will generate 1001 for armeabi-v7a, 1002 for x86, etc.
        def versionCodes = ["armeabi-v7a": 1, "x86": 2, "arm64-v8a": 3, "x86_64": 4]
        def abi = output.getFilter(OutputFile.ABI)
        if (abi != null) {  // null for the universal-debug, universal-release variants
            output.versionCodeOverride =
                    defaultConfig.versionCode * 1000 + versionCodes.get(abi)
        }

    }
}

}

dependencies { implementation fileTree(dir: "libs", include: ["*.jar"])

//noinspection GradleDynamicVersion
implementation "com.facebook.react:react-native:+"  // From node_modules

implementation "androidx.swiperefreshlayout:swiperefreshlayout:1.0.0"

debugImplementation("com.facebook.flipper:flipper:${FLIPPER_VERSION}") {
    exclude group:'com.facebook.fbjni'
}

debugImplementation("com.facebook.flipper:flipper-network-plugin:${FLIPPER_VERSION}") {
    exclude group:'com.facebook.flipper'
    exclude group:'com.squareup.okhttp3', module:'okhttp'
}

debugImplementation("com.facebook.flipper:flipper-fresco-plugin:${FLIPPER_VERSION}") {
    exclude group:'com.facebook.flipper'
}

if (enableHermes) {
    //noinspection GradleDynamicVersion
    implementation("com.facebook.react:hermes-engine:+") { // From node_modules
        exclude group:'com.facebook.fbjni'
    }
} else {
    implementation jscFlavor
}

}

if (isNewArchitectureEnabled()) { // If new architecture is enabled, we let you build RN from source // Otherwise we fallback to a prebuilt .aar bundled in the NPM package. // This will be applied to all the imported transtitive dependency. configurations.all { resolutionStrategy.dependencySubstitution { substitute(module("com.facebook.react:react-native")) .using(project(":ReactAndroid")) .because("On New Architecture we're building React Native from source") substitute(module("com.facebook.react:hermes-engine")) .using(project(":ReactAndroid:hermes-engine")) .because("On New Architecture we're building Hermes from source") } } }

// Run this once to be able to run the application with BUCK // puts all compile dependencies into folder libs for BUCK to use task copyDownloadableDepsToLibs(type: Copy) { from configurations.implementation into 'libs' }

apply from: file("../../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesAppBuildGradle(project)

def isNewArchitectureEnabled() { // To opt-in for the New Architecture, you can either: // - Set newArchEnabled to true inside the gradle.properties file // - Invoke gradle with -newArchEnabled=true // - Set an environment variable ORG_GRADLE_PROJECT_newArchEnabled=true return project.hasProperty("newArchEnabled") && project.newArchEnabled == "true" } `

MinaSamir11 commented 9 months ago

are you running your app on a HUAWEI phone?

BogdanRad commented 5 months ago

Hi @MinaSamir11, I have this problem when call this requestInAppCommentAppGallery.

I have "react-native-in-app-review": "^4.3.3"

See please my video: https://streamable.com/z5yg0t