Forráskód Böngészése

通天塔

通天塔
linbing 5 éve
szülő
commit
0fcee6d577

+ 1 - 0
android/src/main/AndroidManifest.xml

@@ -11,6 +11,7 @@
     <uses-permission android:name="android.permission.REORDER_TASKS" /><!-- 获取近期运行任务,用于应用是否活跃的判断 -->
     <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
+    <uses-permission android:name="android.permission.VIBRATE"/>
     <application
         android:usesCleartextTraffic="true"
         >

+ 18 - 5
android/src/main/java/com/flutter/flutter_aliyun_push/FlutterAliyunPushPlugin.java

@@ -37,7 +37,7 @@ public class FlutterAliyunPushPlugin implements FlutterPlugin, MethodChannel.Met
 
   public static final String TAG = "AliyunPushPlugin";
   public static final String CHANNEL_NAME="aliyun_push";
-  private Context context;
+  private static Context mContext;
   public static Object initializationLock = new Object();
   private MethodChannel aliyunPushPluginChannel;
   private static String lastPushRegistSuccessMessage;
@@ -74,7 +74,14 @@ public class FlutterAliyunPushPlugin implements FlutterPlugin, MethodChannel.Met
   };
 
 
-  public static void sendPushNotification(FlutterPushNotification message) {
+  public static void sendPushNotification(Context context,FlutterPushNotification message) {
+    if (mContext == null) {
+      //app未启动,厂家通道
+      Log.d(TAG,"showNotification:"+message.title);
+      NotificationUtil.showNotification(context,message.title,message.summary,message.summary);
+      return;
+    }
+
     if(FlutterAliyunPushPlugin.isPluginAttached) {
       EventBus.getDefault().post(new PushMessageEvent(PushMessageEvent.EVENT_onReceiverNotification,message));
     }else {
@@ -83,7 +90,13 @@ public class FlutterAliyunPushPlugin implements FlutterPlugin, MethodChannel.Met
     }
   }
 
-  public static void sendPushMessage(FlutterPushMessage message) {
+  public static void sendPushMessage(Context context,FlutterPushMessage message) {
+    if (mContext == null) {
+      //app未启动,厂家通道
+      Log.d(TAG,"showNotification:"+message.title);
+      NotificationUtil.showNotification(context,message.title,message.content,message.content);
+      return;
+    }
     if(FlutterAliyunPushPlugin.isPluginAttached) {
       EventBus.getDefault().post(new PushMessageEvent(PushMessageEvent.EVENT_onReceiverMessage,message));
     }else {
@@ -94,6 +107,7 @@ public class FlutterAliyunPushPlugin implements FlutterPlugin, MethodChannel.Met
 
   public static void initPush(Context context) {
     Log.i(TAG, "start initPush");
+    mContext = context;
     PushServiceFactory.init(context);
     initPushVersion(context);
     CloudPushService pushService = PushServiceFactory.getCloudPushService();
@@ -123,6 +137,7 @@ public class FlutterAliyunPushPlugin implements FlutterPlugin, MethodChannel.Met
         }
       }
     });
+    initThirdPush(context);
   }
 
   /**
@@ -222,7 +237,6 @@ public class FlutterAliyunPushPlugin implements FlutterPlugin, MethodChannel.Met
     Log.i(TAG, "onDetachedFromEngine");
     FlutterAliyunPushPlugin.isPluginAttached = false;
     EventBus.getDefault().unregister(this);
-    context = null;
     aliyunPushPluginChannel.setMethodCallHandler(null);
     aliyunPushPluginChannel = null;
   }
@@ -235,7 +249,6 @@ public class FlutterAliyunPushPlugin implements FlutterPlugin, MethodChannel.Met
       }
 
       Log.i(TAG, "onAttachedToEngine");
-      this.context = applicationContext;
 
       aliyunPushPluginChannel =
               new MethodChannel(

+ 2 - 2
android/src/main/java/com/flutter/flutter_aliyun_push/FlutterMessageReceiver.java

@@ -20,7 +20,7 @@ public class FlutterMessageReceiver extends MessageReceiver {
         message.title = title;
         message.summary = summary;
         message.extraMap = extraMap;
-        FlutterAliyunPushPlugin.sendPushNotification(message);
+        FlutterAliyunPushPlugin.sendPushNotification(context,message);
     }
     @Override
     public void onMessage(Context context, CPushMessage cPushMessage) {
@@ -32,7 +32,7 @@ public class FlutterMessageReceiver extends MessageReceiver {
         message.messageId = cPushMessage.getMessageId();
         message.content = cPushMessage.getContent();
         message.traceInfo = cPushMessage.getTraceInfo();
-        FlutterAliyunPushPlugin.sendPushMessage(message);
+        FlutterAliyunPushPlugin.sendPushMessage(context,message);
 
     }
     @Override

+ 71 - 0
android/src/main/java/com/flutter/flutter_aliyun_push/NotificationUtil.java

@@ -0,0 +1,71 @@
+package com.flutter.flutter_aliyun_push;
+
+import android.annotation.TargetApi;
+import android.app.Notification;
+import android.app.NotificationChannel;
+import android.app.NotificationManager;
+import android.app.PendingIntent;
+import android.content.Context;
+import android.content.Intent;
+import android.graphics.Color;
+import android.os.Build;
+
+import androidx.annotation.NonNull;
+import androidx.core.app.NotificationCompat;
+
+public class NotificationUtil {
+
+    /**
+     * 显示通知栏
+     * @param context 上下文对象
+     */
+    public static void showNotification(Context context, String title,String description,String data) {
+        NotificationManager nm = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
+        // 兼容 8.0 系统
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
+            createNotificationChannel(context, nm);
+        }
+        NotificationCompat.Builder builder = createNotificationCompatBuilder(context, title,description,data);
+
+        nm.notify(0, builder.build());
+    }
+
+    @NonNull
+    public static NotificationCompat.Builder createNotificationCompatBuilder(Context context,  String title,String description,String data) {
+        // 通知栏点击接收者
+        Intent i = new Intent("android.intent.action.MAIN");
+        i.putExtra("data", data);
+        PendingIntent pendingIntent = PendingIntent.getActivity(context, 1, i, PendingIntent.FLAG_UPDATE_CURRENT);
+
+        NotificationCompat.Builder builder = new NotificationCompat.Builder(context);
+        builder.setContentIntent(pendingIntent);
+        builder.setContentTitle(title);
+        builder.setContentText(description);
+        builder.setAutoCancel(true);
+        builder.setDefaults(Notification.DEFAULT_ALL);
+
+        return builder;
+    }
+
+    @TargetApi(Build.VERSION_CODES.O)
+    public static void createNotificationChannel(Context context, NotificationManager notificationManager) {
+        // 通知渠道
+        NotificationChannel mChannel = new NotificationChannel("渠道Id", "渠道名称", NotificationManager.IMPORTANCE_HIGH);
+        // 开启指示灯,如果设备有的话。
+        mChannel.enableLights(true);
+        // 开启震动
+        mChannel.enableVibration(true);
+        //  设置指示灯颜色
+        mChannel.setLightColor(Color.RED);
+        // 设置是否应在锁定屏幕上显示此频道的通知
+        mChannel.setLockscreenVisibility(Notification.VISIBILITY_PRIVATE);
+        // 设置是否显示角标
+        mChannel.setShowBadge(true);
+        //  设置绕过免打扰模式
+        mChannel.setBypassDnd(true);
+        // 设置震动频率
+        mChannel.setVibrationPattern(new long[]{100, 200, 300, 400});
+        //最后在notificationmanager中创建该通知渠道
+        notificationManager.createNotificationChannel(mChannel);
+    }
+}

+ 2 - 2
example/android/app/build.gradle

@@ -43,8 +43,8 @@ android {
         manifestPlaceholders = [
                 aliyunPushAppKey: "30849262", //阿里云推送appkey
                 aliyunPushAppSecret:"a302e75da52a91910b5cbf01854791b1",//阿里云推送appsecret
-                miPushAppId:"2882303761517669764", //小米推送Appid
-                miPushAppKey:"5691766985764", //小米推送AppKey
+                miPushAppId:"\\2882303761517669764", //小米推送Appid
+                miPushAppKey:"\\5691766985764", //小米推送AppKey
                 huaweiPushAppId:"", //华为推送AppId
                 vivoPushAppId:"", //vivo推送AppId
                 vivoPushAppKey:"", //vivo推送AppKey