Flutter集成友盟推送(Android版)

我是一名Android开发,自学Flutter相关内容,希望大家有问题一起讨论

今天试着尝试Android最常见的推送功能,在Flutter项目中如何进行

Umeng的官方文档对于Flutter如何接入推送我是不想看的(太敷衍了……哈哈)

所以我就决定用自己成功的经验告诉用得到的朋友们(费了大半天才搞定)

这里建议大家先创建个Demo确保推送成功之后,再轻车熟路项目上操作

1,首先打开Flutter项目下面的Android模块,打开Android模块之前先运行一遍Flutter项目

2,在app的build.gradle里面,defaultConfig里面加入如下代码

ndk{

   abiFilters'armeabi','armeabi-v7a','arm64-v8a'

}

manifestPlaceholders = [

UMENG_APPKEY:'你申请的appke',

UMENG_MESSAGE_SECRET:'你申请的SECRET',

UMENG_CHANNEL:' ',

HUAWEI_APP_ID:'',

HONOR_APP_ID:'',

XIAOMI_APP_ID:'1',

XIAOMI_APP_KEY:'',

OPPO_APP_KEY:'',

OPPO_APP_SECRET:',

VIVO_APP_ID:'',

VIVO_APP_KEY:'',

MEIZU_APP_ID:'',

MEIZU_APP_KEY:'',

]

注:这里的key值一定要和Umeng官方申请的检查一直,不然运行之后会报各种奇怪的错误

3,在你的清单文件中加入权限,复制粘贴就好

<uses-sdk tools:overrideLibrary="com.xiaomi.push,

com.hihonor.android.push.sdk.common,

com.hihonor.push.sdk,

com.huawei.hms.framework.common,

com.huawei.hms.framework.network.grs,

com.huawei.hms.baselegacyapi,

com.huawei.hmf.tasks,

com.huawei.agconnect.core,

com.huawei.hms.log,

com.huawei.hms.base.device,

com.huawei.hms.base.ui,

com.huawei.hms.stats,

com.huawei.hms.base.availableupdate,

com.huawei.android.hms.base,

com.huawei.android.hms.openid,

com.huawei.android.hms.push,

com.huawei.hms.hatool,

com.huawei.hms.framework.network.frameworkcompat,

org.android.agoo.oppo,

com.vivo.push,

org.android.agoo.vivo,

org.android.agoo.meizu,

org.android.agoo.huawei,

        com.pushsdk" />

4,在你的清单文件中

<meta-data android:name="UMENG_APPKEY" android:value="你申请的appkey" />

5,创建application类,这个类不用写代码,起到初始化作用

class MainApplication : FlutterApplication() {

}

创建好了之后,在清单文件application name中引用。

至此Android原生所需要的东西就全部配置齐全了,接下来就是去Flutter项目中啦

Flutter项目中步骤:

1,在pubspec.yaml 添加依赖,添加完成之后记得 Pub get 

umeng_common_sdk: 1.2.7 

umeng_push_sdk: 2.2.0


2,我是在应用首页进行的初始化


void registerPush() {

UmengPushSdk.setLogEnable(true);

  UmengCommonSdk.initCommon(

"appke",

      " ",

      "dev",

      "Umeng Message Secret");

  UmengPushSdk.register("appke", "dev");

}


3,获取设备Token,拿到设备Token,就可以推送消息了,可以在日志栏里面看到设备token值

String? deviceToken =await UmengPushSdk.getRegisteredId();

if (deviceToken !=null) {

print(deviceToken);

}

下面是我测试Demo中main里面的代码,可以直接复制粘贴使用,




void main() {

runApp(const MyApp());

}

class MyAppextends StatelessWidget {

const MyApp({super.key});

  // This widget is the root of your application.

  @override

  Widgetbuild(BuildContext context) {

return MaterialApp(

title:'Flutter Demo',

      theme:ThemeData(

primarySwatch: Colors.blue,

      ),

      home:const MyHomePage(title:'Flutter Demo Home Page'),

    );

  }

}

class MyHomePageextends StatefulWidget {

const MyHomePage({super.key, required this.title});

  final Stringtitle;

  @override

  StatecreateState() =>_MyHomePageState();

}

class _MyHomePageStateextends State {

int_counter =0;

  void _incrementCounter() {

setState(() {

_counter++;

    });

  }

@override

  Widgetbuild(BuildContext context) {

return Scaffold(

appBar:AppBar(

title:Text(widget.title),

      ),

      body:Center(

child:Column(

mainAxisAlignment: MainAxisAlignment.center,

          children: [

InkWell(

highlightColor: Colors.blue,

              splashColor: Colors.red,

              onTap: () {

registerPush();

              },

              child:Container(

padding:const EdgeInsets.only(

left:10, right:10, bottom:10, top:5),

                decoration:BoxDecoration(

border:Border.all(width:1, color: Colors.blue),

                  borderRadius:BorderRadius.circular(5),

                ),

                child:const Text('初始化umeng'),

              ),

            ),

            InkWell(

highlightColor: Colors.blue,

              splashColor: Colors.red,

              onTap: ()async {

String? deviceToken =await UmengPushSdk.getRegisteredId();

                if (deviceToken !=null) {

print(deviceToken);

                }

},

              child:Container(

padding:const EdgeInsets.only(

left:10, right:10, bottom:10, top:5),

                decoration:BoxDecoration(

border:Border.all(width:1, color: Colors.blue),

                  borderRadius:BorderRadius.circular(5),

                ),

                child:const Text('获取Token'),

              ),

            ),

          ],

        ),

      ),

      floatingActionButton:FloatingActionButton(

onPressed:_incrementCounter,

        tooltip:'Increment',

        child:const Icon(Icons.add),

      ), // This trailing comma makes auto-formatting nicer for build methods.

    );

  }

void registerPush() {

UmengPushSdk.setLogEnable(true);

    UmengCommonSdk.initCommon(

"appke",

        " ",

        "dev",

        "Umeng Message Secret");

    UmengPushSdk.register("appke", "dev");

  }

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容