使用微信api将内容分享给好友,或者发送到朋友圈

48 篇文章 0 订阅

http://blog.csdn.net/u012591761/article/details/42263009


现在我们给应用添加一个功能,能在应用内将消息分享给微信好友,或者分享到朋友圈中。
我们首先来到微信开放平台官网,跟着组织走,官网指南:
https://open.weixin.qq.com/cgi-bin/frame?t=resource/res_main_tmpl&verify=1&lang=zh_CN
点击这里,查看步骤

1.申请你的AppID
开发者账号注册完了之后,来到管理中心,创建我们第一个应用。

按照要求将应用信息补完就行,期间有一点要注意:
这次我们需要的应用签名不再是SHA1 fingerprint,而是MD5 fingerprint!!

而且我们要把签名中该死的冒号给去掉才行!
最后我们得到这样的签名:

填入正确后等待审核。
ps:其实签名和包名填错都没关系,应用审核通过后可以随时更改。
但是 应用名称没办法修改了。

这些都完成,审核通过后我们会得到AppID。


于是我们也是有身份了人了。

那么这个应用名称会在那里显示呢?


请叫我土豪。

2.搭建开发环境
下载libammsdk.jar包添加到buildpath什么的就不再赘述了。
注意AndroidManifest.xml 添加必要的权限支持:
  1. <uses-permission android:name="android.permission.INTERNET"/>   
  2. <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>   
  3. <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>   
  4. <uses-permission android:name="android.permission.READ_PHONE_STATE"/>   
  5. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>   
	<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"/> 

3.在代码中使用
接下来我会直接使用自己的例子作为说明。
首先我做了一个这样的DEMO:使用高德地图sdk取得自己的定位,返回经纬度和详细地址描述:

我添加一个按钮,点击能讲现在的位置分享到微信。
现在这个按钮是空的,我们一步步来做。
[1] 注册到微信
要使你的程序启动后微信终端能响应你的程序,必须在代码中向微信终端注册你的id。
可以在程序入口Activity的onCreate回调函数处,或其他合适的地方将你的应用id注册到微信。
  1. public static final String APP_ID= "wxeb************";  
  2. // IWXAPI 是第三方app和微信通信的openapi接口  
  3. private IWXAPI api;  
  4. api = WXAPIFactory.createWXAPI(this, APP_ID, true);  
  5. api.registerApp(APP_ID);   
public static final String APP_ID= "wxeb************";
// IWXAPI 是第三方app和微信通信的openapi接口
private IWXAPI api;
api = WXAPIFactory.createWXAPI(this, APP_ID, true);
api.registerApp(APP_ID); 
这一段代码塞到onCreate()里面就行了。
[2] 发送请求到微信
然后我们点击分享按钮,然后跳转到分享页面。同时将我们要分享的文本带过去。

  1. Intent intent=new Intent(this, ShareActivity.class);  
  2. Bundle bundle=new Bundle();  
  3. bundle.putString("text", mLocationDesTextView.getText().toString());  
  4. intent.putExtras(bundle);  
  5. startActivity(intent);  
	Intent intent=new Intent(this, ShareActivity.class);
	Bundle bundle=new Bundle();
	bundle.putString("text", mLocationDesTextView.getText().toString());
	intent.putExtras(bundle);
	startActivity(intent);

点击文字按钮,弹出对话框,可以在里面修改要分享的文字。


  1. findViewById(R.id.send_text).setOnClickListener(new View.OnClickListener() {  
  2. @Override  
  3. public void onClick(View v) {  
  4.     final EditText editor = new EditText(ShareActivity.this);  
  5.     editor.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT));  
  6.     editor.setText(bundle.getString("text"));  
  7.     new AlertDialog.Builder(ShareActivity.this).setTitle("send text").setView(editor).setPositiveButton("send"new DialogInterface.OnClickListener() {  
  8.         @Override  
  9.         public void onClick(DialogInterface dialog, int which) {  
  10.             String text = editor.getText().toString();  
  11.             if (text == null || text.length() == 0) {  
  12.                 return;  
  13.             }  
  14.             // 初始化一个WXTextObject对象  
  15.             WXTextObject textObj = new WXTextObject();  
  16.             textObj.text = text;  
  17.             // 用WXTextObject对象初始化一个WXMediaMessage对象  
  18.             WXMediaMessage msg = new WXMediaMessage();  
  19.             msg.mediaObject = textObj;  
  20.             // 发送文本类型的消息时,title字段不起作用  
  21.             // msg.title = "Will be ignored";  
  22.             msg.description = text;  
  23.             // 构造一个Req  
  24.             SendMessageToWX.Req req = new SendMessageToWX.Req();  
  25.             req.transaction = buildTransaction("text"); // transaction字段用于唯一标识一个请求  
  26.             req.message = msg;  
  27.             req.scene = isTimelineCb.isChecked() ? SendMessageToWX.Req.WXSceneTimeline : SendMessageToWX.Req.WXSceneSession;  
  28.             // 调用api接口发送数据到微信  
  29.             api.sendReq(req);  
  30.             finish();  
  31.             }  
  32.         }).setNegativeButton("cancel"null).create().show();  
  33.     }  
  34. });  
  35.   
  36. private String buildTransaction(final String type) {  
  37.     return (type == null) ? String.valueOf(System.currentTimeMillis()) : type + System.currentTimeMillis();  
  38. }  
	findViewById(R.id.send_text).setOnClickListener(new View.OnClickListener() {
	@Override
	public void onClick(View v) {
		final EditText editor = new EditText(ShareActivity.this);
		editor.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT));
		editor.setText(bundle.getString("text"));
		new AlertDialog.Builder(ShareActivity.this).setTitle("send text").setView(editor).setPositiveButton("send", new DialogInterface.OnClickListener() {
			@Override
			public void onClick(DialogInterface dialog, int which) {
				String text = editor.getText().toString();
				if (text == null || text.length() == 0) {
					return;
				}
				// 初始化一个WXTextObject对象
				WXTextObject textObj = new WXTextObject();
				textObj.text = text;
				// 用WXTextObject对象初始化一个WXMediaMessage对象
				WXMediaMessage msg = new WXMediaMessage();
				msg.mediaObject = textObj;
				// 发送文本类型的消息时,title字段不起作用
				// msg.title = "Will be ignored";
				msg.description = text;
				// 构造一个Req
				SendMessageToWX.Req req = new SendMessageToWX.Req();
				req.transaction = buildTransaction("text"); // transaction字段用于唯一标识一个请求
				req.message = msg;
				req.scene = isTimelineCb.isChecked() ? SendMessageToWX.Req.WXSceneTimeline : SendMessageToWX.Req.WXSceneSession;
				// 调用api接口发送数据到微信
				api.sendReq(req);
				finish();
				}
			}).setNegativeButton("cancel", null).create().show();
		}
	});

	private String buildTransaction(final String type) {
		return (type == null) ? String.valueOf(System.currentTimeMillis()) : type + System.currentTimeMillis();
	}
点击send之后,执行api.sendReq(req),就将内容发送出去啦。
需要注意的是,SendMessageToWX.Req的scene成员,如果scene填WXSceneSession,那么消息会发送至微信的会话内。
如果scene填WXSceneTimeline(微信4.2以上支持,如果需要检查微信版本支持API的情况,可调用IWXAPI的getWXAppSupportAPI方法,0x21020001及以上支持发送朋友圈),那么消息会发送至朋友圈。
scene默认值为WXSceneSession。
[3] 接收微信的请求及返回值
如果你的程序需要接收微信发送的请求,或者接收发送到微信请求的响应结果,需要下面3步操作:
a. 在你的包名相应目录下新建一个wxapi目录,并在该wxapi目录下新增一个WXEntryActivity类,该类继承自Activity。
如图:

并在manifest文件里面加上exported属性,设置为true,例如:
  1. <activity android:name=".wxapi.WXEntryActivity"  
  2.     android:exported="true">  
  3. </activity>  
    <activity android:name=".wxapi.WXEntryActivity"
        android:exported="true">
    </activity>
b. 实现IWXAPIEventHandler接口,微信发送的请求将回调到onReq方法,发送到微信请求的响应结果将回调到onResp方法
c. 在WXEntryActivity中将接收到的intent及实现了IWXAPIEventHandler接口的对象传递给IWXAPI接口的handleIntent方法,示例如下:
  1. public class WXEntryActivity extends Activity implements IWXAPIEventHandler{  
  2.     IWXAPI api = WXAPIFactory.createWXAPI(this"wxeb2************");  
  3.     @Override  
  4.     protected void onCreate(Bundle savedInstanceState) {  
  5.         // TODO Auto-generated method stub  
  6.         super.onCreate(savedInstanceState);  
  7. //      setContentView(R.layout.send_to_wx);  
  8.         api.handleIntent(getIntent(), this);  
  9.     }  
  10.     @Override  
  11.     public void onReq(BaseReq arg0) {  
  12.         // TODO Auto-generated method stub  
  13.           
  14.     }  
  15.     @Override  
  16.     protected void onNewIntent(Intent intent) {  
  17.         super.onNewIntent(intent);  
  18.         setIntent(intent);  
  19.         api.handleIntent(intent, this);  
  20.     }  
  21.     @Override  
  22.     public void onResp(BaseResp resp) {  
  23.         // TODO Auto-generated method stub  
  24.             int result = 0;  
  25.             switch (resp.errCode) {  
  26.             case BaseResp.ErrCode.ERR_OK:  
  27.                 result = 0;  
  28.                 break;  
  29.             case BaseResp.ErrCode.ERR_USER_CANCEL:  
  30.                 result = -2;  
  31.                 break;  
  32.             case BaseResp.ErrCode.ERR_AUTH_DENIED:  
  33.                 result = -4;  
  34.                 break;  
  35.             default:  
  36.                 result = 123;  
  37.                 break;  
  38.         }  
  39.             Toast.makeText(this, Integer.toString(result), Toast.LENGTH_LONG).show();  
  40.             finish();  
  41.     }  
  42.     }  
public class WXEntryActivity extends Activity implements IWXAPIEventHandler{
	IWXAPI api = WXAPIFactory.createWXAPI(this, "wxeb2************");
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
//		setContentView(R.layout.send_to_wx);
		api.handleIntent(getIntent(), this);
	}
	@Override
	public void onReq(BaseReq arg0) {
		// TODO Auto-generated method stub
		
	}
	@Override
	protected void onNewIntent(Intent intent) {
		super.onNewIntent(intent);
		setIntent(intent);
        api.handleIntent(intent, this);
	}
	@Override
	public void onResp(BaseResp resp) {
		// TODO Auto-generated method stub
			int result = 0;
			switch (resp.errCode) {
			case BaseResp.ErrCode.ERR_OK:
				result = 0;
				break;
			case BaseResp.ErrCode.ERR_USER_CANCEL:
				result = -2;
				break;
			case BaseResp.ErrCode.ERR_AUTH_DENIED:
				result = -4;
				break;
			default:
				result = 123;
				break;
		}
			Toast.makeText(this, Integer.toString(result), Toast.LENGTH_LONG).show();
			finish();
	}
	}
当微信发送请求到你的应用,将通过IWXAPIEventHandler接口的onReq方法进行回调,类似的,应用请求微信的响应结果将通过onResp回调。
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 可以使用以下代码实现微信小程序分享微信好友: wx.showShareMenu({ withShareTicket: true }) wx.onShareAppMessage(function () { return { title: '分享标题', path: '/pages/index/index', imageUrl: 'https://example.com/share.png' } }) ### 回答2: 要实现微信小程序分享微信好友,需要以下步骤: 1. 在小程序的页面中添加分享按钮,可以使用`button`组件。 2. 给分享按钮绑定一个点击事件`bindtap`,点击时触发相应的分享逻辑。 3. 在点击事件中,调用微信提供的API`wx.showShareMenu`,显示分享菜单。 4. 使用`wx.onShareAppMessage`,来设置分享内容和回调函数。 5. 在回调函数中,通过`return`语句返回分享的数据配置项,包括分享标题、路径和图片。 6. 用户点击分享微信好友后,会触发微信分享界面,用户可以选择发送好友分享朋友圈等操作。 例子代码如下: ```javascript // 在小程序的页面中添加分享按钮 <button bindtap="share">分享好友</button> Page({ // 点击分享按钮时触发的事件 share: function() { // 显示分享菜单 wx.showShareMenu({ withShareTicket: true }); }, // 设置分享内容和回调函数 onShareAppMessage: function() { return { title: '分享标题', path: '/pages/index/index', imageUrl: '/images/share.png' }; } }); ``` 注意:以上代码只展示了实现分享微信好友的基本逻辑,具体的分享样式、分享后的跳转逻辑等可以根据自己的需求进行进一步定制和开发。 ### 回答3: 微信小程序提供了一个分享组件,可以通过代码实现将小程序分享微信好友。 首先,在小程序的页面中引入分享组件,可以使用`<button>`元素实现一个点击分享的按钮,如下所示: ```html <button open-type="share">分享好友</button> ``` 然后,在小程序的`app.json`文件中配置页面的路径,将分享组件所在的页面添加到`"pages"`数组中。 接下来,当用户点击分享按钮时,小程序会自动触发`<button>`元素的`open-type="share"`属性,然后跳转到分享页面,同时会触发页面的`onShareAppMessage`函数,我们可以在这个函数中自定义分享的标题、路径和图片等信息。在分享页面的`onShareAppMessage`函数中,我们可以使用以下代码实现分享功能: ```javascript onShareAppMessage: function () { return{ title: '分享标题', path: '分享路径', imageUrl: '分享图片地址' } } ``` 需要注意的是,分享路径必须是小程序中已注册的页面路径,并且不能携带查询参数。 最后,当用户点击分享后,微信会弹出一个分享的界面,用户可以选择将小程序分享微信好友发送给群组或者分享朋友圈。 以上就是使用代码实现微信小程序分享微信好友的方法,通过添加分享组件、配置分享页面和自定义分享函数,可以方便地实现小程序的分享功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值