游戏的安卓包接微信分享的时候遇到一个问题
按照微信demo照做很快就把分享做好
按照参数设置,可以分享给好友,朋友圈或者自己收藏
正常情况下,用户分享结果----即分享到底是被用户confirm了还是cancel了回回调通知游戏
但这一步实现起来却遇到了麻烦
下面就来总结一下
1.主要分享逻辑
WXWebpageObject webpage = new WXWebpageObject(); webpage.webpageUrl = "http://www.baidu.com"; WXMediaMessage msg = new WXMediaMessage(webpage); msg.title = "WebPage Title WebPage Title WebPage Title WebPage Title WebPage Title WebPage Title WebPage Title WebPage Title WebPage Title Very Long Very Long Very Long Very Long Very Long Very Long Very Long Very Long Very Long Very Long"; msg.description = "WebPage Description WebPage Description WebPage Description WebPage Description WebPage Description WebPage Description WebPage Description WebPage Description WebPage Description Very Long Very Long Very Long Very Long Very Long Very Long Very Long"; Bitmap thumb = BitmapFactory.decodeResource(getResources(), R.drawable.send_music_thumb); msg.thumbData = Util.bmpToByteArray(thumb, true); SendMessageToWX.Req req = new SendMessageToWX.Req(); req.transaction = buildTransaction("webpage"); req.message = msg; req.scene = isTimelineCb.isChecked() ? SendMessageToWX.Req.WXSceneTimeline : SendMessageToWX.Req.WXSceneSession; api.sendReq(req);
sdk的demo里面有各种格式的分享代码
这里以分享网页为例
实现了这一段就可以将内容分享至微信了
2.结果消息通知
通知结果会由IWXAPIEventHandler处理
这里实例化一个IWXAPIEventHandler或者implements一个IWXAPIEventHandler去处理应该都可以
官方例子是implements了IWXAPIEventHandler接口
// 微信发送请求到第三方应用时,会回调到该方法 @Override public void onReq(BaseReq req) { switch (req.getType()) { case ConstantsAPI.COMMAND_GETMESSAGE_FROM_WX: goToGetMsg(); break; case ConstantsAPI.COMMAND_SHOWMESSAGE_FROM_WX: goToShowMsg((ShowMessageFromWX.Req) req); break; default: break; } } // 第三方应用发送到微信的请求处理后的响应结果,会回调到该方法 @Override public void onResp(BaseResp resp) { int result = 0; switch (resp.errCode) { case BaseResp.ErrCode.ERR_OK: result = R.string.errcode_success; break; case BaseResp.ErrCode.ERR_USER_CANCEL: result = R.string.errcode_cancel; break; case BaseResp.ErrCode.ERR_AUTH_DENIED: result = R.string.errcode_deny; break; default: result = R.string.errcode_unknown; break; } Toast.makeText(this, result, Toast.LENGTH_LONG).show(); }
其实主要用到的就是onResp函数
其中会得到分享结果
然而还需要实现一些细节才可以让一起正常工作
这个至今我也没找到官方是不是有详细文档
大致如下
2.1Java代码
// 通过WXAPIFactory工厂,获取IWXAPI的实例
api = WXAPIFactory.createWXAPI(this, Constants.APP_ID, false);
// 将该app注册到微信
api.registerApp(Constants.APP_ID);
// 绑定IWXAPIEventHandler实例,即this
api.handleIntent(getIntent(), this);
另外activity还有重写这个方法
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
setIntent(intent);
api.handleIntent(intent, this);
}
零散的代码大概就需要注意这些
2.2在xml中正确配置
<activity
android:name=".wxapi.WXEntryActivity"
android:label="@string/app_name"
android:exported="true"
android:launchMode="singleTop">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:scheme="sdksample"/>
</intent-filter>
</activity>
这个配置也很重要
2.3路径位置
将SDK包weixin目录下的wxapi文件夹拷贝到您的工程的包目录下, 然后修改WXEntryActivity的完整路径即可。 例如social_sdk_example的包名为com.umeng.soexample,因此将wxapi文件夹拷贝到com.umeng.soexample下,最终WXEntryActivity的 完整路径为com.umeng.soexample.wxapi.WXEntryActivity。请不要修改我们的WXEntryActivity
路径位置很容易被忽略!
自己在这里耽误了很长时间
做好这些 大概就ok了
参考如下
http://bbs.umeng.com/thread-6214-1-1.html
http://www.tuicool.com/articles/e63IRr
浙公网安备 33010602011771号