Skip to content
New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

[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 this issue Sep 5, 2023 · 4 comments

Comments

@wellespaiva-dev
Copy link

wellespaiva-dev commented Sep 5, 2023

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

/**

  • The react.gradle file registers a task for each build variant (e.g. bundleDebugJsAndAssets
  • and bundleReleaseJsAndAssets).
  • These basically call react-native bundle with the correct arguments during the Android build
  • cycle. By default, bundleDebugJsAndAssets is skipped, as in debug/dev mode we prefer to load the
  • bundle directly from the development server. Below you can see all the possible configurations
  • and their defaults. If you decide to add a configuration block, make sure to add it before the
  • apply from: "../../node_modules/react-native/react.gradle" line.
  • project.ext.react = [
  • // the name of the generated asset file containing your JS bundle
  • bundleAssetName: "index.android.bundle",
  • // the entry file for bundle generation. If none specified and
  • // "index.android.js" exists, it will be used. Otherwise "index.js" is
  • // default. Can be overridden with ENTRY_FILE environment variable.
  • entryFile: "index.android.js",
  • // https://reactnative.dev/docs/performance#enable-the-ram-format
  • bundleCommand: "ram-bundle",
  • // whether to bundle JS and assets in debug mode
  • bundleInDebug: false,
  • // whether to bundle JS and assets in release mode
  • bundleInRelease: true,
  • // whether to bundle JS and assets in another build variant (if configured).
  • // See http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Build-Variants
  • // The configuration property can be in the following formats
  • // 'bundleIn${productFlavor}${buildType}'
  • // 'bundleIn${buildType}'
  • // bundleInFreeDebug: true,
  • // bundleInPaidRelease: true,
  • // bundleInBeta: true,
  • // whether to disable dev mode in custom build variants (by default only disabled in release)
  • // for example: to disable dev mode in the staging build type (if configured)
  • devDisabledInStaging: true,
  • // The configuration property can be in the following formats
  • // 'devDisabledIn${productFlavor}${buildType}'
  • // 'devDisabledIn${buildType}'
  • // the root of your project, i.e. where "package.json" lives
  • root: "../../",
  • // where to put the JS bundle asset in debug mode
  • jsBundleDirDebug: "$buildDir/intermediates/assets/debug",
  • // where to put the JS bundle asset in release mode
  • jsBundleDirRelease: "$buildDir/intermediates/assets/release",
  • // where to put drawable resources / React Native assets, e.g. the ones you use via
  • // require('./image.png')), in debug mode
  • resourcesDirDebug: "$buildDir/intermediates/res/merged/debug",
  • // where to put drawable resources / React Native assets, e.g. the ones you use via
  • // require('./image.png')), in release mode
  • resourcesDirRelease: "$buildDir/intermediates/res/merged/release",
  • // by default the gradle tasks are skipped if none of the JS files or assets change; this means
  • // that we don't look at files in android/ or ios/ to determine whether the tasks are up to
  • // date; if you have any other folders that you want to ignore for performance reasons (gradle
  • // indexes the entire tree), add them here. Alternatively, if you have JS files in android/
  • // for example, you might want to remove it from here.
  • inputExcludes: ["android/", "ios/"],
  • // override which node gets called and with what additional arguments
  • nodeExecutableAndArgs: ["node"],
  • // supply additional arguments to the packager
  • extraPackagerArgs: []
  • ]
    */

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

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

/**

  • Set this to true to create two separate APKs instead of one:
    • An APK that only works on ARM devices
    • An APK that only works on x86 devices
  • The advantage is the size of the APK is reduced by about 4MB.
  • Upload all the APKs to the Play Store and people will download
  • the correct one based on the CPU architecture of their device.
    */
    def enableSeparateBuildPerCPUArchitecture = false

/**

  • Run Proguard to shrink the Java bytecode in release builds.
    */
    def enableProguardInReleaseBuilds = true

/**

  • The preferred build flavor of JavaScriptCore.
  • For example, to use the international variant, you can use:
  • def jscFlavor = 'org.webkit:android-jsc-intl:+'
  • The international variant includes ICU i18n library and necessary data
  • allowing to use e.g. Date.toLocaleString and String.localeCompare that
  • give correct results when using with locales other than en-US. Note that
  • this variant is about 6MiB larger per architecture than default.
    */
    def jscFlavor = 'org.webkit:android-jsc:+'

/**

  • Whether to enable the Hermes VM.
  • This should be set on project.ext.react and that value will be read here. If it is not set
  • on project.ext.react, JavaScript will not be compiled to Hermes Bytecode
  • and the benefits of using Hermes will therefore be sharply reduced.
    */
    def enableHermes = project.ext.react.get("enableHermes", false);

/**

  • Architectures to build native code for.
    */
    def reactNativeArchitectures() {
    def value = project.getProperties().get("reactNativeArchitectures")
    return value ? value.split(",") : ["armeabi-v7a", "x86", "x86_64", "arm64-v8a"]
    }

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
Copy link
Owner

are you running your app on a HUAWEI phone?

@BogdanRad
Copy link

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

@MCvanderBerg
Copy link

Hi @BogdanRad did you find a solution to this problem?
I'm currently facing the same issue on 4.3.3

@BogdanRad
Copy link

Hi @BogdanRad did you find a solution to this problem? I'm currently facing the same issue on 4.3.3

@MCvanderBerg no... I disabled on huawei

# for free to join this conversation on GitHub. Already have an account? # to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants