Presentation is loading. Please wait.

Presentation is loading. Please wait.

第10章 App微信分享的实现 倚动实验室.

Similar presentations


Presentation on theme: "第10章 App微信分享的实现 倚动实验室."— Presentation transcript:

1 第10章 App微信分享的实现 倚动实验室

2 CONTENTS 目录 Android平台分享到微信开发流程 10.1 App微信分享的操作流程 10.2 10.3
IOS平台分享到微信开发流程

3 10.1App微信分享的操作流程 10.1.1微信开放平台 分享到微信时需要用到微信开放平台,微信开放平台实际上是第三方移动程序提供接口。用户在APP上可以把看到的内容通过微信开放平台提供的接口发送给微信好友或分享至朋友圈,这样App上的内容就可以在微信平台获得更广泛的传播。

4 10.1.2将App内容分享给微信好友 在App中想把一些截图、链接等分享给自己的微信好友的时候,需要点击“分享”、“通发送给好友”按钮,就能把信息发送给微信好友。好友收到信息后,轻轻一点,就可以查看详情。还可以使用你的微信App来查看内容(没有安装微信的用户将会被提示去下载安装)。 将App内容分享给微信好友

5 10.1.2将App内容分享给微信好友 如果我们想APP软件中想把一些截图、链接等精彩内容分享到微信朋友圈,需要点击“分享”、“分享到朋友圈”按钮,完成授权后,内容就可以发送到微信的服务器。自己好友在朋友圈中就能马上看到分享的内容。还可以使用你的微信来查看分享内容(没有安装微信的用户将会被提示去下载安装), 将App内容分享到微信朋友圈

6 10.2Android 平台分享到微信开发流程 10.2.1申请AppID 10.2.2下载微信终端开发工具包
到微信开发平台资源中心下载开发工具包,主要包含3部分内容:libammsdk.jar(每个第三方应用必须要导入该sdk库,用于实现与微信的通信)、API文档(供开发者查阅使用)、 界面小工具源码(封装了界面表现的工具类,以及一些界面风格)。

7 10.2.3搭建开发环境 (1)在“豹考通”工程中找到libs目录,将开发工具包中libs目录下的libammsdk.jar复制到该目录中
将libammsdk.jar包复制到libs目录下

8 (2) 右击“豹考通”工程,找到Build Path中的Configure Build Path,在Libraries通过Add Jars导入工程libs目录下的libammsdk.jar文件,
将libammsdk.jar导入Libraries目录下

9 (3) 在AndroidManifest.xml文件中进行设置,添加必要的权限支持。
程序清单:SourceCode\Chapter10\Android\NewScore\AndroidManifest.xml <code class="code"> <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"/> </code>

10 (4)在代码中使用开发工具包 I .注册到微信 要使程序启动后微信终端能响应程序,必须在代码中向微信终端注册“豹考通”的id,可以在程序入口Activity的onCreate回调函数处或其他合适的地方将应用id注册到微信。 程序清单:SourceCode\Chapter10\Android\NewScore\ wxapi\ WXEntryActivity.java private static final int TIMELINE_SUPPORTED_VERSION = 0x********;//从官网上申请到的合法AppID private IWXAPI api;// IWXAPI 是第三方app和微信通信的openapi接口 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 通过WXAPIFactory工厂,获取IWXAPI的实例 api = WXAPIFactory.createWXAPI(this, Constants.WeiXin_App_Id, false); //将“豹考通”的AppID注册到微信 api.handleIntent(getIntent(), this); }

11 II. .发送请求或响应到微信 “豹考通”的程序要发送请求或发送响应到微信终端,可以通过IWXAPI的 sendReq 和 sendResp 两个方法来实现。sendReq是“豹考通”主动发送消息给微信,发送完成之后会切回到“豹考通”界面。sendResp是微信向“豹考通”请求数据,“豹考通”回应数据之后会切回到微信界面。sendReq的实现示例,如下面的清单文件所示。 程序清单:SourceCode\Chapter10\Android\NewScore\ score\util\ Util //初始化一个WXAppExtendObject对象 final WXAppExtendObject appdata = new WXAppExtendObject(); appdata.fileData = "豹考通贴心的志愿填报助手:\n①查询学校历年录取线\n②预测学校的投档线\n③推荐学校和专业\n④生成志愿报告单,\n详情请参考: appdata.extInfo = "来自豹考通的信息"; //用WXAppExtendObject对象初始化一个WXMediaMessage对象 final WXMediaMessage msg = new WXMediaMessage(); msg.setThumbImage(ThumbnailUtils.extractThumbnail(bmp, 200, 200)); msg.title = "豹考通"; msg.description = "豹考通贴心的志愿填报助手:\n①查询学校历年录取线\n②预测学校的投档线\n③推荐学校和专业\n④生成志愿报告单,\n详情请参考: msg.mediaObject = appdata; //构造一个req对象 SendMessageToWX.Req req = new SendMessageToWX.Req(); req.transaction = String.valueOf(System.currentTimeMillis()); req.message = msg; req.scene = flag == 0 ? SendMessageToWX.Req.WXSceneSession: SendMessageToWX.Req.WXSceneTimeline; //调用api接口发送数据到 wxApi.sendReq(req);

12 sendResp的实现示例,如下面的清单文件所示。
public void onResp(BaseResp resp) {// 第三方应用发送到微信的请求处理后的响应结果,会回调到该方法 String result = ""; switch (resp.errCode) { case BaseResp.ErrCode.ERR_OK: result = "分享成功!"; break; case BaseResp.ErrCode.ERR_USER_CANCEL: result = "取消分享!"; case BaseResp.ErrCode.ERR_AUTH_DENIED: result = "分享拒绝!"; default: result = "分享失败!"; } Toast.makeText(this, result, Toast.LENGTH_LONG).show(); Intent intent=new Intent(this,MainActivity.class); startActivity(intent); this.finish();

13 III. 接收微信的请求及返回值 为了接收微信发送的请求或者接收发送到微信请求的响应结果,需要下面操作: a. 在“豹考通”包目录下面新增加一个包,并再该包下新增一个WXEntryActivity类,该类继承自Activity, 新增WXEntryActivity类

14 并在AndroidManifest.xml清单文件里面加上exported属性,设置为true。
程序清单:SourceCode\Chapter10\Android\NewScore\AndroidManifest.xml <activity android:name="iet.jxufe.cn.android.score.wxapi.WXEntryActivity" android:exported="true" android:screenOrientation="portrait" /> b. 实现IWXAPIEventHandler接口,微信发送的请求将回调到onReq方法,发送到微信请求的响应结果将回调到onResp方法。 c. 在WXEntryActivity中将接收到的intent及实现了IWXAPIEventHandler接口的对象传递给IWXAPI接口的handleIntent方法。 程序清单:SourceCode\Chapter10\Android\NewScore\ score\util\ Util api.handleIntent(getIntent(), this); 当微信发送请求到你的应用,将通过IWXAPIEventHandler接口的onReq方法进行回调,类似的,应用请求微信的响应结果将通过onResp回调。

15 10.3IOS平台分享到微信的开发流程 10.3.1向微信注册AppID

16 10.3.2下载微信终端SDK文件 在微信开发平台资源中心下载分享微信开发工具包,主要包含三部分内容: libWeChatSDK.a,WXApi.h,WXApiObject.h, IOS资源下载中心

17 10.3.3搭建开发环境 (1)将下载好的SDK文件中 libWeChatSDK.a,WXApi.h,WXApiObject.h 三个文件添加到“豹考通”工程中SDKExport文件中, 添加SDK文件

18 (2)微信开放平台新增了微信模块用户统计功能,便于开发者统计微信功能模块的用户使用和活跃情况。开发者需要在工程中链接上:SystemConfiguration.framework,libz.dylib, Libsqlite3.0.dylib。 (3)在“豹考通”工程文件中选择Build Setting,在Search Paths中添加 libWeChatSDK.a ,WXApi.h,WXApiObject.h 三个文件所在位置,如图10-9所示。 (注:请使用Xcode4.5及以上版本) 添加SDK文件所在位置

19 (4) 在Xcode中,选择你的工程设置项,选中“TARGETS”一栏,在“info”标签栏的“URL type“添加“URL scheme”,也就是“豹考通”注册的 AppID.
添加SDK文件所在位置 (5)在“豹考通”API的文件中import WXApi.h 头文件,并增加 WXApiDelegate 协议。

20 导入WXApi.h头文件和增加WXApiDelegate 协议

21 10.3.4在代码中使用开发工具包 (1) 要使“豹考通”程序启动后微信终端能响应“豹考通”,必须在代码中向微信终端注册“豹考通”的id,如下图所示。这个id也就是开始我们在微信开放平台中申请的App id。 向微信终端注册“豹考通”的id

22 (2)现在“豹考通”要实现和微信终端交互的具体请求与回应,因此需要实现WXApiDelegate协议的reqonReq和resp两个方法。reqonReq方法是微信终端向“豹考通”发起请求,要求“豹考通”响应。“豹考通”响应完后必须调用sendRsp返回。在调用sendRsp返回时,会切回到微信终端程序界面。而Resp方法是“豹考通”向微信发送了sendReq的请求,那么onResp会被回调。sendReq请求调用后,会切到微信终端程序界面。 (3)如果“豹考通”程序要发消息给微信,那么需要调用WXApi的sendReq函数。(BOOL) sendReq:(BaseReq*)req其中req参数为SendMessageToWXReq类型。需要注意的是,SendMessageToWXReq的scene成员,如果scene填WXSceneSession,那么消息会发送至微信的会话内。如果scene填WXSceneTimeline,那么消息会发送至朋友圈。如果scene填WXSceneFavorite,那么消息会发送到“我的收藏”中。scene默认值为WXSceneSession。

23 接下来了解了IOS客户端微信分享的环境搭建及相关知识后,在项目中创建一个UIButton,用于进行微信分享。
程序清单:SourceCode\Chapter10\IOS\NewScore\ReportViewController.m 1. - (void)shareAction 2. { _ShareStyleActionSheet = [[UIActionSheet alloc]initWithTitle:nil delegate:self destructiveButtonTitle:nil nil]; _ShareStyleActionSheet.tag =1; _ShareStyleActionSheet.actionSheetStyle = UIActionSheetStyleBlackTranslucent; [_ShareStyleActionSheet showInView:self.myScrollView]; [_ShareStyleActionSheet release]; 8. }

24 这里我们创建了一个UIActionSheet的实例,并进行初始化,设置了三个按钮,分别是“发送给好友”、“分享到朋友圈”和“取消”,然后设置了UIActionSheet实例的tag值,便于调用它的协议方法。 1. - (void)sharedByWeChatWithText:(NSString *)WeChatMessage sceneType:(int)sceneType 2. { SendMessageToWXReq *req = [[[SendMessageToWXReq alloc] init]autorelease]; req.text = WeChatMessage; req.bText = YES; req.scene = sceneType; [WXApi sendReq:req]; 8. }

25 这是微信API为我们提供的分享图片的方法,调用此方法时,将需要分享的图片作为此方法的参数传入即可。
这个方法是分享文字的方法,注意方法里面通过SendMessageToWXReq 类的实例调用了sceneType方法,当值为0时,将文本消息发送给微信好友;当值为1时,将文本消息分享到朋友圈;当值为2时,将文本消息加入到微信收藏中。 1. - (void)sharedByWeChatWithImage:(UIImage *)image sceneType:(int)sceneType 2. { WXMediaMessage *message = [WXMediaMessage message]; [message setThumbImage:image]; WXImageObject *ext = [WXImageObject object]; ext.imageData = UIImagePNGRepresentation(image); message.mediaObject = ext; SendMessageToWXReq *req = [[[SendMessageToWXReq alloc] init]autorelease]; req.bText = NO; req.message = message; req.scene = sceneType; [WXApi sendReq:req]; 13. } 这是微信API为我们提供的分享图片的方法,调用此方法时,将需要分享的图片作为此方法的参数传入即可。

26 最后,我们需要实现UIActionSheet的协议方法,注意使用协议方法前,我们需要在
最后,我们需要实现UIActionSheet的协议方法,注意使用协议方法前,我们需要在.h文件中引入<UIActionSheetDelegate>。 1. #pragma mark - UIActionSheet Delegate 2. - (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex 3. { if (actionSheet.tag==1) { if (buttonIndex == 0) { [self sceneType:0]; } else if (buttonIndex == 1) { [self sceneType:1]; } } 12. } 当单击buttonIndex为0的按钮,也就是“发送给好友”时,我们的sceneType为0;当buttonIndxe为1时,也就是“分享到朋友圈”,sceneType为1,调用“sharedByWeChatWithText:”方法发送文本,同样的,你也可以调用sharedByWeChatWithImage方法发送图片,运行程序即可实现微信分享功能。

27 课后练习 1、在微信开发平台分别注册Android和IOS微信分享开发的AppId。
2、在微信平台上分别下载Android和IOS微信分享开发的工具,搭建Android和IOS微信分享开发的环境。 3、思考“豹考通”微信分享设计的思路,提出自己可以改进的见解。 4、从微信开发平台下载Android 平台参考手册或微信SDK Sample Demo源码查看相关内容。

28


Download ppt "第10章 App微信分享的实现 倚动实验室."

Similar presentations


Ads by Google