Code Monkey home page Code Monkey logo

app_review's Introduction

Flutter Community: app_review

Buy Me A Coffee Donate github pages GitHub stars app_review

app_review

alt text

Online Demo: https://fluttercommunity.github.io/app_review/

Description

Flutter Plugin for Requesting and Writing Reviews in Google Play and the App Store. Apps have to be published for the app to be found correctly.

How To Use

It's important to note that the App ID must match the App ID in Google Play and iTunes Connect. This can be changed in the Info.plist on iOS and app/build.gradle on Android. You will use this App ID for other services like Firebase, Admob and publishing the app.

Android

Opens In App Review but only if Play Services are installed on the device and the App is downloaded through the Play Store. Check out the official documentation.

iOS

iOS manages the pop-up requesting review within an app. You can call the code through AppReview.requestReview and if the user has "rate in apps" turned on, iOS will send "the request for the review" pop up. This is the required way for requesting reviews after iOS 10.3.

In debug mode it will always display. In apps through TestFlight, the AppReview.requestReview does nothing.

import 'dart:io';
import 'package:app_review/app_review.dart';
import 'package:flutter/material.dart';

  @override
  void initState() {
    super.initState();
    if (Platform.isIOS) {
      AppReview.requestReview.then((onValue) {
        print(onValue);
      });
    }
  }

What is onValue value?

Just a sanity check to make sure there were no errors.

Android

You could store a timestamp to know when to call again.

iOS

It doesn't really matter.

app_review's People

Contributors

altotunchitoo avatar andreidiaconu avatar britannio avatar erf avatar fbcouch avatar greymag avatar icodesign avatar jeroen-meijer avatar lucalves avatar maddyb99 avatar mihiron avatar robin-jw avatar rodydavis avatar shaun0203 avatar shinriyo avatar shinsenter avatar suztomo avatar tattn avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

app_review's Issues

Not compatible with package_info_plus 3.0.0

Because every version of project from git depends on package_info_plus ^3.0.0 and app_review 2.1.2+1 depends on package_info_plus ^1.0.0, project from git is incompatible with app_review 2.1.2+1.

Error in android

i tried new version hoping to get new in-app reviews for android. But I got an error. I am running on emulator api level 29 with google play serve

E/flutter ( 6645): [ERROR:flutter/lib/ui/ui_dart_state.cc(157)] Unhandled Exception: PlatformException(error, Android activity not available, null) E/flutter ( 6645): #0 StandardMethodCodec.decodeEnvelope package:flutter/…/services/message_codecs.dart:569 E/flutter ( 6645): #1 MethodChannel._invokeMethod package:flutter/…/services/platform_channel.dart:156 E/flutter ( 6645): <asynchronous suspension> E/flutter ( 6645): #2 MethodChannel.invokeMethod package:flutter/…/services/platform_channel.dart:329 E/flutter ( 6645): #3 AppReview.isRequestReviewAvailable package:app_review/app_review.dart:58

Example is broken

Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel stable, v1.9.1+hotfix.4, on Linux, locale en_US.UTF-8)

Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel stable, v1.9.1+hotfix.4, on Linux, locale en_US.UTF-8)
[✓] Android toolchain - develop for Android devices (Android SDK version 29.0.2)
[✓] Android Studio (version 3.5)
[✓] VS Code (version 1.35.1)
[✓] Connected device (1 available)

• No issues found!

Steps to reproduce: clone project > open example > run

[ +590 ms] /home/paulo/.gradle/caches/transforms-1/files-1.1/core-1.0.0.aar/a5f6e38458b0d939cde93a6fee2c4982/res/values/values.xml:133:5-70: AAPT: error: resource
android:attr/fontVariationSettings not found.
[ +2 ms] /home/paulo/.gradle/caches/transforms-1/files-1.1/core-1.0.0.aar/a5f6e38458b0d939cde93a6fee2c4982/res/values/values.xml:133:5-70: AAPT: error: resource android:attr/ttcIndex
not found.
[ ] /home/paulo/Workspace/app_review/example/build/app/intermediates/incremental/mergeDebugResources/merged.dir/values/values.xml:87: error: resource
android:attr/fontVariationSettings not found.
[ ] /home/paulo/Workspace/app_review/example/build/app/intermediates/incremental/mergeDebugResources/merged.dir/values/values.xml:87: error: resource android:attr/ttcIndex not
found.
[ +1 ms] error: failed linking references.
[ +52 ms] Failed to execute aapt
[ +1 ms] com.android.ide.common.process.ProcessException: Failed to execute aapt
[ ] at com.android.builder.core.AndroidBuilder.processResources(AndroidBuilder.java:796)
[ ] at com.android.build.gradle.tasks.ProcessAndroidResources.invokeAaptForSplit(ProcessAndroidResources.java:551)
[ +7 ms] at com.android.build.gradle.tasks.ProcessAndroidResources.doFullTaskAction(ProcessAndroidResources.java:285)
[ ] at com.android.build.gradle.internal.tasks.IncrementalTask.taskAction(IncrementalTask.java:109)
[ ] at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:73)
[ ] at org.gradle.api.internal.project.taskfactory.DefaultTaskClassInfoStore$IncrementalTaskAction.doExecute(DefaultTaskClassInfoStore.java:173)
[ ] at org.gradle.api.internal.project.taskfactory.DefaultTaskClassInfoStore$StandardTaskAction.execute(DefaultTaskClassInfoStore.java:134)
[ ] at org.gradle.api.internal.project.taskfactory.DefaultTaskClassInfoStore$StandardTaskAction.execute(DefaultTaskClassInfoStore.java:121)
[ ] at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$1.run(ExecuteActionsTaskExecuter.java:122)
[ ] at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:336)
[ ] at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:328)
[ ] at org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:197)
[ ] at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:107)
[ ] at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:111)
[ +5 ms] at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:92)
[ ] at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:70)
[ ] at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:63)
[ ] at org.gradle.api.internal.tasks.execution.ResolveTaskOutputCachingStateExecuter.execute(ResolveTaskOutputCachingStateExecuter.java:54)
[ ] at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:58)
[ ] at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:88)
[ ] at org.gradle.api.internal.tasks.execution.ResolveTaskArtifactStateTaskExecuter.execute(ResolveTaskArtifactStateTaskExecuter.java:52)
[ ] at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:52)
[ ] at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:54)
[ ] at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)
[ ] at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:34)
[ ] at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker$1.run(DefaultTaskGraphExecuter.java:248)
[ ] at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:336)
[ ] at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:328)
[ ] at org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:197)
[ ] at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:107)
[ ] at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:241)
[ ] at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:230)
[ ] at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.processTask(DefaultTaskPlanExecutor.java:124)
[ ] at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.access$200(DefaultTaskPlanExecutor.java:80)
[ ] at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:105)
[ ] at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:99)
[ ] at org.gradle.execution.taskgraph.DefaultTaskExecutionPlan.execute(DefaultTaskExecutionPlan.java:625)
[ ] at org.gradle.execution.taskgraph.DefaultTaskExecutionPlan.executeWithTask(DefaultTaskExecutionPlan.java:580)
[ ] at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.run(DefaultTaskPlanExecutor.java:99)
[ ] at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
[ ] at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46)
[ ] at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55)
[ ] Caused by: java.util.concurrent.ExecutionException: java.util.concurrent.ExecutionException: com.android.tools.aapt2.Aapt2Exception: AAPT2 error: check logs for details
[ +13 ms] at com.google.common.util.concurrent.AbstractFuture.getDoneValue(AbstractFuture.java:503)
[ ] at com.google.common.util.concurrent.AbstractFuture.get(AbstractFuture.java:482)
[ +1 ms] at com.google.common.util.concurrent.AbstractFuture$TrustedFuture.get(AbstractFuture.java:79)
[ ] at com.android.builder.core.AndroidBuilder.processResources(AndroidBuilder.java:794)
[ ] ... 41 more
[ ] Caused by: java.util.concurrent.ExecutionException: com.android.tools.aapt2.Aapt2Exception: AAPT2 error: check logs for details
[ ] at com.google.common.util.concurrent.AbstractFuture.getDoneValue(AbstractFuture.java:503)
[ ] at com.google.common.util.concurrent.AbstractFuture.get(AbstractFuture.java:462)
[ ] at com.google.common.util.concurrent.AbstractFuture$TrustedFuture.get(AbstractFuture.java:79)
[ ] at com.android.builder.internal.aapt.v2.QueueableAapt2.lambda$makeValidatedPackage$1(QueueableAapt2.java:179)
[ ] Caused by: com.android.tools.aapt2.Aapt2Exception: AAPT2 error: check logs for details
[ ] at com.android.builder.png.AaptProcess$NotifierProcessOutput.handleOutput(AaptProcess.java:463)
[ ] at com.android.builder.png.AaptProcess$NotifierProcessOutput.err(AaptProcess.java:415)
[ ] at com.android.builder.png.AaptProcess$ProcessOutputFacade.err(AaptProcess.java:332)
[ ] at com.android.utils.GrabProcessOutput$1.run(GrabProcessOutput.java:104)
[ ] FAILURE: Build failed with an exception.
[ ] * What went wrong:
[ ] Execution failed for task ':app:processDebugResources'.
[ ] > Failed to execute aapt
[ ] * Try:
[ ] Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.
[ ] * Get more help at https://help.gradle.org
[ ] BUILD FAILED in 9s
[ ] 52 actionable tasks: 5 executed, 47 up-to-date
[ +359 ms] Running Gradle task 'assembleDebug'... (completed in 9.6s)
[ ] *******************************************************************************************
[ ] The Gradle failure may have been because of AndroidX incompatibilities in this Flutter app.
[ ] See https://goo.gl/CP92wY for more information on the problem and how to fix it.
[ ] *******************************************************************************************
[ +4 ms] "flutter run" took 12,955ms.
Gradle task assembleDebug failed with exit code 1

#0 throwToolExit (package:flutter_tools/src/base/common.dart:28:3)
#1 _buildGradleProjectV2 (package:flutter_tools/src/android/gradle.dart:751:5)
#2 _asyncThenWrapperHelper. (dart:async-patch/async_patch.dart:71:64)
#3 _rootRunUnary (dart:async/zone.dart:1132:38)
#4 _CustomZone.runUnary (dart:async/zone.dart:1029:19)
#5 _FutureListener.handleValue (dart:async/future_impl.dart:137:18)
#6 Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:678:45)
#7 Future._propagateToListeners (dart:async/future_impl.dart:707:32)
#8 Future._completeWithValue (dart:async/future_impl.dart:522:5)
#9 _AsyncAwaitCompleter.complete (dart:async-patch/async_patch.dart:30:15)
#10 _completeOnAsyncReturn (dart:async-patch/async_patch.dart:288:13)
#11 runCommandAndStreamOutput (package:flutter_tools/src/base/process.dart)
#12 _asyncThenWrapperHelper. (dart:async-patch/async_patch.dart:71:64)
#13 _rootRunUnary (dart:async/zone.dart:1132:38)
#14 _CustomZone.runUnary (dart:async/zone.dart:1029:19)
#15 _FutureListener.handleValue (dart:async/future_impl.dart:137:18)
#16 Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:678:45)
#17 Future._propagateToListeners (dart:async/future_impl.dart:707:32)
#18 Future._completeWithValue (dart:async/future_impl.dart:522:5)
#19 Future._asyncComplete. (dart:async/future_impl.dart:552:7)
#20 _rootRun (dart:async/zone.dart:1124:13)
#21 _CustomZone.run (dart:async/zone.dart:1021:19)
#22 _CustomZone.runGuarded (dart:async/zone.dart:923:7)
#23 _CustomZone.bindCallbackGuarded. (dart:async/zone.dart:963:23)
#24 _microtaskLoop (dart:async/schedule_microtask.dart:41:21)
#25 _startMicrotaskLoop (dart:async/schedule_microtask.dart:50:5)
#26 _runPendingImmediateCallback (dart:isolate-patch/isolate_patch.dart:116:13)
#27 _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:173:5)

failed to build release

i got this error when try to build release

The build failed likely due to AndroidX incompatibilities in a plugin. The tool is about to try using Jetifier to solve the incompatibility.
Building plugin app_review...
FAILURE: Build failed with an exception.

* What went wrong:
Could not determine java version from '11.0.10'.

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Get more help at https://help.gradle.org


The plugin app_review could not be built due to the issue above.

Out of date HTTP package

Because XXX depends on app_review ^2.1.2+1 which depends on http ^0.13.0-nullsafety.0, http ^0.13.0-nullsafety.0 is required.
So, because zandu_mobile_admin depends on http ^1.1.0, version solving failed.
exit code 1

Wrong AppId

The method AppReview.getAppID just returns 'com.appleeducate.appreview' on Android. I haven't tested it on iOS.

Is it safe to call this on every startup?

Thank you for the package!

Is it safe to call on every startup? Or do we need to keep track if we requested for review before?

Ex.
If you do the request on every startup / init, will the user see it every single time? Or do you need to keep track in shared preferences / somewhere to ensure that you only send the request once per version?

app_review does not specify a Swift version

After add it to pubspec and run the app the pod install send and error.

Screen Shot 2019-10-09 at 8 57 53 AM

I'm already having other pods installs like firebase and facebook but this one it get this error.

Let me know if you need more details about this.

what is onValue?

Hello. Thank you for such good plugin.

I read the document.
onValue is the rate start number which user reviewed?

    if (Platform.isIOS) {
      AppReview.requestReview.then((onValue) {
        print(onValue);
      });
    }

Or, it is not. Could you tell me how to get the star count which user reviewed.

Lexical or Preprocessor Issue (Xcode): 'app_review/app_review-Swift.h' file not found

When I try to build, it fails with Lexical or Preprocessor Issue.

I tried flutter clean, deleting profile.lock and podfiles.

Device: Phone 11, iOS 16.2

pubspec.yaml

environment:
  sdk: ">=2.16.1 <3.0.0"
dependencies:
  app_review: ^2.1.1
  app_tracking_transparency: ^2.0.3
  audioplayers: ^0.20.1
  cupertino_icons: ^1.0.2
  easy_localization: ^3.0.0
  firebase_analytics: 10.0.3
  firebase_core: 2.1.1
  flutter:
    sdk: flutter
  flutter_inappwebview: ^5.4.0+2
  flutter_screenutil: ^5.4.0
  google_fonts: ^2.3.1
  google_mlkit_digital_ink_recognition: ^0.6.0
  google_mobile_ads: ^2.3.0
  provider: ^6.0.2
  purchases_flutter: ^3.10.0
  shared_preferences: ^2.0.13
  syncfusion_flutter_charts: ^20.1.50
  url_launcher: ^6.0.20

Error

Could not build the precompiled application for the device.
Lexical or Preprocessor Issue (Xcode): 'app_review/app_review-Swift.h' file not found
/Users/tenna/.pub-cache/hosted/pub.dev/app_review-2.1.2+1/ios/Classes/AppReviewPlugin.m:1:8

Specs satisfying the `app_review (from `.symlinks/plugins/app_review/ios`)` dependency were found, but they required a higher minimum deployment target.

~/Documents/hitomemo/ios $ pod install                                                        git[branch:i113]
Analyzing dependencies
[!] CocoaPods could not find compatible versions for pod "app_review":
  In Podfile:
    app_review (from `.symlinks/plugins/app_review/ios`)

Specs satisfying the `app_review (from `.symlinks/plugins/app_review/ios`)` dependency were found, but they required a higher minimum deployment target.

[!] Automatically assigning platform `iOS` with version `8.0` on target `Runner` because no platform was specified. Please specify a platform for this target in your Podfile. See `https://guides.cocoapods.org/syntax/podfile.html#platform`.

This is solved by updating the iOS Deployment Target value in Xcode:
Screen Shot 2020-05-09 at 5 34 52 PM

Cannot use with actual Flutter Version

I am using Flutter Version 0.4.4 but it seems to me that app_review requires Flutter version 0.3.1.

Output of flutter packages get in project folder:

Running "flutter packages get" in project...
The current Flutter SDK version is 0.4.4.

Because project depends on app_review from git which requires Flutter SDK version ^0.3.1, version solving failed.
pub get failed (1)

Output of Flutter Doctor -v:

[✓] Flutter (Channel beta, v0.4.4, on Mac OS X 10.13.3 17D102, locale de-DE)
• Flutter version 0.4.4 at /flutter
• Framework revision f9bb4289e9 (4 weeks ago), 2018-05-11 21:44:54 -0700
• Engine revision 06afdfe54e
• Dart version 2.0.0-dev.54.0.flutter-46ab040e58

[✓] Android toolchain - develop for Android devices (Android SDK 27.0.3)
• Android SDK at /Users/robjan/Library/Android/sdk
• Android NDK location not configured (optional; useful for native profiling support)
• Platform android-27, build-tools 27.0.3
• Java binary at: /Applications/Android Studio.app/Contents/jre/jdk/Contents/Home/bin/java
• Java version OpenJDK Runtime Environment (build 1.8.0_152-release-1024-b01)
• All Android licenses accepted.

[✓] iOS toolchain - develop for iOS devices (Xcode 9.3.1)
• Xcode at /Applications/Xcode.app/Contents/Developer
• Xcode 9.3.1, Build version 9E501
• ios-deploy 1.9.2
• CocoaPods version 1.5.2

[✓] Android Studio (version 3.1)
• Android Studio at /Applications/Android Studio.app/Contents
• Flutter plugin version 24.2.1
• Dart plugin version 173.4700
• Java version OpenJDK Runtime Environment (build 1.8.0_152-release-1024-b01)

[✓] VS Code (version 1.23.1)
• VS Code at /Applications/Visual Studio Code.app/Contents
• Dart Code extension version 2.13.2

[✓] Connected devices (1 available)
• iPhone 5s • XXX • ios • iOS 11.3 (simulator)

• No issues found!

SDK 31 app review in Android not showing up

Updating to the latest version of Flutter 2.10.3 and Android SDK 31 users are reporting that the Ranking request is not showing up. From what I can tell Play Store Services are enabled.

Any suggestions?
Thank you.

Not working with Xcode 15 due to old dependencies

Xcode 15 required this change to package_info_plus which is a dependency of app_review. At this moment this flutter community package hasn't had a new release in 14 months and cannot be used if you are running the latest Xcode version. Fixing this would require a dependency update since a dependency override isn't enough anymore. I'm concerned that this package has been silently abandoned

2.0.1: 'Android activity not available' on Android

Using version 2.0.1, running this code on an Android device with Play Services:

await AppReview.isRequestReviewAvailable

I get:

PlatformException(error, Android activity not available, null)

Note: my app uses pre-1.12 android setup (before Android v2 embedding).

Also, I see that an alternative implementation (https://github.com/britannio/in_app_review) uses the ApplicationContext instead of the Activity one. Wouldn't it be better to do the same instead of keeping a WeakReference to the Activity?

Change `launch` and `canLaunch`

If you update url_launcher over 6.1.0, please change this.

  • launchlaunchUrl
  • canLaunchcanLaunchUrl

launch & canLaunch is deprecated on url_launcher over 6.1.0.

Thanks!

app_review canLaunch("market://") won't work correctly

I have test on app_review 1.0.0
I found code in app_review.dart like below won't work fine which will always lead android to open google play in browser.

if (await canLaunch("market://")) {// this always return false
print('launching store page');
await launch("market://details?id=" + _appID);
details = 'Launched App Store Directly: $_appID';
} else {// so we always run in else,
await launch("https://play.google.com/store/apps/details?id=" + _appID);
details = 'Launched App Store: $_appID';
}

I changed the url from market:// to market://details which is used in brace, then it works fine.

And I find this keep the same in latest version of 1.1.0+1.

Unsupported Swift Language Version

The “Swift Language Version” (SWIFT_VERSION) build setting must be set to a supported value for targets which use Swift. Supported values are: 3.0, 4.0, 4.2. This setting can be set in the build settings editor.

image

Please specify a platform for this target in your Podfile

Getting this error on iOS with app_review

Error output from CocoaPods:
↳
[!] Automatically assigning platform `iOS` with version `8.0` on target `Runner` because no platform was specified. Please specify a platform for this target in your Podfile. See `https://guides.cocoapods.org/syntax/podfile.html#platform`.

I added app_review to pubspec and now I'm getting this error.

Upgrade Android project to v2

This package's example outputs the following message:

This app is using a deprecated version of the Android embedding.
To avoid unexpected runtime failures, or future build failures, try to migrate this app to the V2 embedding.
Take a look at the docs for migrating an app: https://github.com/flutter/flutter/wiki/Upgrading-pre-1.12-Android-projects

Bug 2.0.1 Error: The argument type 'String' can't be assigned to the parameter type 'Uri'.

I'm getting this error on 2.0.1 I think it's a bug but it works fine on 1.1.2 :

Error: The argument type 'String' can't be assigned to the parameter type 'Uri'.
'Uri' is from 'dart:core'.
.get('http://itunes.apple.com/$country/lookup?bundleId=$id')

here is the code I don't think it's coming from me any idea ?

 `ReviewAppDemoState pageState;

 class ReviewAppDemo extends StatefulWidget {
 @override
  ReviewAppDemoState createState() {
  pageState = ReviewAppDemoState();
  return pageState;
  }
 }

 class ReviewAppDemoState extends State<ReviewAppDemo> {
 String appID = "";
 String output = "";

@override
 initState() {
  super.initState();
  AppReview.getAppID.then((onValue) {
   setState(() {
     appID = onValue;
   });
   print("App ID" + appID);
  });
 }

 @override
 Widget build(BuildContext context) {
 return Scaffold(
  appBar: AppBar(title: Text("Request App Review Demo")),
   body: Column(
    children: <Widget>[
      Expanded(
        child: Center(
          child: RaisedButton.icon(
            color: Colors.blueAccent,
            textColor: Colors.white,
            icon: Icon(Icons.star),
            label: Text("Review App"),
            onPressed: () {
              rateApp();
            },
          ),
        ),
      ),
     ],
    ),
   );
  }`

Folder docs is indexed by Intellij for ages

I've updated to latest version from pub, and Intellij IDEA got stuck on indexing docs folder.
Most probably it's due to main.dart.js recognized as valuable source code.
I had to delete folder and restart to get it unstuck.

Sumbit is not working on ios

I have a button to Rate and after that submit to the AppStore. It works in android but doesn't work in iOS. How can I solve this issue ?
Skype_Picture_2019_10_24T05_48_51_897Z

Lookup should include country code in the base lookup URL

Thank you for great package!

I'm trying to lookup my appId from getiOSAppID method, and it calls to: http://itunes.apple.com/lookup?bundleId=my.app.id.here

But the response always return
{
"resultCount":0,
"results": []
}

My app is ONLY available in Japan store, so the lookup should include country code in the base lookup URL:

http://itunes.apple.com/jp/lookup?bundleId=my.app.id.here

It would be great if I could add country code in to lookup URL, or change the base lookup URL.

SDK location not found.

when i added this plugin it is giving error below:

FAILURE: Build failed with an exception.

  • What went wrong:
    A problem occurred configuring root project 'app_review'.

SDK location not found. Define location with sdk.dir in the local.properties file or with an ANDROID_HOME environment variable.

  • Try:
    Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

  • Get more help at https://help.gradle.org

BUILD FAILED in 6s

Exception: The plugin app_review could not be built due to the issue above.

Bug in v2.0.0

Some issues in fresh released v2.0.0:

  • Duplicated code in utility files and main class
  • Missing country code in getIosAppId() and iosReviewUrlBase()
  • Android utility methods have not been implemented
  • AppReview.getBundleName() always returns 'net.webike.app01' (I'm sorry, it is my mistake)

Issues may be solved with #40

Not opening review

It is working in internal test and internal share but doesn't work in production.
Can i get fix its in production. Android Google play store.
I have admob_flutter in production

Errors on deploy on iOS

Hi, add implement your plugin app_review: ^0.0.9 in my flutter project, no problem on Android but when i wanted to deploy on iOS i got many errors. When is remove your plugin of the project all is ok. before i had resolved an other problem, specify here #7

Thanks for your plugin and your help.

#Flutter Doctor :

[✓] Flutter (Channel master, v1.1.6-pre.4, on Mac OS X 10.13.6 17G65, locale
    fr-FR)
[✓] Android toolchain - develop for Android devices (Android SDK version 28.0.3)
[✓] iOS toolchain - develop for iOS devices (Xcode 10.1)
[✓] Android Studio (version 3.3)
[✓] Connected device (1 available)
• No issues found!

#Terminal output:

Xcode build done.                                           26,4s
Failed to build iOS app
Error output from Xcode build:
↳
** BUILD FAILED **
Xcode's output:
↳
flutter_app/ios/Pods/FMDB/src/fmdb/FMDatabase.m:1252:95: warning: parameter of overriding method should be annotated with __attribute__((noescape)) [-Wmissing-noescape]
- (BOOL)executeStatements:(NSString *)sql withResultBlock:(FMDBExecuteStatementsCallbackBlock)block {
^
In file included from flutter_app/ios/Pods/FMDB/src/fmdb/FMDatabase.m:1:
flutter_app/ios/Pods/FMDB/src/fmdb/FMDatabase.h:514:131: note: parameter of overridden method is annotated with __attribute__((noescape))
- (BOOL)executeStatements:(NSString *)sql withResultBlock:(__attribute__((noescape)) FMDBExecuteStatementsCallbackBlock _Nullable)block;
^
flutter_app/ios/Pods/FMDB/src/fmdb/FMDatabase.m:1394:51: warning: parameter of overriding method should be annotated with __attribute__((noescape)) [-Wmissing-noescape]
- (NSError*)inSavePoint:(void (^)(BOOL *rollback))block {
^
In file included from flutter_app/ios/Pods/FMDB/src/fmdb/FMDatabase.m:1:
flutter_app/ios/Pods/FMDB/src/fmdb/FMDatabase.h:988:88: note: parameter of overridden method is annotated with __attribute__((noescape))
- (NSError * _Nullable)inSavePoint:(__attribute__((noescape)) void (^)(BOOL *rollback))block;
^
2 warnings generated.
flutter_app/ios/Pods/FMDB/src/fmdb/FMDatabasePool.m:238:46: warning: parameter of overriding method should be annotated with __attribute__((noescape)) [-Wmissing-noescape]
- (void)inDatabase:(void (^)(FMDatabase *db))block {
^
In file included from flutter_app/ios/Pods/FMDB/src/fmdb/FMDatabasePool.m:15:
flutter_app/ios/Pods/FMDB/src/fmdb/FMDatabasePool.h:199:72: note: parameter of overridden method is annotated with __attribute__((noescape))
- (void)inDatabase:(__attribute__((noescape)) void (^)(FMDatabase *db))block;
^
flutter_app/ios/Pods/FMDB/src/fmdb/FMDatabasePool.m:273:73: warning: parameter of overriding method should be annotated with __attribute__((noescape)) [-Wmissing-noescape]
- (void)inDeferredTransaction:(void (^)(FMDatabase *db, BOOL *rollback))block {
^
In file included from flutter_app/ios/Pods/FMDB/src/fmdb/FMDatabasePool.m:15:
flutter_app/ios/Pods/FMDB/src/fmdb/FMDatabasePool.h:213:99: note: parameter of overridden method is annotated with __attribute__((noescape))
- (void)inDeferredTransaction:(__attribute__((noescape)) void (^)(FMDatabase *db, BOOL *rollback))block;
^
flutter_app/ios/Pods/FMDB/src/fmdb/FMDatabasePool.m:277:65: warning: parameter of overriding method should be annotated with __attribute__((noescape)) [-Wmissing-noescape]
- (void)inTransaction:(void (^)(FMDatabase *db, BOOL *rollback))block {
^
In file included from flutter_app/ios/Pods/FMDB/src/fmdb/FMDatabasePool.m:15:
flutter_app/ios/Pods/FMDB/src/fmdb/FMDatabasePool.h:206:91: note: parameter of overridden method is annotated with __attribute__((noescape))
- (void)inTransaction:(__attribute__((noescape)) void (^)(FMDatabase *db, BOOL *rollback))block;
^
flutter_app/ios/Pods/FMDB/src/fmdb/FMDatabasePool.m:281:67: warning: parameter of overriding method should be annotated with __attribute__((noescape)) [-Wmissing-noescape]
- (NSError*)inSavePoint:(void (^)(FMDatabase *db, BOOL *rollback))block {
^
In file included from flutter_app/ios/Pods/FMDB/src/fmdb/FMDatabasePool.m:15:
flutter_app/ios/Pods/FMDB/src/fmdb/FMDatabasePool.h:224:104: note: parameter of overridden method is annotated with __attribute__((noescape))
- (NSError * _Nullable)inSavePoint:(__attribute__((noescape)) void (^)(FMDatabase *db, BOOL *rollback))block;
^
4 warnings generated.
flutter_app/ios/Pods/FMDB/src/fmdb/FMDatabaseQueue.m:173:46: warning: parameter of overriding method should be annotated with __attribute__((noescape)) [-Wmissing-noescape]
- (void)inDatabase:(void (^)(FMDatabase *db))block {
^
In file included from flutter_app/ios/Pods/FMDB/src/fmdb/FMDatabaseQueue.m:9:
flutter_app/ios/Pods/FMDB/src/fmdb/FMDatabaseQueue.h:204:72: note: parameter of overridden method is annotated with __attribute__((noescape))
- (void)inDatabase:(__attribute__((noescape)) void (^)(FMDatabase *db))block;
^
flutter_app/ios/Pods/FMDB/src/fmdb/FMDatabaseQueue.m:230:73: warning: parameter of overriding method should be annotated with __attribute__((noescape)) [-Wmissing-noescape]
- (void)inDeferredTransaction:(void (^)(FMDatabase *db, BOOL *rollback))block {
^
In file included from flutter_app/ios/Pods/FMDB/src/fmdb/FMDatabaseQueue.m:9:
flutter_app/ios/Pods/FMDB/src/fmdb/FMDatabaseQueue.h:218:99: note: parameter of overridden method is annotated with __attribute__((noescape))
- (void)inDeferredTransaction:(__attribute__((noescape)) void (^)(FMDatabase *db, BOOL *rollback))block;
^
flutter_app/ios/Pods/FMDB/src/fmdb/FMDatabaseQueue.m:234:65: warning: parameter of overriding method should be annotated with __attribute__((noescape)) [-Wmissing-noescape]
- (void)inTransaction:(void (^)(FMDatabase *db, BOOL *rollback))block {
^
In file included from flutter_app/ios/Pods/FMDB/src/fmdb/FMDatabaseQueue.m:9:
flutter_app/ios/Pods/FMDB/src/fmdb/FMDatabaseQueue.h:211:91: note: parameter of overridden method is annotated with __attribute__((noescape))
- (void)inTransaction:(__attribute__((noescape)) void (^)(FMDatabase *db, BOOL *rollback))block;
^
flutter_app/ios/Pods/FMDB/src/fmdb/FMDatabaseQueue.m:238:67: warning: parameter of overriding method should be annotated with __attribute__((noescape)) [-Wmissing-noescape]
- (NSError*)inSavePoint:(void (^)(FMDatabase *db, BOOL *rollback))block {
^
In file included from flutter_app/ios/Pods/FMDB/src/fmdb/FMDatabaseQueue.m:9:
flutter_app/ios/Pods/FMDB/src/fmdb/FMDatabaseQueue.h:231:104: note: parameter of overridden method is annotated with __attribute__((noescape))
- (NSError * _Nullable)inSavePoint:(__attribute__((noescape)) void (^)(FMDatabase *db, BOOL *rollback))block;
^
4 warnings generated.
=== BUILD TARGET Runner OF PROJECT Runner WITH CONFIGURATION Debug ===
While building module 'Flutter' imported from flutter_app/ios/Runner/AppDelegate.h:1:
In file included from <module-includes>:1:
In file included from flutter_app/ios/Pods/../.symlinks/flutter/ios/Flutter.framework/Headers/Flutter.h:51:
In file included from flutter_app/ios/Pods/../.symlinks/flutter/ios/Flutter.framework/Headers/FlutterAppDelegate.h:11:
flutter_app/ios/Pods/../.symlinks/flutter/ios/Flutter.framework/Headers/FlutterPlugin.h:124:34: warning: 'UILocalNotification' is deprecated: first deprecated in iOS 10.0 - Use UserNotifications Framework's UNNotificationRequest [-Wdeprecated-declarations]
didReceiveLocalNotification:(UILocalNotification*)notification;
^
In module 'UIKit' imported from flutter_app/ios/Pods/../.symlinks/flutter/ios/Flutter.framework/Headers/FlutterAppDelegate.h:8:
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator12.1.sdk/System/Library/Frameworks/UIKit.framework/Headers/UILocalNotification.h:18:12: note: 'UILocalNotification' has been explicitly marked deprecated here
@interface UILocalNotification : NSObject<NSCopying, NSCoding>
^
While building module 'Flutter' imported from flutter_app/ios/Runner/AppDelegate.h:1:
In file included from <module-includes>:1:
In file included from flutter_app/ios/Pods/../.symlinks/flutter/ios/Flutter.framework/Headers/Flutter.h:62:
flutter_app/ios/Pods/../.symlinks/flutter/ios/Flutter.framework/Headers/FlutterPluginAppLifeCycleDelegate.h:92:34: warning: 'UILocalNotification' is deprecated: first deprecated in iOS 10.0 - Use UserNotifications Framework's UNNotificationRequest [-Wdeprecated-declarations]
didReceiveLocalNotification:(UILocalNotification*)notification;
^
In module 'UIKit' imported from flutter_app/ios/Pods/../.symlinks/flutter/ios/Flutter.framework/Headers/FlutterAppDelegate.h:8:
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator12.1.sdk/System/Library/Frameworks/UIKit.framework/Headers/UILocalNotification.h:18:12: note: 'UILocalNotification' has been explicitly marked deprecated here
@interface UILocalNotification : NSObject<NSCopying, NSCoding>
^
2 warnings generated.
2 warnings generated.
=== BUILD TARGET Runner OF PROJECT Runner WITH CONFIGURATION Debug ===
Undefined symbols for architecture x86_64:
"_OBJC_CLASS_$_AppReviewPlugin", referenced from:
objc-class-ref in GeneratedPluginRegistrant.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Could not build the application for the simulator.
Error launching application on iPhone XR.
Exited (sigterm)

Use method instead of getters

I would preferably used methods for instead of getters that returns a new Future.

I find it more clear that an action is triggered by calling a method in a fire and forget case. At first I thought that there were a cache of the Future.

AppReview.storeListing; // I would find `AppReview.storeListing()` more transparent on the fact that a processing is potentially triggered.

flutter_test sdk is incompatible with app_review.

This is the error message when using this package.

The current Dart SDK version is 2.1.0-dev.8.0.flutter-bf26f760b1.
The current Flutter SDK version is 0.10.2.

Because every version of flutter_test from sdk depends on http 0.12.0 and app_review >=0.0.5 depends on http ^0.11.3+16, flutter_test from sdk is incompatible with app_review >=0.0.5.
Because app_review <0.0.3 requires SDK version >=1.19.0 <2.0.0 and app_review >=0.0.3 <0.0.5 requires Flutter SDK version ^0.4.0 or ^0.5.2, app_review <0.0.5 is forbidden.
Thus, flutter_test from sdk is incompatible with app_review.

update package_info to ^2.0.0

Please update dependency package_info: ^2.0.0

The version you now depend on ^0.5.0 causes dependency issues.

Thanks!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.