如何把app分享到微信

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何把app分享到微信相关的知识,希望对你有一定的参考价值。

1.申请应用 AppKey

申请方法:访问友推网站后台,登录后进入应用列表,添加需要集成友推组件的 App,如下图,添加成功后可获取应用的 AppKey。

2.申请社交平台appkey

集成前需要为应用在各大社交网站的开放平台申请账号并通过审核,否则只能调用系统的分享菜单,无法跟踪分享的回调事件及统计平台

3.引用youtui库项目

将youtui-lib项目库和应用工程放在同一个目录下

在 Package Explorer 中右键点击工程的根目录,选择 Properties(属性),然后点击,在android选项点击Add添加youtui-lib

4.注册需要分享的平台

1)配置各分享平台key,该配置文件为youtui_sdk.xml,配置完放入工程的assets文件夹。

2)如果需要分享到哪个平台就将该平台的Enable属性设置为true.

3)如果需要将某个平台排列到前面,只需要改变它在youtui_sdk.xml文件中的位置即可。


5.各平台需要注意的事项:

新浪微博:

新浪微博需要验证应用签名,请一定要在新浪开放平台管理中心应用信息 -> 基本信息 -> Android签名包名信息 配置该信息

每次包名变化或者使用的.keystore变化都会导致应用签名变化,请重新到新浪微博开放平台设置。

运行Demo时如果重新编译,因为使用的.keystore文件变化也会导致应用签名变化,导致Demo新浪微博分享无法正常工作,请运行Demo时使用Demo工程包中提供的debug.keystore替换C:\\Users\\Administrator.android中的debug.keystore文件

微信和朋友圈:

微信和朋友圈也需要验证应用签名,请在微信开放平台管理中心修改应用 -> 开发信息配置。

QQ和QQ空间:

QQ和QQ空间使用的是腾讯开放平台api,请在腾讯开放平台申请账号和注册应用,请不要使用QQ互联(用于网站账号登录)的配置,虽然都是腾讯的,但是两个平台并不通用,除了需要在youtui_sdk.xml配置信息,还需要在manifest文件中的android:scheme中的tencent后的一串数字换成自己应用的appid。

<?xml version="1.0" encoding="utf-8"?>








6.最后一行配置说明:选用调用系统分享菜单功能。


7.在AndroidManifest.xml 注册权限。


8.在 AndroidManifest.xml 注册需要的Activity。

微信和朋友圈回调设置。

如果需要分享微信和朋友圈,必需建一个 应用包名+ .wxapi 的包,在该包下建 WXEntryActivity.java,将该类继承cn.bidaround.youtui.wxapi.WXEntryActivity即可(里面不用写代码)

public class WXEntryActivity extends cn.bidaround.youtui.wxapi.WXEntryActivity  

如图:(将com.xingxinglangtuoche替换成你应用的package名,微信回调会使用到)



9.初始化友推

开发者请在自己的程序开始,最好是在MainActivity的onCreate方法调用。YtTemplate.init(this)初始化友推sdk,这样友推sdk才能进行后续调用(否则分享等操作会出现空指针异常),例如:

protected void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); YtTemplate.init(this);/初始化友推/ initView(); 应用退出时:

在您项目的出口Activity的 onDestroy 方法的第一行插入下面的代码 YtTemplate.release(this); 此方法用于释放内存,统计用户使用情况,一旦调用了release,就必须重新调用init才能使用友推的功能,否则会出现空指针异常;


10.创建 ShareData 实例,调用该实例的set方法设置需要分享的数据: 创建ShareData实例,调用该实例的set方法设置自己需要分享的数据,关于该实例具体内容见下文,如果只是分享应用则只需要设置 setIsAppShare(true) 就可以分享应用在友推后台填写的信息和下载链接。

ShareData 包含的字段:

isAppShare text imagePath imageUrl description title target_url 判断是否为分享应用 待分享的文字,短信要小于70个字符,微博要小于140个字符,如果需要分享链接,最好将链接url放在最后 待分享的本地图片地址,分享图片的话需要在本地和网络图片中选一,如果都有则优先分享本地图片 待分享网络图片url,分享图片的话需要在本地和网络图片中选一,如果都有则优先分享本地图片 待分享内容的描述 待分享内容的标题 待分享内容的跳转链接


11.通过创建该类实例,调用实例的set方法设置这些参数,例如:

ShareData shareData = new ShareData(); shareData.isAppShare = false;//设置为true则分享的信息从友推后台填写的应用信息中读取,可动态更新,后面的值不用设置。 shareData.setDescription("友推积分组件"); shareData.setTitle("友推分享"); shareData.setText("通过友推积分组件,开发者几行代码就可以为应用添加分享送积分功能,并提供详尽的后台统计数据,除了本身具备的分享功能外,开发者也可将积分功能单独集成在已有分享组件的app上,");

 shareData.setTarget_url(""); 

shareData.setImageUrl(""); 

shareData.setImagePath("");


12.各个平台分享数据的限制和注意事项:

因为各个平台的分享限制,请分享时尽量分享图片+链接,依靠链接来了解更多信息。

1) 微信 朋友圈 微信分享为linkcard形式,超出的文字部分不会显示。

2) 新浪微博 很低版本的新浪微博不支持发多类型微博,进行图文分享时只会分享图片,新浪微博分享消息最长为140字。

3) QQ、QQ空间 QQ分享的消息最长40字,分享的标题最长30字,多余的部分将被忽略,description将被忽略 QQ空间分享的消息最长200字,分享的标题最长600字,多余的部分将被忽略,description将被忽略。

4) 腾讯微博 只有image(imagePath或imageUrl)和text被分享,其他字段忽略,腾讯微博分享消息最长为140字。

5) 人人网 只有image(imagePath或imageUrl)和text被分享,其他字段忽略。

6) 短信 只有text被分享,其他字段忽略。

7) 邮件 只有text被分享,其他字段忽略。

13.调用友推分享推荐组件 

为应用添加一个分享推荐按钮,如:

14.在分享按钮事件中调用youtui的组件即可,示例代码:

public void onClick(View v) if(v.getId()==R.id.popup_bt)

/调用友推分享推荐组件,YouTuiViewType类的常量为分享样式参数,目前支持白色列表和黑色网格两种/ /创建分享的模板,第一个参数为activity,第二个参数为分享窗口样式,第三个参数为是否需要积分/

 YtTemplate blackTemp = new YtTemplate(this, YouTuiViewType.BLACK_POPUP,false); //黑色网格样式不需要积分活动 /YtTemplate blackTemp = new YtTemplate(this, YouTuiViewType.WHITE_LIST,ture);/ //白色列表样式需要积分活动


ShareData shareData = new ShareData(); 

shareData.isAppShare = false;//设置为true则分享的信息从友推后台填写的应用信息中读取,可动态更新后面的值不用设置。

 shareData.setDescription("友推积分组件"); 

shareData.setTitle("友推分享");

 shareData.setText("通过友推积分组件,开发者几行代码就可以为应用添加分享送积分功能,并提供详尽的后台统计数据,除了本身具备的分享功能外,开发者也可将积分功能单独集成在已有分享组件的app上,快来试试吧 "); 

shareData.setTarget_url(""); 

shareData.setImageUrl("");

 shareData.setImagePath("");


blackTemp.setShareData(shareData);//设置默认的分享数据;shareData 设置参看4.6

 //**如果要为某个平台设置不一样的分享信息。则单独设置*/ //blackTemp.addData(YtPlatform.PLATFORM_QQ, shareData); //调出分享窗口 blackTemp.show();


//如果需要自定义分享事件,可以创建监听事件,然后在回调中处理 YtShareListener listener1 = new YtShareListener()             

 @Override   

 public void onSuccess(ErrorInfo arg0)

    

     

@Override    public void onPreShare()

    

     

@Override    

public void onError(ErrorInfo arg0)

   

    

  @Override   

 public void onCancel()  

   

;//给新浪微博添加分享监听 blackTemp.addListener(YtPlatform.PLATFORM_SINAWEIBO, listener1); 

//给QQ添加分享监听 //

blackTemp.addListener(YtPlatform.PLATFORM_QQ, listener2);

参考技术A 方法/步骤
1
申请应用 AppKey
申请方法:访问友推网站后台,登录后进入应用列表,添加需要集成友推组件的 App,如下图,添加成功后可获取应用的 AppKey。

2
申请社交平台appkey
集成前您需要为您的应用在各大社交网站的开放平台申请账号并通过审核,否则只能调用系统的分享菜单,无法跟踪分享的回调事件及统计平台

3
引用youtui库项目
将youtui-lib项目库和应用工程放在同一个目录下
在 Package Explorer 中右键点击工程的根目录,选择 Properties(属性),然后点击,在Android选项点击Add添加youtui-lib

4
注册需要分享的平台
1.配置各分享平台key,该配置文件为youtui_sdk.xml,配置完放入工程的assets文件夹。
2.如果需要分享到哪个平台就将该平台的Enable属性设置为true.
3.如果需要将某个平台排列到前面,只需要改变它在youtui_sdk.xml文件中的位置即可。

5
各平台需要注意的事项:
新浪微博:
新浪微博需要验证应用签名,请一定要在新浪开放平台管理中心应用信息 -> 基本信息 -> Android签名包名信息 配置该信息
每次包名变化或者使用的.keystore变化都会导致应用签名变化,请重新到新浪微博开放平台设置。
运行Demo时如果重新编译,因为使用的.keystore文件变化也会导致应用签名变化,导致Demo新浪微博分享无法正常工作,请运行Demo时使用Demo工程包中提供的debug.keystore替换C:\Users\Administrator.android中的debug.keystore文件
微信和朋友圈:
微信和朋友圈也需要验证应用签名,请在微信开放平台管理中心修改应用 -> 开发信息配置。
QQ和QQ空间:
QQ和QQ空间使用的是腾讯开放平台api,请在腾讯开放平台申请账号和注册应用,请不要使用QQ互联(用于网站账号登录)的配置,虽然都是腾讯的,但是两个平台并不通用,除了需要在youtui_sdk.xml配置信息,还需要在manifest文件中的android:scheme中的tencent后的一串数字换成自己应用的appid。
<?xml version="1.0" encoding="utf-8"?>

最后一行配置说明:选用调用系统分享菜单功能

在AndroidManifest.xml 注册权限

在 AndroidManifest.xml 注册需要的Activity
微信和朋友圈回调设置
如果需要分享微信和朋友圈,必需建一个 应用包名+ .wxapi 的包,在该包下建 WXEntryActivity.java,将该类继承cn.bidaround.youtui.wxapi.WXEntryActivity即可(里面不用写代码)
public class WXEntryActivity extends cn.bidaround.youtui.wxapi.WXEntryActivity
如图:(将com.xingxinglangtuoche替换成你应用的package名,微信回调会使用到)

初始化友推
开发者请在自己的程序开始,最好是在MainActivity的onCreate方法调用YtTemplate.init(this)初始化友推sdk,这样友推sdk才能进行后续调用(否则分享等操作会出现空指针异常),例如:
protected void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); YtTemplate.init(this);/初始化友推/ initView(); 应用退出时:
在您项目的出口Activity的 onDestroy 方法的第一行插入下面的代码 YtTemplate.release(this); 此方法用于释放内存,统计用户使用情况,一旦调用了release,就必须重新调用init才能使用友推的功能,否则会出现空指针异常;

创建 ShareData 实例,调用该实例的set方法设置需要分享的数据: 创建ShareData实例,调用该实例的set方法设置自己需要分享的数据,关于该实例具体内容见下文,如果只是分享应用则只需要设置 setIsAppShare(true) 就可以分享应用在友推后台填写的信息和下载链接。
ShareData 包含的字段:
isAppShare text imagePath imageUrl description title target_url 判断是否为分享应用 待分享的文字,短信要小于70个字符,微博要小于140个字符,如果需要分享链接,最好将链接url放在最后 待分享的本地图片地址,分享图片的话需要在本地和网络图片中选一,如果都有则优先分享本地图片 待分享网络图片url,分享图片的话需要在本地和网络图片中选一,如果都有则优先分享本地图片 待分享内容的描述 待分享内容的标题 待分享内容的跳转链接

通过创建该类实例,调用实例的set方法设置这些参数,例如:
ShareData shareData = new ShareData(); shareData.isAppShare = false;//设置为true则分享的信息从友推后台填写的应用信息中读取,可动态更新,后面的值不用设置。 shareData.setDescription("友推积分组件"); shareData.setTitle("友推分享"); shareData.setText("通过友推积分组件,开发者几行代码就可以为应用添加分享送积分功能,并提供详尽的后台统计数据,除了本身具备的分享功能外,开发者也可将积分功能单独集成在已有分享组件的app上,");
shareData.setTarget_url("");
shareData.setImageUrl("");
shareData.setImagePath("");

各个平台分享数据的限制和注意事项:
因为各个平台的分享限制,请分享时尽量分享图片+链接,依靠链接来了解更多信息
1) 微信 朋友圈 微信分享为linkcard形式,超出的文字部分不会显示
2) 新浪微博 很低版本的新浪微博不支持发多类型微博,进行图文分享时只会分享图片,新浪微博分享消息最长为140字
3) QQ、QQ空间 QQ分享的消息最长40字,分享的标题最长30字,多余的部分将被忽略,description将被忽略 QQ空间分享的消息最长200字,分享的标题最长600字,多余的部分将被忽略,description将被忽略
4) 腾讯微博 只有image(imagePath或imageUrl)和text被分享,其他字段忽略,腾讯微博分享消息最长为140字
5) 人人网 只有image(imagePath或imageUrl)和text被分享,其他字段忽略
6) 短信 只有text被分享,其他字段忽略
7) 邮件 只有text被分享,其他字段忽略

调用友推分享推荐组件
为应用添加一个分享推荐按钮,如:

在分享按钮事件中调用youtui的组件即可,示例代码:
public void onClick(View v) if(v.getId()==R.id.popup_bt)
/调用友推分享推荐组件,YouTuiViewType类的常量为分享样式参数,目前支持白色列表和黑色网格两种/ /创建分享的模板,第一个参数为activity,第二个参数为分享窗口样式,第三个参数为是否需要积分/
YtTemplate blackTemp = new YtTemplate(this, YouTuiViewType.BLACK_POPUP,false); //黑色网格样式不需要积分活动 /YtTemplate blackTemp = new YtTemplate(this, YouTuiViewType.WHITE_LIST,ture);/ //白色列表样式需要积分活动

ShareData shareData = new ShareData();
shareData.isAppShare = false;//设置为true则分享的信息从友推后台填写的应用信息中读取,可动态更新后面的值不用设置。
shareData.setDescription("友推积分组件");
shareData.setTitle("友推分享");
shareData.setText("通过友推积分组件,开发者几行代码就可以为应用添加分享送积分功能,并提供详尽的后台统计数据,除了本身具备的分享功能外,开发者也可将积分功能单独集成在已有分享组件的app上,快来试试吧 ");
shareData.setTarget_url("");
shareData.setImageUrl("");
shareData.setImagePath("");

blackTemp.setShareData(shareData);//设置默认的分享数据;shareData 设置参看4.6
//**如果要为某个平台设置不一样的分享信息。则单独设置*/ //blackTemp.addData(YtPlatform.PLATFORM_QQ, shareData); //调出分享窗口 blackTemp.show();

//如果需要自定义分享事件,可以创建监听事件,然后在回调中处理 YtShareListener listener1 = new YtShareListener()
@Override
public void onSuccess(ErrorInfo arg0)


@Override public void onPreShare()


@Override
public void onError(ErrorInfo arg0)


@Override
public void onCancel()

;//给新浪微博添加分享监听 blackTemp.addListener(YtPlatform.PLATFORM_SINAWEIBO, listener1);
//给QQ添加分享监听 //
blackTemp.addListener(YtPlatform.PLATFORM_QQ, listener2);

END本回答被提问者和网友采纳

Flutter 项目实战 截图分享到微信|QQ|微博 十二

/ 截图功能演示 /

/ 跨进程通信案例 /

调用三方app进行支付 : 支付宝支付、微信支付、银行app支付 ........

调用三方app进行分享 : 微信分享、QQ分享、微博分享、钉钉分享、分享邮箱、打印、蓝牙.......

调用三方app进行登录 : 微信登录、QQ登录、微博登录、支付宝登录、Twitter登录(海外)、谷歌登录(海外)、FaceBook登录(海外) .......

/ 应用进程间通信 (IPC) /

       进程间通信 (Interprocess communication) 就是不同进程之间传递或交换信息 。进程间是靠共享内存区域来进行彼此的互相访问 。IPC (Interprocess communication) 是一组编程接口,程序员能够协调不同的进程,能在一个操作系统里同时运行,并相互传递、交换信息。程序能够在同一时间里处理许多用户的要求。因为即使只有一个用户发出要求,也可能导致一个操作系统中多个进程的运行,进程之间必须互相通话。

IPC 方法 :

1、管道(PIPE)消息排队 (Message Queues) / 消息队列就是消息的一个链表,它允许一个或多个进程向它写消息,一个或多个进程从中读消息。

2、 旗语 (信号量)

3、 共用内存 (message queues,semaphores and shared memory)/ 一个进程创建,其余进程对这块内存区进行读写。

4、套接字(Socket)/ 套接字是通信的基石,是支持TCP/IP协议的路通信的基本操作单元。可以将套接字看作不同主机间的进程进行双间通信的端点,它构成了单个主机内及整个网络间的编程界面。

 IPC 作用 :

1、进程间共享数据 / 进程操作共享数据

2、进程间数据传输 / 一个进程需要将它的数据发送给另一个进程

 3、通知事件 / 进程间发送通知消息 (例如: 子进程结束通知父进程)

 4、资源共享 / 多个进程之间共享同样的资源         

5、进程控制 / 一个进程对另外一个进程控制 (例如: 拦截进程的异常)             

/ Android 通信的几种方式 /

Bundle&Intent / 实现了parcelable接口 / 可以将数据存储在Bundle中传递数据

SharedPerference / 多个进程的应用,可以对磁盘里的同一个文件读写。

Activity /  需要指定的是要访问的Activity所对应的Action(字符串)。有些Activity还需要指定一个Uri(通过 Intent构造方法的第2个参数指定)

Content Provider / 在多个应用程序之间数据共享的方式(跨进程共享数据)

Broadcast /  广播是一种被动跨进程通讯的方式。程序向系统发送广播时,其他的应用程序只能被动地接收广播数据。

Messager / 使用Messenger为服务提供接口。定义一个MessengerService继承自Service,并在AndroidManifest.xml中声明并给一个进程名,使该服务成为一个单独的进程。

AIDL / AIDL是一种接口描述语言,通常用于进程间通信。它用于让某个Service与多个应用程序组件之间进行跨进程通信,从而可以实现多个应用程序共享同一个Service。

Socket / Socket 通信和 Binder 通信类似,也是一种 C/S 模型的通信方式

/  IOS 通信的几种方式 /

URL scheme /  应用A通过openURL的方法跳转到应用B ,  并且在URL种带上想要的参数 , 有点类似HTTP的get请求进行参数传递 。 

Keychain /  Keychain 安全的存储容器 (SQLite数据库) 。 

UIPasteBoard / uipasteboard剪切板功能 , 利用系统剪切板功能来实现的。

UIDocumentInteractionController / 贡献文档、文档预览、打印、发邮件等复制功能

AirDrop / APP之间文档和数据的分享

UIActivityViewController /  PP之间发送数据、分享数据和操作数据

APP Groups /  团队app开发 , app和extension共享读写空间, 实现数据共享

/ 监听手机系统剪切 /

Flutter工程 pubspec.yaml 文件下添加 flutter_screenshot_callback  依赖库配置 , 并执行flutter pub get 命令将依赖库导入到本地

 

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


class TestScreenPage extends StatefulWidget 
  @override
  _MyAppState createState() => _MyAppState();


class _MyAppState extends State<TestScreenPage> implements IScreenshotCallback 
  String _imagePath = 'Unknown';
  late ScreenshotCallback _screenshotCallback;

  @override
  void initState() 
    super.initState();
    initCallback();
  

  void initCallback() 
    _screenshotCallback = ScreenshotCallback();
    _screenshotCallback.startScreenshot();
    _screenshotCallback.setInterfaceScreenshotCallback(this);
  

  @override
  void dispose() 
    super.dispose();
    _screenshotCallback.stopScreenshot();
  

  @override
  Widget build(BuildContext context) 
    return MaterialApp(
      home: Scaffold(
        backgroundColor: Colors.blue,
        appBar: AppBar(
          title: const Text('Plugin example app'),
        ),
        body: Center(
          child: Text('Image path: $_imagePath\\n'),
        ),
      ),
    );
  

  @override
  deniedPermission() 
    print("没有权限");
  

  @override
  screenshotCallback(String data) async 
    setState(() 
      _imagePath = data;
    );
    print('截图保存地址: $'$data'.substring('$data'.indexOf('/'), '$data'.length)');
  

触发安卓手机音量 减号 和 熄屏键 实现截图 (我是在红米手机下实现的)

 

Android 手机打印的图片保存的地址

 

IOS 打印的图片保存的地址

IOS

f截图保存地址: /private/var/mobile/Containers/
Data/Application/9381C8B1-71C7-4FEB-84F2-
7636CEFDD481/tmp/screen_shot.png

/ 微信分享 /

Flutter 工程 pubspec.yaml 添加 fluwx 插件配置 , 并执行 flutter pub get 命令加载依赖

微信开发者后台创建应用

IOS 配置参数

Android配置参数 

 应用创建成功后获取appid

IOS LSApplicationQueriesSchemes 白名单配置

IOS xcode里面配置applinks  生成universalLink

  

 配置AppId (Android/IOS) 和universalLink (IOS)

 手机截图微信分享

Android 11 手机 微信分享错误提示 : sendReq failed for wechat app signature check

在应用的AndroidManifest.xml添加如下<queries>标签 , 指定微信包名

/ QQ 分享 / 

Flutter 工程 pubspec.yaml 文件下配置 tencent_kit 依赖库配置 , 并执行flutter pub get 命令将依赖库导入到本地

腾讯应用开放平台

创建应用获取AppId 并配置

IOS LSApplicationQueriesSchemes 白名单配置 

 IOS xcode里面配置applinks  生成universalLink

build.gradle下配置appid

配置appid和 universalLink

实现截图分享到QQ

Android 11 手机 微信分享错误提示 : sendReq failed for wechat app signature check

在应用的AndroidManifest.xml添加如下<queries>标签 , 指定QQ包名

/ 微博分享 / 

flutter 工程 pubspec.yaml 添加 weibo_kit 依赖 , 并执行flutter pub get 命令将依赖库导入到本地

在添加依赖的过程中出现了下面的问题 , 这个问题没有得到解决 

我直接下载了weibo_kit源码工程到工程里面进行依赖

微博开发者平台

IOS 填写包名

Android填写包名、签名、下载地址

获取 appKey

  

IOS LSApplicationQueriesSchemes 白名单配置 

配置appKey和 universalLink

图片剪切并实现微博分享

 

/ pod install  github.com:443 /

github访问缓慢

主要原因github访问非常缓慢 , 执行 pod install 下载依赖无法顺利进行

找到电脑硬盘上的 .gitconfig 文件  

open ~/.gitconfig

替换github配置

在文件末尾添加

[url "https://github.com.cnpmjs.org/"]

insteadOf = https://github.com/

下载案例

以上是关于如何把app分享到微信的主要内容,如果未能解决你的问题,请参考以下文章

APP - K歌之王请进!全民K歌可一键分享到微信状态

APP - K歌之王请进!全民K歌可一键分享到微信状态

由于不支持的分享类型,无法分享到微信

微信图文链接 —— 分享网页文章到微信时如何自定义缩略图链接标题和摘要

H5 中能实现分享到微信的功能吗

怎么把ppt发送到微信上