Android 微信分享成功后回调问题

如何让我们的App接收到微信的反馈?

1. 在你的包名相应目录下新建一个wxapi目录,并在该wxapi目录下新增一个WXEntryActivity类,该类继承自Activity,并在manifest文件里面加上exported属性,设置为true,允许该Activity被其他应用调用,这句话很重要。

<!-- 微信分享 配置begin -->
<meta-data android:name="WX_APPID" android:value="%微信开放平台申请应用的AppID%">
</meta-data>
<meta-data android:name="WX_SECRET" android:value="%微信开放平台申请应用的Secret%">
        </meta-data>
        <activity
            android:name="【包名】.wxapi.WXEntryActivity"
            android:label="@string/app_name"
            android:exported="true"
            android:launchMode="singleTop">
            <intent-filter>
                <action android:name="android.intent.action.VIEW"/>
                <category android:name="android.intent.category.DEFAULT"/>
                <data android:scheme="%微信开放平台申请应用的AppID%""/>
            </intent-filter>
        </activity>
        <!-- 微信分享 配置 end -->

2. 实现IWXAPIEventHandler接口,微信发送的请求将回调到onReq方法,发送到微信请求的响应结果将回调到onResp方法。

3. 在WXEntryActivity中将接收到的intent及实现了IWXAPIEventHandler接口的对象传递给IWXAPI接口的handleIntent方法。当微信发送请求到你的应用,将通过IWXAPIEventHandler接口的onReq方法进行回调,类似的,应用请求微信的响应结果将通过onResp回调。

其中,必须要新建WXEntryActivity类,实现IWXAPIEventHandler接口,同时该文件必须在${yourAppPackageName}.wxapi包下,回调才有作用

 

    在程序中我们并不需要自己主动的去启动WXEntryActivity,只需要把回调后的逻辑处理代码在onResq()这个回调接口中实现,处理完逻辑后将该Activity finish()掉就可以了. 

    在WXEntryActivity中一定要参考官方的文档,实现onNewIntent(Intent intent)方法,这个方法为微信客户端分享成功后回调我们应用中的WXEntryActivity类,通过newintent(Intent intent)来启动WXEntryActivity类,并在newIntent方法中通过IWXAPI接口中的handleIntent方法,注册监听

 

下面普及newIntent()方法的解释: 

Android onNewIntent的应用

onCreate是用来创建一个Activity也就是创建一个窗体,但一个Activty处于任务栈的顶端,若再次调用startActivity去创建它,则不会再次创建。若你想利用已有的Acivity去处理别的Intent时,你就可以利用onNewIntent来处理。在onNewIntent里面就会获得新的Intent.

如果IntentActivity处于任务栈的顶端,也就是说之前打开过的Activity,现在处于onPause onStop状态的话,其他应用再发送Intent的话,执行顺序为:
onNewIntent -> onRestart -> onStart -> onResume

onNewIntent(Intent intent) 是Activity类的方法.它被调用发几种情况如下:

  1.  android:launchMode="singleTask" 配置在 Mainifest 中,它保证了栈中此Activity总是只有一个,无论你启动它多少次;Activiy配置成android:launchMode="singleTask" ,在点Home键退出Activity而再次启动新的Intent进来时onNewIntent(Intent intent) 方法会被调用到; 

  2. 利用已有的Acivity去处理别的Intent时,你就可以利用onNewIntent来处理,通常被用在有搜索请求的activity,而其该activity有好几个intent-filter,该方法被调用的前提:
    a、该activity设置如下属性 android:launchMode="singleTop"。
    b、该activity已经处在栈的顶端,通过其他的方法又重新启动该acitvity时被调用,如搜索,这时oncreate()方法不调用。  

 

看完onnewIntent()方法的介绍后,大家应该明白一点了,我们就是将WXEntryActivity设置成singleTop了。

示例代码:

public class WXEntryActivity extends Activity implements IWXAPIEventHandler {
    private static CreditManager.KGainCreditType gainCreditType;
    private static long dataShareId;
    private IWXAPI api;
 
    public static void setTypeAndDataShareId(CreditManager.KGainCreditType type, long srcId) {
        gainCreditType = type;
        dataShareId = srcId;
    }
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.wx_entry_activity);
        initData();
    }
 
    @Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        setIntent(intent);
        initData();
    }
 
    private void initData() {
        api = OpenUtils.instance().getIWXAPI();
        api.handleIntent(getIntent(), this);
    }
 
    @Override
    public void onReq(BaseReq req) {
    }
 
    @Override
    public void onResp(BaseResp resp) {
        String result = null;
        switch (resp.errCode) {
            case BaseResp.ErrCode.ERR_OK: {
                CreditManager creditManager = ShuiDi.instance().getCreditManager();
                creditManager.submitGainCreditEventToServer(gainCreditType, dataShareId);
                result = "分享成功";
            }
            break;
            case BaseResp.ErrCode.ERR_USER_CANCEL:
                result = "分享取消";
                break;
            case BaseResp.ErrCode.ERR_AUTH_DENIED:
                result = "分享被拒绝";
                break;
            default:
                result = "分享返回";
                break;
        }
 
        Toast.makeText(this, result, Toast.LENGTH_LONG).show();
        this.finish();
    }
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值