微信开放平台andriod有很多坑,经常不知原因地跑不通。以下是自己结合慕课网课程的记录。

学习地址在https://www.imooc.com/video/8844;

这个课程给我很大的启发,但是很多很重要的地方没有提到,以下是实现转发到朋友圈的具体过程。

首先是创建应用:

1. 在微信开放平台注册一个账号,注意这个账号不能是注册过的,这里注册过的包含微信公众平台的邮箱账号;

2. 申请应用:在管理中心创建一个移动应用,然后按照要求填写基本信息,注意上传icon时要严格按照大小,可以直接用画图软件调整大小;下一步进应用平台,创建一个andriod应用,应用下载地址先不填(如果有也可以填上),重点是应用签名和应用包名。

以下打包方法参照别人的博客,地址是https://blog.csdn.net/github_2011/article/details/60966976

用管理员身份打开cmd,cd到jdk目录,执行以下命令:

秘钥口令是很重要的,我直接设置成123456,避免以后忘记

keytool -genkey -alias qj_test -keyalg RSA -validity 10000 -keystore qj_test.keystore

  1. keytool -list -v -keystore qj_test.keystore

将上文生成的秘钥以及密码都记录下来,打开android studio创建项目,包名可以随便取,但是一定要记录下来,这里有一个重点,真正的包名是pakagename

因为之后会在申请表中填包名,这里不能填错的。

创建完成之后进Build->Generate Signed APK->Choose Existing选择刚才生成的那个签名文件。正确填写密码和别名,别名直接点击右边按钮可以获取,下一步直接打包,打包完成之后会生成一个apk文件,在手机上安装。

将刚才打包的apk安装到手机上,微信开放平台资源下载提供了签名工具,下载下来也安装到手机上,步骤不能乱,在签名工具离输入刚才的包名,可以获取到签名,这个签名就是应该填写的应用签名,至此是成功的,直接提交审核。

3. 开发

审核通过之后会得到APPID,只有分享到朋友圈和分享给朋友权限,其他权限是要申请成为开发者的,而且不能是个人开发者。

接下来引入gradle;在app/build.gradle文件中的dependencies里添加一行代码:

compile 'com.tencent.mm.opensdk:wechat-sdk-android-with-mta:+';

之后点击进行gradle下载;如图所示:

同步完成之后进AndroidManifest.xml文件添加依赖,

<uses-permission android:name="android.permission.INTERNET"/><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/><uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/><uses-permission android:name="android.permission.READ_PHONE_STATE"/><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

添加完成之后可以进行代码开发;

4 前台

直接进主页,app/src/main/res/layout/activity_main.xml文件。修改成一下样子:

给每个按钮都添加对应的事件。代码如下:

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><android.support.design.widget.AppBarLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:theme="@style/AppTheme.AppBarOverlay"><android.support.v7.widget.Toolbarandroid:id="@+id/toolbar"android:layout_width="match_parent"android:layout_height="?attr/actionBarSize"android:background="?attr/colorPrimary"app:popupTheme="@style/AppTheme.PopupOverlay" /></android.support.design.widget.AppBarLayout><include layout="@layout/content_main" /><android.support.design.widget.FloatingActionButtonandroid:id="@+id/fab"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="bottom|end"android:layout_margin="@dimen/fab_margin"app:srcCompat="@android:drawable/ic_dialog_email" /></android.support.design.widget.CoordinatorLayout>

添加完成之后直接调用的是MainActivity.java;

引入Toast,view等等;按照微信开放平台的文档进行开发就可以,一下是我的代码:

package test.bocai.com;import android.content.DialogInterface;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.Toast;import com.tencent.mm.opensdk.modelmsg.SendMessageToWX;
import com.tencent.mm.opensdk.modelmsg.WXMediaMessage;
import com.tencent.mm.opensdk.modelmsg.WXTextObject;
import com.tencent.mm.opensdk.openapi.IWXAPI;
import com.tencent.mm.opensdk.openapi.WXAPIFactory;public class MainActivity extends AppCompatActivity {//微信初始化public static final String APP_ID="你的appid";private IWXAPI api;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);setSupportActionBar(toolbar);FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);fab.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG).setAction("Action", null).show();}});api = WXAPIFactory.createWXAPI(this,APP_ID);//注册到微信api.registerApp(APP_ID);}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.menu_main, menu);return true;}@Overridepublic boolean onOptionsItemSelected(MenuItem item) {// Handle action bar item clicks here. The action bar will// automatically handle clicks on the Home/Up button, so long// as you specify a parent activity in AndroidManifest.xml.int id = item.getItemId();//noinspection SimplifiableIfStatementif (id == R.id.action_settings) {return true;}return super.onOptionsItemSelected(item);}//生成微信唯一标识private String buildTransaction(final String type){return (type == null)?String.valueOf(System.currentTimeMillis()):type + System.currentTimeMillis();}//打开微信public void onClickopenwx(View view){Toast.makeText(this,String.valueOf(api.openWXApp()),Toast.LENGTH_LONG).show();}//分享给朋友public void onClickpy(View view){//创建edittext控件final EditText editor = new EditText(this);editor.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.WRAP_CONTENT));editor.setText("分享到微信好友的文本");final AlertDialog.Builder builder = new AlertDialog.Builder(this);builder.setIcon(R.drawable.ic_launcher_foreground);builder.setTitle("微信共享");builder.setView(editor);builder.setMessage("请输入要分享的文本");builder.setPositiveButton("分享", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {String text = editor.getText().toString();System.out.println(text);if(text == null || text.length() == 0){return;}//Toast.makeText(getApplicationContext(), "按钮组值发生改变", Toast.LENGTH_LONG).show();//初始化对象WXTextObject textobj = new WXTextObject();textobj.text = text;//用于传输的对象WXMediaMessage msg = new WXMediaMessage();msg.mediaObject = textobj;msg.description = text;//创建用于请求的对象SendMessageToWX.Req req = new SendMessageToWX.Req();req.message = msg;//唯一标识req.transaction = buildTransaction("text");req.scene = SendMessageToWX.Req.WXSceneSession;api.sendReq(req);Toast.makeText(MainActivity.this,String.valueOf(api.sendReq(req)),Toast.LENGTH_LONG).show();}});//取消按钮builder.setNegativeButton("取消",null);final AlertDialog alert = builder.create();alert.show();}//分享到朋友圈public void onClickpyq(View view) {//创建edittext控件final EditText editor = new EditText(this);editor.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT));editor.setText("分享到微信朋友圈的文本");final AlertDialog.Builder builder = new AlertDialog.Builder(this);builder.setIcon(R.drawable.ic_launcher_foreground);builder.setTitle("微信共享");builder.setView(editor);builder.setMessage("请输入要分享的文本");builder.setPositiveButton("分享", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {String text = editor.getText().toString();if (text == null || text.length() == 0) {return;}//初始化对象WXTextObject textobj = new WXTextObject();textobj.text = text;//用于传输的对象WXMediaMessage msg = new WXMediaMessage();msg.mediaObject = textobj;msg.description = text;//创建用于请求的对象SendMessageToWX.Req req = new SendMessageToWX.Req();req.message = msg;//唯一标识req.transaction = buildTransaction("text");req.scene = SendMessageToWX.Req.WXSceneTimeline;api.sendReq(req);Toast.makeText(MainActivity.this,String.valueOf(api.sendReq(req)),Toast.LENGTH_LONG).show();}});//取消按钮builder.setNegativeButton("取消", null);final AlertDialog alert = builder.create();alert.show();}
}

写完以上代码直接在真机上跑已经可以打开微信了,但是分享是不行的,因为分享必须要对应的签名。

直接打包,还是刚才的打包步骤,重新打包一次,基本上是直接可以运行的。

但是我,在这里踩了很多坑,浪费了几个小时。以下是我出错的地方:

1 我之前安装后,发现不能运行,于是我重新生成了签名,这时候微信记住的是之前的签名,微信只能卸载重装;

2 还是用之前的签名工具,输入包名,看包名生成的签名和微信通过的签名是不是一样,之前我就发现不一样,这时候可以选择重新打包,打包时换成正确的keystore文件,也可以选择修改微信的签名,微信在通过审核之后签名是随时可以修改的。

源代码已经放在我的github上,欢迎给star

https://github.com/laurel-he/weixin_andriod

微信开放平台转发到朋友圈之andriod相关推荐

  1. 微信朋友圈小视频显示服务器超时,微信小视频转发到朋友圈却提示发送失败怎么办?...

    相信很多朋友都有这样的困扰:微信小视频发送到朋友圈后,却提示发布失败,这是为什么呢?微信小视频发布失败有什么解决方法?那么,今天宿迁波仔就和大家分享一下正确发送小视频到朋友圈的方法. 自从微信更新6. ...

  2. 微信公众平台 分享到朋友圈 js代码

    前言:1目前必须是被微信认证过的公众平台才能使用此接口 1.绑定域名 2.引用文件 http://res.wx.qq.com/open/js/jweixin-1.0.0.js 3配置前台js配置 va ...

  3. Android之微信开放平台实现分享(分享好友和朋友圈)

    开发中分享操作往往经常遇到,而且还是一些比较大型一定的平台,如微信,QQ,微博等.写这篇博客主要是把微信的的分享和相关操作表达一下,分享可以包含:文字,视频,音乐,图片等分享. 分享可以有 分享给好友 ...

  4. 微信内置浏览器第三方网页分享链接给朋友以及转发到朋友圈无链接图片和链接描述的问题

    解决问题:微信内置浏览器第三方网页分享链接给朋友以及转发到朋友圈无链接图片和链接描述的问题 记录时间:2018-11-07 分享作者:小鹏 谨记:一定要按步骤一步一步来 先写一写思路:进入页面需要分享 ...

  5. 微信小程序开放「分享到朋友圈」功能

    2020年7月7日(据说是6日深夜),一个很特别的日子,微信低调地放开了一个功能:微信小程序"分享到到朋友圈",这个看似微小的变化,对微信小程序来说意义重大. 用fenng大的话说 ...

  6. 微信jsapi上传图片php,PHP+MySQL微信通过jsapi分享到朋友圈等平台,实现设置图片、链接...

    问题背景: 微信开发是目前程序开发领域一个比较火热的板块,基于公众号.微信支付等开发层出不穷,纷繁多彩,今天这里就基于微信开发的另外一个小版块,微信网页内分享到朋友圈等平台灵活设置链接和小图标(见下图 ...

  7. 微信公众平台与微信开放平台的区别、服务号、订阅号、企业微信的区别

    微信公众平台 vs 微信开放平台 微信公众平台是介绍公众号相关的内容,比如服务号.订阅号.企业微信,所以叫微信公众平台:公众平台也是公众号的管理端,可以编辑推送文章,通常是公众号的运营.开发登录: 微 ...

  8. 微信开放平台和公众平台的区别?

    微信开放平台和公众平台的区别? 微信开放平台: 主要面向App开发者.通常是拥有成熟的应用程序之后,通过开放平台将内容分享至朋友圈或发送 给某个微信好友/群聊.例如QQ音乐分享.美图秀秀修改过的照片直 ...

  9. 第三方App接入微信登录 解读 (微信开放平台)

    http://www.cnblogs.com/linjunjie/p/6249989.html 微信开放平台  和  微信公众平台  概念不同. 1.首先需要注册微信开放平台,然后获取开发者认证.审批 ...

最新文章

  1. UE4用音乐音效,各种声音都有,比较全了
  2. Spring Data 发布更改版本管理方案之后的第一个版本:2020.0.0
  3. 【Vegas原创】GridView修改表头,并导出Excel(C#版)
  4. Python:使用SWIG编写C语言扩展
  5. python 字体_python docx字体设置
  6. 数据结构-树与二叉树
  7. FTP服务器之pure-ftpd常用指令详解
  8. amtemu v0.9.2下载_悦剪辑安卓版下载-悦剪辑app下载v2.2
  9. 解决ifconfig没有网卡问题
  10. 关于left join 一些测试
  11. Android:实现应用版本更新
  12. 使用引导扇区维护工具BOOTICE编辑系统启动列表BCD文件
  13. 7年无人敢动的「屎山」代码:if循环19.8亿次
  14. Unity3D | FPS游戏_敌人相关
  15. 哇!家居环境居然能“可视化”?这守护真的牛
  16. UI设计行业领域知识体系
  17. 基于MMS街景的导航数据采集方法研究
  18. 推荐系统CTR(CVR)预估模型(多任务学习)之ESMM
  19. 探究C++:虚函数表究竟怎么回事?
  20. webpack配置静态资源

热门文章

  1. mpush 搭建消息服务器,MPUSH消息推送服务器搭建
  2. 如何逃避classin专注学习模式
  3. ecshop程序无法连接远程mysql_fecshop无法连接数据库
  4. 后知后觉者的学习方法
  5. 中山大学人工智能学院——考研上岸经验贴
  6. Linux下rabbitmq的集群搭建
  7. Linux之(6)Kconfig基础知识
  8. TorchProtein教程--预训练的蛋白质结构表示(5)
  9. 计算机基础试题及答案
  10. JavaScript 根据经纬度得出中心点的经纬度