ANDROID新浪微博、微信分享

用的各平台原生的分享SDK,未采用第三方集成的SDK(例如ShareSDK、友盟U-Share等)。

原因有三:
  1. 不想暴露自己的AppKey、AppID等信息给第三方;
  2. 第三方集成的原生SDK可能不是最新的,或者是排版不对;
  3. 遇到奇怪问题的时候,于第三方客服沟通,有时会解决不了;
注意事项:
  1. 最好是先注册好账号,申请相应的AppKey或AppID;
  2. ANDROID的坑贼多,做好心理准备;

1. SDK文件相关配置

  • 下载相关SDK,将SDK文件放到对应的lib文件夹(按自己项目的lib文件夹来)下,如下图:
    ANDROID新浪微博、微信分享_第1张图片

    微信:libammsdk.jar
    新浪微博:libweibosdkcore.soweiboSDKCore_3.1.4.jar
  • 添加新浪微博和微信分享的回调界面(Activity),如下图:
    ANDROID新浪微博、微信分享_第2张图片

    注意:图中有两个WXEntryActivity(这个问题到后面再说)。
  • 配置AndroidManifest.xml
    
         
         
         
         
         
             
                 
                 
             
         
         
         
         
         
         
    
    
    
    
    
    
    
    
    
    

2. 编写自己需要分享的代码

(1)微信

WXEntryActivity.java,主要功能:接收微信分享回调。这个文件一定要放在包名的路径下,ApkPackageName.wxapi下,比如:com.share.demo.wxapi,文件的最后路径为com.share.demo.wxapi. WXEntryActivity
注意public class WXEntryActivity extends Activity implements IWXAPIEventHandler 一定要这么写

(2)新浪

WBShareActivity.java,主要功能:接收新浪分享回调。这个文件一定要放在包名的路径下,ApkPackageName下,比如:com.share.demo,文件最后的路径为com.share.demo. WBShareActivity
注意

  • public class WBShareActivity extends Activity implements IWeiboHandler.Response, WeiboAuthListener 一定要这么写
  • 新浪微博有两种方式分享:1. Web分享;2. 微信分享
    所以要用sendMultiMessage方式分享
    private void sendMultiMessage(String filePath) {
       
       // 1. 初始化微博的分享消息
       WeiboMultiMessage weiboMessage = new WeiboMultiMessage();
       weiboMessage.textObject = getTextObj();
       weiboMessage.imageObject = getImageObj(filePath);
       
       // 2. 初始化从第三方到微博的消息请求
       SendMultiMessageToWeiboRequest request = new SendMultiMessageToWeiboRequest();
       // 用transaction唯一标识一个请求
       request.transaction = String.valueOf(System.currentTimeMillis());
       request.multiMessage = weiboMessage;
    
       //这里直接调用客户端,避免与Web分享时的token冲突
       if (mWeiboShareAPI.isWeiboAppInstalled()) {
           boolean isSuccess = mWeiboShareAPI.sendRequest(WBShareActivity.this, request);
           //Log.e("sinaweibo", "sinaweibo send share msg result is : " + isSuccess);
           return;
       }
       
       AuthInfo authInfo = new AuthInfo(this, GameShare.SinaWeiboAppKey, GameShare.SinaWeiboRedirectUrl, GameShare.SinaWeiboScope);
       Oauth2AccessToken accessToken = GameShare.getAccessToken();
       String token = "";
       if (accessToken != null) {
           token = accessToken.getToken();   //读取保存过的token
       }
       
       boolean isSuccess = mWeiboShareAPI.sendRequest(this, request, authInfo, token, this);
       //Log.e("sinaweibo", "sinaweibo send share msg result is : " + isSuccess);
    }
    
  • 新浪用Web方式分享时,记得要保存验证过的token,否则每次启动游戏都会要用户登录微博
    @Override
    public void onWeiboException( WeiboException arg0 ) {
       Log.e("sinaweibo", "WeiboAuthListener onWeiboException: ");
       arg0.printStackTrace();
       GameShare.deleteImage();
       finish();
    }
    
    @Override
    public void onComplete( Bundle bundle ) {
       // TODO Auto-generated method stub
       Oauth2AccessToken newToken = Oauth2AccessToken.parseAccessToken(bundle);
       GameShare.setAccessToken(newToken);
    }
    
    @Override
    public void onCancel() {
       Log.e("sinaweibo", "WeiboAuthListener oncancel");
       GameShare.deleteImage();
       finish();
    }
    
  • 新浪微博的分享方式:必须通过开启新的WBShareActivity进行分享。
    Intent intent = new Intent(getContext(), com.share.demo.WBShareActivity.class);
    intent.putExtra("FILE_PATH", curImagePath);
    getContext().startActivity(intent);
    

总结:

android的配置很容易,但是配置完后遇到的坑还是很多的。


可能遇到的坑

微信的坑:

  • 图片路径问题,分享的本地图片一定要放在SDCARD的路径里面,如果截图后保存在/data/data/com.share.demo/files/文件夹下,必须把图片复制到SDCARD
  • 截图后的缩略图一定要保证大小<=32KB(32*1024)
    //保证thumbData.length <= 32*1024
    msg.thumbData = bmpToByteArray(thumbBmp, true);
    
  • AndroidManifest.xml里面配置的回调界面的包名前缀,一定要跟打出来的包名一样
  • 包名和签名一定要跟申请AppID时填写的一模一样

新浪微博的坑

  • 新浪微博的缩略图是自带的lib文件计算的,所以只要保证截图不是特别大就行
  • AndroidManifest.xml里面配置的回调界面的包名前缀,可以跟打出来的包名不要一样,但是如果不一样,回调回来时,不是退回应用,而是退到主界面(和Home键的效果一样)
  • AndroidManifest.xml里面配置的回调界面的包名前缀、包名和签名一定要存在申请AppKey时填写的信息中
  • 目前微博有几个已知BUG:
    • 用Web分享时,如果分享成功后,在等待关闭的3秒内,点左上角的关闭,那么只会收到取消分享的回调,而不是分享成功的回调
    • 用微博客户端分享时,如果是刚安装的微博(未登录),那么点击分享时,会要求用户登录微博,如果在此时关闭微博,那么退回应用时,会停留在开启的WBShareActivity界面(即没有收到任何回调)

游戏多渠道处理

查了好久资料,没有查到相关信息。所以只能用一些奇怪的办法。

  • 微博多渠道
    只要在申请AppKey的地方填写多个包名和签名,然后在AndroidManifest.xml里面配置一个回调界面。有个副作用就是,如果配置的包名前缀和当前包名不一样,那么回调回来后是退回到主界面,而不是应用。
  • 微信多渠道
    前面提到了配置多个WXEntryActivity,就是为了这个多渠道,在AndroidManifest.xml里面也要配置多个回调界面。然后通过包名向服务器取到正确的AppID后,再初始化微信Api。
如果大家有更好的多渠道方式,还请教教我,感谢感谢!~~~

--------------------------- 分割线 ---------------------------
更新时间:2016年12月16日14:23
工具:点我跳转
用这个工具查看了下《阴阳师》里面分享的代码,豁然开朗。


IOS新浪微博、微信分享:点我跳转

你可能感兴趣的:(ANDROID新浪微博、微信分享)