Skip to content

Commit ad5739c

Browse files
authored
Merge pull request #578 from OneSignal/android_push_prompt
Android 13 push prompting
2 parents 24f4262 + 77c4dba commit ad5739c

File tree

5 files changed

+25
-7
lines changed

5 files changed

+25
-7
lines changed

android/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,5 +34,5 @@ android {
3434
}
3535

3636
dependencies {
37-
api 'com.onesignal:OneSignal:4.7.3'
37+
api 'com.onesignal:OneSignal:4.8.1'
3838
}

android/src/main/java/com/onesignal/flutter/OneSignalPlugin.java

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -278,8 +278,8 @@ private void userProvidedPrivacyConsent(MethodCall call, Result reply) {
278278
}
279279

280280
private void promptPermission(MethodCall call, Result result) {
281-
OneSignal.onesignalLog(OneSignal.LOG_LEVEL.ERROR, "promptPermission() is not applicable in Android");
282-
replySuccess(result, null);
281+
boolean fallback = call.argument("fallback");
282+
OneSignal.promptForPushNotifications(fallback, new OSFlutterPromptForPushNotificationPermissionResponseHandler(messenger, channel, result, "promptPermission"));
283283
}
284284

285285
private void getDeviceState(Result reply) {
@@ -567,6 +567,22 @@ public void onFailure(OneSignal.ExternalIdError error) {
567567
}
568568
}
569569

570+
static class OSFlutterPromptForPushNotificationPermissionResponseHandler extends OSFlutterHandler
571+
implements OneSignal.PromptForPushNotificationPermissionResponseHandler {
572+
OSFlutterPromptForPushNotificationPermissionResponseHandler(BinaryMessenger messenger, MethodChannel channel, Result res, String methodName) {
573+
super(messenger, channel, res, methodName);
574+
}
575+
576+
@Override
577+
public void response(boolean accepted) {
578+
if (this.replySubmitted.getAndSet(true)) {
579+
OneSignal.onesignalLog(OneSignal.LOG_LEVEL.DEBUG, "OneSignal " + methodName + " handler called twice, ignoring! response");
580+
return;
581+
}
582+
replySuccess(result, accepted);
583+
}
584+
}
585+
570586
static class OSFlutterPostNotificationHandler extends OSFlutterHandler
571587
implements OneSignal.PostNotificationResponseHandler {
572588

example/android/app/build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ apply plugin: 'com.android.application'
2929
apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
3030

3131
android {
32-
compileSdkVersion 28
32+
compileSdkVersion 33
3333

3434
lintOptions {
3535
disable 'InvalidPackage'
@@ -39,7 +39,7 @@ android {
3939
// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
4040
applicationId "com.onesignal.onesignalexample"
4141
minSdkVersion 16
42-
targetSdkVersion 28
42+
targetSdkVersion 33
4343
versionCode 1
4444
versionName "1.0"
4545
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

example/android/app/src/main/AndroidManifest.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
android:icon="@mipmap/ic_launcher">
2424
<activity
2525
android:name=".MainActivity"
26+
android:exported="true"
2627
android:launchMode="singleTop"
2728
android:theme="@style/LaunchTheme"
2829
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|layoutDirection|fontScale|screenLayout|density"

lib/onesignal_flutter.dart

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -213,8 +213,9 @@ class OneSignal {
213213
return val as bool;
214214
}
215215

216-
/// in iOS, will prompt the user for permission to send push notifications.
217-
// in Android, it will always return false, since notification permission is by default given
216+
// in iOS and Android 13+, will prompt the user for permission to send push notifications.
217+
// in lower Android versions it will always return false, since notification
218+
// permission is by default given
218219
Future<bool> promptUserForPushNotificationPermission(
219220
{bool fallbackToSettings = false}) async {
220221
dynamic result = await _channel.invokeMethod(

0 commit comments

Comments
 (0)