Flutter微博功能集成插件weibo_kit的使用

发布于 1周前 作者 songsunli 来自 Flutter

Flutter 微博功能集成插件 weibo_kit 的使用

简介

weibo_kit 是一个用于在 Flutter 应用中集成新浪微博 SDK 的插件。它提供了登录、分享等功能。

相关工具

文档

Android 配置

不需要做任何额外的接入工作,混淆已打入 Library,随 Library 引用,自动添加到 APK 打包混淆。

获取 Android 微信签名信息

非官方方法 -> 反编译 app_signatures.apk 所得

命令:

keytool -list -v -keystore ${your_keystore_path} -storepass ${your_keystore_password} 2>/dev/null | grep -p 'MD5:.*' -o | sed 's/MD5://' | sed 's/ //g' | sed 's/://g' | awk '{print tolower($0)}'

示例:

keytool -list -v -keystore example/android/app/infos/dev.jks -storepass 123456 2>/dev/null | grep -p 'MD5:.*' -o | sed 's/MD5://' | sed 's/ //g' | sed 's/://g' | awk '{print tolower($0)}'

输出:

28424130a4416d519e00946651d53a46

iOS 配置

URL Types

在 Xcode 中,选择你的工程设置项,选中“TARGETS”一栏,在“info”标签栏的“URL type”添加“URL scheme”为你所注册的应用程序 ID。

URL Types
weibosdk: identifier=weibo schemes=wb${appKey}

Info.plist

iOS 9 系统策略更新,限制了 HTTP 协议的访问,此外应用需要在“Info.plist”中将要使用的 URL Schemes 列为白名单,才可正常检查其他应用是否安装。

<key>LSApplicationQueriesSchemes</key>
<array>
    <string>sinaweibo</string>
    <string>sinaweibohd</string>
    <string>weibosdk</string>
    <string>weibosdk2.5</string>
    <string>weibosdk3.3</string>
</array>

Flutter 集成

添加依赖

pubspec.yaml 文件中添加依赖:

dependencies:
  weibo_kit: ^${latestTag}

或者使用 Git 方式:

dependencies:
  weibo_kit:
    git:
      url: https://github.com/rxreader/weibo_kit.git

示例代码

以下是一个完整的示例 Demo,展示了如何使用 weibo_kit 插件进行微博登录和分享功能。

import 'dart:async';
import 'dart:io';

import 'package:flutter/material.dart';
import 'package:flutter_cache_manager/flutter_cache_manager.dart';
import 'package:weibo_kit/weibo_kit.dart';

const String _WEIBO_APP_KEY = 'your weibo app key';
const String _WEIBO_UNIVERSAL_LINK = 'your weibo universal link';
const List<String> _WEIBO_SCOPE = <String>[
  WeiboScope.ALL,
];

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Home(),
    );
  }
}

class Home extends StatefulWidget {
  const Home({super.key});

  [@override](/user/override)
  State<Home> createState() => _HomeState();
}

class _HomeState extends State<Home> {
  late final StreamSubscription<BaseResp> _respSubs;
  AuthResp? _authResp;

  [@override](/user/override)
  void initState() {
    super.initState();
    _respSubs = Weibo.instance.respStream().listen(_listenResp);
  }

  void _listenResp(BaseResp resp) {
    if (resp is AuthResp) {
      _authResp = resp;
      final String content = 'auth: ${resp.errorCode}';
      _showTips('登录', content);
    } else if (resp is ShareMsgResp) {
      final String content = 'share: ${resp.errorCode}';
      _showTips('分享', content);
    }
  }

  [@override](/user/override)
  void dispose() {
    _respSubs.cancel();
    super.dispose();
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Weibo Kit Demo'),
      ),
      body: ListView(
        children: <Widget>[
          ListTile(
            title: Text('注册APP'),
            onTap: () async {
              await Weibo.instance.registerApp(
                appKey: _WEIBO_APP_KEY,
                universalLink: _WEIBO_UNIVERSAL_LINK,
                scope: _WEIBO_SCOPE,
              );
              _showTips('注册APP', '注册成功');
            },
          ),
          ListTile(
            title: Text('环境检查'),
            onTap: () async {
              final String content =
                  'weibo: ${await Weibo.instance.isInstalled()}';
              _showTips('环境检查', content);
            },
          ),
          ListTile(
            title: Text('登录'),
            onTap: () {
              Weibo.instance.auth(
                appKey: _WEIBO_APP_KEY,
                scope: _WEIBO_SCOPE,
              );
            },
          ),
          ListTile(
            title: Text('用户信息'),
            onTap: () async {
              if (_authResp?.isSuccessful ?? false) {
                final WeiboUserInfoResp userInfoResp =
                    await WeiboApi.getUserInfo(
                  appkey: _WEIBO_APP_KEY,
                  userId: _authResp!.userId!,
                  accessToken: _authResp!.accessToken!,
                );
                if (userInfoResp.isSuccessful) {
                  _showTips('用户信息',
                      '${userInfoResp.screenName}\n${userInfoResp.description}\n${userInfoResp.location}\n${userInfoResp.profileImageUrl}');
                } else {
                  _showTips('用户信息',
                      '获取用户信息失败\n${userInfoResp.errorCode}:${userInfoResp.error}');
                }
              }
            },
          ),
          ListTile(
            title: Text('文字分享'),
            onTap: () {
              Weibo.instance.shareText(
                text: 'Share Text',
              );
            },
          ),
          ListTile(
            title: Text('图片分享'),
            onTap: () async {
              final File file = await DefaultCacheManager().getSingleFile(
                  'https://www.baidu.com/img/bd_logo1.png?where=super');
              await Weibo.instance.shareImage(
                text: 'Share Text',
                imageUri: Uri.file(file.path),
              );
            },
          ),
          ListTile(
            title: Text('网页分享'),
            onTap: () async {
              // Uncomment and modify the following code to implement webpage sharing
              /*
              final File file = await DefaultCacheManager().getSingleFile(
                  'https://www.baidu.com/img/bd_logo1.png?where=super');
              final image.Image thumbnail =
                  image.decodeImage(file.readAsBytesSync())!;
              Uint8List thumbData = thumbnail.getBytes();
              if (thumbData.length > 32 * 1024) {
                thumbData = Uint8List.fromList(image.encodeJpg(thumbnail,
                    quality: 100 * 32 * 1024 ~/ thumbData.length));
              }
              await Weibo.instance.shareWebpage(
                title: 'title',
                description: 'share webpage',
                thumbData: thumbData.buffer.asUint8List(),
                webpageUrl: 'https://www.baidu.com',
              );
              */
            },
          ),
        ],
      ),
    );
  }

  void _showTips(String title, String content) {
    showDialog<void>(
      context: context,
      builder: (BuildContext context) {
        return AlertDialog(
          title: Text(title),
          content: Text(content),
        );
      },
    );
  }
}

更多关于Flutter微博功能集成插件weibo_kit的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter微博功能集成插件weibo_kit的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是一个关于如何在Flutter项目中集成并使用weibo_kit插件来实现微博功能的基本示例代码。这个示例将涵盖基本的初始化、登录和分享功能。

首先,确保你已经在你的Flutter项目中添加了weibo_kit插件。你可以在你的pubspec.yaml文件中添加以下依赖:

dependencies:
  flutter:
    sdk: flutter
  weibo_kit: ^最新版本号  # 请替换为实际可用的最新版本号

然后运行flutter pub get来安装依赖。

1. 配置微博SDK

在使用weibo_kit之前,你需要在微博开放平台(https://open.weibo.com/)上创建一个应用,并获取到App KeyApp Secret。然后,你需要在你的Android和iOS项目中配置这些信息。

Android配置

android/app/src/main/AndroidManifest.xml中添加以下权限和配置:

<manifest ...>
    <application ...>
        <!-- 添加微博SDK所需的Activity -->
        <activity
            android:name="com.sina.weibo.sdk.component.WeiboSdkBrowser"
            android:configChanges="orientation|keyboardHidden|screenSize"
            android:exported="false"
            android:windowSoftInputMode="adjustResize" >
        </activity>
        
        <!-- 添加微博SDK所需的meta-data -->
        <meta-data
            android:name="WEIBO_APP_KEY"
            android:value="你的AppKey" />
    </application>

    <!-- 添加网络权限 -->
    <uses-permission android:name="android.permission.INTERNET" />
</manifest>

iOS配置

ios/Runner/Info.plist中添加微博SDK所需的配置:

<key>CFBundleURLTypes</key>
<array>
    <dict>
        <key>CFBundleURLSchemes</key>
        <array>
            <string>wb你的AppKey</string> <!-- 替换为你的AppKey,前面加wb -->
        </array>
    </dict>
</array>
<key>LSApplicationQueriesSchemes</key>
<array>
    <string>sinaweibohdsso</string>
    <string>sinaweibohd</string>
    <string>sinaweibosdk</string>
    <string>weibosdk2.5</string>
</array>

ios/Runner/AppDelegate.swift中,添加微博SDK的初始化代码:

import UIKit
import Flutter
import weibosdk  // 导入微博SDK

@UIApplicationMain
@objc class AppDelegate: FlutterAppDelegate {
  override func application(
    _ application: UIApplication,
    didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
  ) -> Bool {
    GeneratedPluginRegistrant.register(with: self)
    
    // 初始化微博SDK
    WBSDKConfigure.configureWithAppKey("你的AppKey", appSecret: "你的AppSecret")
    
    return super.application(application, didFinishLaunchingWithOptions: launchOptions)
  }
}

2. 使用weibo_kit插件

在你的Flutter代码中,你可以这样使用weibo_kit插件:

import 'package:flutter/material.dart';
import 'package:weibo_kit/weibo_kit.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Weibo Kit Demo'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              ElevatedButton(
                onPressed: _login,
                child: Text('Login with Weibo'),
              ),
              SizedBox(height: 20),
              ElevatedButton(
                onPressed: _share,
                child: Text('Share to Weibo'),
              ),
            ],
          ),
        ),
      ),
    );
  }

  void _login() async {
    try {
      await WeiboKit.login(
        appId: '你的AppKey', // 替换为你的AppKey
        redirectUri: 'https://your_redirect_uri', // 替换为你的回调URI
      );
      print('Login successful');
    } catch (e) {
      print('Login failed: $e');
    }
  }

  void _share() async {
    try {
      await WeiboKit.share(
        text: 'Hello Weibo!',
        imageUrl: 'https://example.com/image.jpg', // 替换为你想分享的图片URL
        thumbImageUrl: 'https://example.com/thumb_image.jpg', // 可选,缩略图URL
      );
      print('Share successful');
    } catch (e) {
      print('Share failed: $e');
    }
  }
}

注意事项

  1. 权限处理:在实际应用中,你可能需要处理更多的权限请求,比如存储权限,用于保存分享的图片等。
  2. 错误处理:示例代码中的错误处理较为简单,实际项目中可能需要更详细的错误处理和用户反馈。
  3. UI定制:示例代码中的UI较为简单,你可以根据实际需求进行UI定制。

这样,你就可以在Flutter项目中集成并使用weibo_kit插件来实现微博的登录和分享功能了。

回到顶部