利用activity-alies解决微信支付的包名WXPayEntryActivity不一致问题

总结之前的一些资料

本文:https://blog.csdn.net/CrazyApes/article/details/122792216

@[toc]

前言

在集成微信支付的过程中,WXPayEntryActivity类要求必须放在 包名+wxapi 路径下,否则是无法成功回调的。

4、支付结果回调 (引自微信支付文档
参照微信SDK Sample,在net.sourceforge.simcpux.wxapi包路径中实现WXPayEntryActivity类(包名或类名不一致会造成无法回调),在WXPayEntryActivity类中实现onResp函数,支付完成后,微信APP会返回到商户APP并回调onResp函数,开发者需要在该函数中接收通知,判断返回错误码,如果支付成功则去后台查询支付结果再展示用户实际支付结果。注意一定不能以客户端返回作为用户支付的结果,应以服务器端的接收的支付通知或查询API返回的结果为准。

这对于一些中间件的开发或者一些特殊SDK的单独封装很不友好,毕竟不会对单一应用使用,可能涉及到多种包名的情况。
之前看文档的时候,了解过activity-alies的一些资料,一般用于桌面应用的快捷入口。如果你了解的话,会发现也非常适用于微信支付的WXPayEntryActivity设置。

解决方案

先敲定解决方案,想了解内容的,接着往下看。

WXPayEntryActivity类

我们假设不知道主体包名,定义WXPayEntryActivity类

package com.modules.pay.wxapi;
public class WXEntryActivity extends WXCallbackActivity {
    ...
}

package com.modules.pay.wxapi;
public class WXPayEntryActivity extends ... {
    ...
}

Manifest声明

利用<activity-alias>中的属性设置相关内容

  • name 标签设置别名
    利用 ${applicationId} 直接指向目标包名
    android:name="${applicationId}.wxapi.WXPayEntryActivity"
  • targetActivity 标签指向目标Activity
    比如我们声明的WXPayEntryActivity在com.modules.pay.wxapi
    android:targetActivity="com.modules.pay.wxapi.WXPayEntryActivity"
  • 其它属性根据实际需要设置即可
    例如exported属性还是要设置为true的,否则无法被微信调起。
<manifest ...>
    <application>

        <!-- 原始声明要早于别名声明  -->
        <activity
            android:name="com.modules.pay.wxapi.WXPayEntryActivity"
            android:exported="true"
            android:label="@string/app_name"
            android:launchMode="singleTop"
            android:screenOrientation="portrait">
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />
                <category android:name="android.intent.category.DEFAULT" />
                <data android:scheme="wx..." />
            </intent-filter>
        </activity>

        <!-- 原始声明要早于别名声明  -->
        <activity
            android:name="com.modules.pay.wxapi.WXEntryActivity"
            android:configChanges="keyboardHidden|orientation|screenSize"
            android:exported="true"
            android:screenOrientation="portrait"
            android:theme="@android:style/Theme.Translucent.NoTitleBar" />

        <!-- 别名声明  -->
        <activity-alias
            android:name="${applicationId}.wxapi.WXEntryActivity"
            android:configChanges="keyboardHidden|orientation|screenSize"
            android:exported="true"
            android:screenOrientation="portrait"
            android:targetActivity="com.modules.pay.wxapi.WXEntryActivity"
            android:theme="@android:style/Theme.Translucent.NoTitleBar" />
        <!-- 别名声明  -->
        <activity-alias
            android:name="${applicationId}.wxapi.WXPayEntryActivity"
            android:exported="true"
            android:label="@string/app_name"
            android:launchMode="singleTop"
            android:screenOrientation="portrait"
            android:targetActivity="com.modules.pay.wxapi.WXPayEntryActivity">
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />
                <category android:name="android.intent.category.DEFAULT" />
                <data android:scheme="wx..." />
            </intent-filter>
        </activity-alias>

    </application>
</manifest>

<activity-alies>

以下为拓展知识了,想了解的可以继续看看。


<activity-alias android:enabled=["true" | "false"]
                    android:exported=["true" | "false"]
                    android:icon="drawable resource"
                    android:label="string resource"
                    android:name="string"
                    android:permission="string"
                    android:targetActivity="string" >
        . . .
</activity-alias>

  • 说明
    Activity 的别名,由 targetActivity 属性命名。
    目标必须与别名在同一应用中,并且在清单中必须在别名之前进行声明
    别名将目标 Activity 呈现为独立实体。它可以具有自己的一组 Intent 过滤器,这些 Intent 过滤器(而不是目标 Activity 本身的 Intent 过滤器)决定了哪些 Intent 可以通过别名激活目标,以及系统如何处理别名。例如,别名的 Intent 过滤器可以指定 android.intent.action.MAINandroid.intent.category.LAUNCHER 标志,以使其呈现在应用启动器中,即使目标 Activity 本身的任何过滤器都未设置这些标志。
    除了 targetActivity 之外,<activity-alias> 属性是 <activity> 属性的子集。对于子集中的属性,为目标设置的任何值都不会沿用于别名。不过,对于不在子集中的属性,为目标 Activity 设置的值也会应用于别名。

  • android:name
    别名的唯一名称。该名称应类似于完全限定类名。但是,与目标 Activity 的名称不同,别名名称是任意的,它不引用实际类。

  • android:targetActivity
    可通过别名激活的 Activity 的名称。此名称必须与清单中别名前面的 <activity> 元素的 name 属性匹配。

  • android:enabled
    系统是否可以通过此别名实例化目标 Activity。如果可以,则设为“true”;如果不能,则设为“false”。默认值为“true”。
    <application> 元素具有自己的 enabled 属性,该属性适用于所有应用组件,包括 Activity 别名。<application> 和 <activity-alias> 属性必须都设为“true”,系统才能通过别名实例化目标 Activity。如果其中任一属性设为“false”,则别名不起作用。

  • android:exported
    其他应用的组件是否可以通过此别名启动目标 Activity。如果可以,则设为“true”;如果不能,则设为“false”。如果设为“false”,则只有与别名在同一应用中的组件或具有同一用户 ID 的应用的组件可以通过别名启动目标 Activity。
    默认值取决于别名是否包含 Intent 过滤器。没有任何过滤器表示只有指定别名的确切名称才能通过别名调用 Activity。这意味着别名仅供应用内部使用(因为其他应用不知道其名称),所以默认值为“false”。另一方面,至少存在一个过滤器意味着别名供外部使用,所以默认值为“true”。

参考文献

<activity-alies> 谷歌文档
微信支付 App文档

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,444评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,421评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,036评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,363评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,460评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,502评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,511评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,280评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,736评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,014评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,190评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,848评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,531评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,159评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,411评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,067评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,078评论 2 352

推荐阅读更多精彩内容