android - react-native Android Module 打开 PassWallet
问题描述
我想在我的 react-native 应用程序中保存一个 .pkpass WalletPass。我使用此开发人员指南中的信息制作了一个模块:http: //passwallet.attidomobile.com/PassWallet%20Developer%20Guide.pdf我的模块如下所示:
PassWallet.java:
package mypackage;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
import com.facebook.react.bridge.ReactMethod;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
public class PassWallet extends ReactContextBaseJavaModule {
public PassWallet(ReactApplicationContext reactContext) {
super(reactContext);
}
public String getName() {
return "PassWallet";
}
@ReactMethod
public void saveToPassWallet(String url) {
launchPassWallet(getReactApplicationContext().getApplicationContext(), Uri.parse(url), true);
}
private boolean launchPassWallet(Context applicationContext, Uri uri, boolean launchGooglePlay) {
if (null != applicationContext) {
PackageManager packageManager = applicationContext.getPackageManager();
if (null != packageManager) {
final String strPackageName = "com.attidomobile.passwallet";
Intent startIntent = new Intent();
startIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startIntent.setAction(Intent.ACTION_VIEW);
Intent passWalletLaunchIntent = packageManager.getLaunchIntentForPackage(strPackageName);
if (null == passWalletLaunchIntent) {
// PassWallet isn't installed, open Google Play:
if (launchGooglePlay) {
String strReferrer = "";
try {
final String strEncodedURL = URLEncoder.encode(uri.toString(), "UTF-8");
strReferrer = "&referrer=" + strEncodedURL;
}
catch (UnsupportedEncodingException e) {
e.printStackTrace();
strReferrer = "";
}
try {
startIntent.setData(Uri.parse("market://details?id=" + strPackageName + strReferrer));
applicationContext.startActivity(startIntent);
}
catch (android.content.ActivityNotFoundException anfe) {
// Google Play not installed, open via website
startIntent.setData(Uri.parse("http://play.google.com/store/apps/details?id=" + strPackageName + strReferrer));
applicationContext.startActivity(startIntent);
}
}
}
else {
final String strClassName = "com.attidomobile.passwallet.activity.TicketDetailActivity";
startIntent.setClassName(strPackageName, strClassName);
startIntent.addCategory(Intent.CATEGORY_BROWSABLE);
startIntent.setDataAndType(uri, "application/vnd.apple.pkpass");
applicationContext.startActivity(startIntent);
return true;
}
}
}
return false;
}
}
我正确添加了模块,并且可以在我的 react-native javascript 文件中打开它:
const AndroidWalletManager = NativeModules.PassWallet;
...
AndroidWalletManager.saveToPassWallet(url);
...
当我打开一个 .pkpass 文件并且未安装钱包应用程序(PassWallet,如开发人员指南的链接)时,Play 商店会正确打开。但是安装应用程序时会显示以下错误:
我不是android开发人员,所以也许这是一个基本问题,但我不知道如何解决这个问题。如果我不得不猜测我会说 PassWallet 应用程序更改了活动名称,这是正确的吗?我有这个解决方案大约两年了,它在过去有效。我联系了这个开发者指南的作者,但到目前为止没有得到回复。有一个更好的方法吗?
我只想能够将 .pkpass 直接保存到 android 上的钱包应用程序中。
解决方案
活动名称在 2.00.XX 大版本后更改 请在此处找到最新说明:https ://github.com/Kwiket/passwallet
密码钱包团队
推荐阅读
- installation - Gettig make *** [World] 在 Ubuntu 18.04 Virtual Box 上安装 SRILM 时出现错误 2,pthread 警告
- google-cloud-firestore - Firestore:使用 request.resource.size 规则返回 FirebaseError:缺少权限或权限不足
- scala - SBT 在完成测试时断开数据库客户端
- kubernetes - 在目录中找到包含特定内容的文件,然后仅使用该文件运行命令
- java - 如何获取从缓冲阅读器文件中获得的数字?
- css - 更喜欢减少动作媒体查询并没有让我拥有带有动画的 Bootstrap 模态
- c# - BlobStorageService 的 .net 核心替换
- linkedin - 营销开发者平台 - 测试机构的使用
- c++ - boost::posix_time::time_facet 和 boost::posix_time::time_input_facet 之间的“%f”行为不一致
- xcode - Info.plist:操作无法完成。(XCBUtil.PropertyListConversionError 错误 0。)