友盟集成微信分享的步骤和我踩过的坑

友盟集成微信分享的步骤和我踩过的坑

  • 因工作原因,要集成微信分享,用友盟,实现分享朋友圈和分享给好友

1、申请友盟的appid。这个看文档吧。
2、项目中配置友盟

  • 在清单文件中如下,这里要说明,要在项目的报名下建一个文件夹,建wxapi文件夹,新建一个名为WXEntryActivity的activity继承WXCallbackActivity。这里注意一定是包名路径下,例如我的包名是com.umeng.soexample,则配置如下:(需要注意,如果使用精简版WXCallbackActivity的路径为com.umeng.weixin.callback.WXCallbackActivity,如果使用完整版路径是com.umeng.socialize.weixin.view.WXCallbackActivity)
 
         <meta-data
            android:name="UMENG_APPKEY"
            android:value="59b205433eae25763000019b" >
        meta-data>

        
        <meta-data
            android:name="UMENG_CHANNEL"
            android:value="${UMENG_CHANNEL_VALUE}"
           />

        
        <activity
            android:name=".wxapi.WXEntryActivity"
            android:configChanges="keyboardHidden|orientation|screenSize"
            android:exported="true"
            android:screenOrientation="portrait"
            android:theme="@android:style/Theme.Translucent.NoTitleBar" />
  • 在application中
public class App extends Application{
    {
            PlatformConfig.setWeixin("wx967daebe835fbeac", "5bb696d9ccd75a38c8a0bfe0675559b3");
                    PlatformConfig.setQQZone("100424468", "c7394704798a158208a74ab60104f0ba");
                    PlatformConfig.setSinaWeibo("3921700954", "04b48b094faeb16683c32669824ebdad", "http://sns.whalecloud.com");
    }
    @Override
        public void onCreate() {
                super.onCreate();
                UMShareAPI.get(this);
        }
    }

3、在分享的activity中



public class BAddSingleCircleActivity extends BaseActicity implements OnActionViewClickListener {




    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

    }






    @Override
    public void onClick(View view) {


        switch (view.getId()){          

            case R.id.ll_share_weixin:
                //分享给好友

                UMWeb web = new UMWeb(“web分享的url”);
                web.setTitle("This is web title");
                web.setThumb(new UMImage(this, R.mipmap.ic_launcher));
                web.setDescription("my description");
                new ShareAction(this)
                        .withText("waterTheGreat")
                        .withMedia(web)
                        .setPlatform(SHARE_MEDIA.WEIXIN.toSnsPlatform().mPlatform)
                        .setCallback(shareListener).share();

                break;
            case R.id.ll_share_weixin_circle:
                //分享到朋友圈
                UMWeb web = new UMWeb(“web分享的url”);
                web2.setTitle("This is web title");
                web2.setThumb(new UMImage(this, R.mipmap.ic_launcher));
                web2.setDescription("my description");
                new ShareAction(this)
                        .withText("waterTheGreat")
                        .withMedia(web2)
                        .setPlatform(SHARE_MEDIA.WEIXIN_CIRCLE.toSnsPlatform().mPlatform)
                        .setCallback(shareListener).share();
                break;

        }

    }

    private UMShareListener shareListener = new UMShareListener() {
        /**
         * @descrption 分享开始的回调
         * @param platform 平台类型
         */
        @Override
        public void onStart(SHARE_MEDIA platform) {
            showProgressDialog(BAddSingleCircleActivity.this);
        }

        /**
         * @descrption 分享成功的回调
         * @param platform 平台类型
         */
        @Override
        public void onResult(SHARE_MEDIA platform) {
            Toast.makeText(BAddSingleCircleActivity.this,"分享成功",Toast.LENGTH_LONG).show();
            dismissProgressDialog();
        }

        /**
         * @descrption 分享失败的回调
         * @param platform 平台类型
         * @param t 错误原因
         */
        @Override
        public void onError(SHARE_MEDIA platform, Throwable t) {
            dismissProgressDialog();
            Log.e("shareUM"," error Message:"+t.getMessage());
            Toast.makeText(BAddSingleCircleActivity.this,"分享失败",Toast.LENGTH_LONG).show();
        }

        /**
         * @descrption 分享取消的回调
         * @param platform 平台类型
         */
        @Override
        public void onCancel(SHARE_MEDIA platform) {
            dismissProgressDialog();
            Toast.makeText(BAddSingleCircleActivity.this,"取消了",Toast.LENGTH_LONG).show();

        }
    };

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        UMShareAPI.get(this).onActivityResult(requestCode,resultCode,data);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        UMShareAPI.get(this).release();
    }
}

基本上完成了。但是有几个坑
1、在申请微信的appid和appSecret的时候,要输入包名和签名,签名最好用平台上的签名工具生成。(注意:不是appstore_test.jks签名文件的哈希HSA1值),签名是个类似于“5d5d96f04291aca171029293c0ead16c”样的字符串。

2、如果之前写错了签名,可以在平台上修改,且立刻生效。但要讲之前的测试手机的微信删除重装。因为微信会记录之前的错误的签名文件。导致改对了也一直测试不通过。(我就坑在这里一个通宵)

3、可以使用友盟的debug的方式来快速查找错误,只需要一行代码。在application的初始化的时候加入下面的代码就可以了!

com.umeng.socialize.Config.DEBUG=true;
UMShareAPI.get(this);

你可能感兴趣的:(android开发)