【问题标题】:Huawei Push Kit Flutter : Push.getToken() returns ResultCode -5华为 Push Kit Flutter:Push.getToken() 返回 ResultCode -5
【发布时间】:2021-01-08 13:31:45
【问题描述】:

当我查看文档时,它表明 -5 与 proguard 规则有关,因此我按照此处所述添加了它们。 https://developer.huawei.com/consumer/en/doc/development/HMSCore-References-V5/error-code-0000001050255690-V5

android/proguard-rules.pro

## Flutter wrapper
-keep class io.flutter.app.** { *; }
-keep class io.flutter.plugin.**  { *; }
-keep class io.flutter.util.**  { *; }
-keep class io.flutter.view.**  { *; }
-keep class io.flutter.**  { *; }
-keep class io.flutter.plugins.**  { *; }
-dontwarn io.flutter.embedding.**

## HMS Core SDK
-ignorewarnings
-keepattributes *Annotation*
-keepattributes Exceptions
-keepattributes InnerClasses
-keepattributes Signature
-keepattributes SourceFile,LineNumberTable
-keep class com.huawei.hianalytics.**{*;}
-keep class com.huawei.updatesdk.**{*;}
-keep class com.huawei.hms.**{*;}

android/app/build.gradle 部分:

buildTypes {
        release {
            // TODO: Add your own signing config for the release build.
            // Signing with the debug keys for now, so `flutter run --release` works.
            signingConfig signingConfigs.release
            useProguard true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

这是代码初始化和获取令牌部分:

class HomePage extends StatefulWidget {
  @override
  _HomePageState createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {


  String _token = '';

  @override
  void initState() {
    HwAds.init();
    initPush();
    super.initState();
  }

  Future<void> initPush() async {
    if (!mounted) return;
    Push.getTokenStream.listen(_onTokenEvent, onError: _onTokenError);
  }

  void _onTokenEvent(String event) {
    print('onTokenEvent');
    _token = event;
    showResult("TokenEvent", _token);
  }

  void _onTokenError(Object error) {
    print('onTokenError');
    PlatformException e = error;
    showResult("TokenErrorEvent", e.message);
  }

  void showResult(String name, [String msg = "Button pressed."]) {
    print('$name: $msg');
    if (msg.isNotEmpty) Push.showToast(msg);
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Home'),
      ),
      body: SingleChildScrollView(
        child: Column(
          children: [
            RaisedButton(
              child: Text('Interstitial Ad Page'),
              onPressed: ()=> Navigator.pushNamed(context, '/interstitialPage'),
            ),
            RaisedButton(
              child: Text('Get token'),
              onPressed: ()=> Push.getToken(''),
            ),
          ],
        ),
      ),
    );
  }
}

我正在使用云调试,型号名称是 P40。我创建了一个发布 apk,选择了数据存储位置,提供了 SHA256,启用了 Push Kit,启用了 push kit 后更新了 agconnect-services。我还有什么遗漏的吗?

【问题讨论】:

    标签: huawei-mobile-services huawei-push-notification


    【解决方案1】:

    你可以尝试添加

    -keep class com.huawei.hms.flutter.** { *; }
    

    到你的 proguard-rules.pro

    查看这个官方示例

    https://github.com/HMS-Core/hms-flutter-plugin/blob/master/flutter-hms-push/example/android/app/proguard-rules.pro

    【讨论】:

    • 我更新了与示例项目相同的 proguard-rules.pro,但仍然收到 ResultCode -5 错误消息。
    • @FigenGüngör 您能否提供您的 Logcat 日志?
    • 这里是调用getToken后导出的日志:docs.google.com/document/d/…
    • @FigenGüngör 这是一个令人困惑的问题。请尝试添加minifyEnabled true,看看是否有效。
    • 测试了 minifyEnabled true 但没有改变错误。
    【解决方案2】:

    希望我的回答能帮到你

    尝试调用 getToken 只是为了生成令牌,然后调用 getTokenStrem,这对我有用

    Push.getToken('');
    
    final token = await Push.getTokenStream.first;
    

    不,我只是困惑我应该在 Scope 中发送什么,而不是空存储

    【讨论】:

    • 那么你有答案还是想知道?
    • 这个返回字符串token,比如fcm,只是scope idk怎么使用这个token在华为控制台和http发送推送有效
    猜你喜欢
    • 1970-01-01
    • 2021-11-21
    • 1970-01-01
    • 2021-06-26
    • 1970-01-01
    • 2022-11-09
    • 2020-11-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多