我正在尝试设计一个从Google云端存储帐户下载相应声音文件的应用.该应用不会访问用户帐户,而是访问我自己的帐户.
我的阅读让我相信最合适的模式是服务帐户 https://code.google.com/p/google-api-java-client/wiki/OAuth2#Service_Accounts
不幸的是,开发人员决定不提供Android的示例.它们确实提供了一个很好的例子,只有普通的Java,可以运行 http://samples.google-api-java-client.googlecode.com/hg/storage-serviceaccount-cmdline-sample/instructions.html?r=default
我试图为Android调整这个并遇到问题.
GoogleCredential credential =
new GoogleCredential.Builder().setTransport(HTTP_TRANSPORT)
.setJsonFactory(JSON_FACTORY).setServiceAccountId(SERVICE_ACCOUNT_EMAIL)
.setServiceAccountScopes(STORAGE_SCOPE)
.setServiceAccountPrivateKeyFromP12File(new File("key.p12")).build();
Run Code Online (Sandbox Code Playgroud)
在Google的示例中,他们传递了key.p12文件,但是在Android上,当我将文件放在res/raw文件夹中时,我访问它的唯一方法就是作为输入流.我找不到一种优雅的方式来获取文件传递给JSON.
这一切都让我相信我一定是做错了.我应该使用key.p12我应该使用"服务帐户模型"吗?那里有一个例子/
谢谢瑞恩
更新我设法实现了让它工作的目标,但我的解决方案对我来说很笨拙,我确信这不是预期的方式
我所做的是添加key.p12作为我打开的原始/资源作为输入流.然后我使用库中转换为私钥,如示例中所示.
http://www.flexiprovider.de/examples/ExampleSMIMEsign.html
我的代码看起来像这样
Security.addProvider(new de.flexiprovider.core.FlexiCoreProvider());
// Next, we have to read the private PKCS #12 file, since the the
// private key used for signing is contained in this file:
DERDecoder dec = new DERDecoder(getResources().openRawResource(
R.raw.key));
PFX pfx = new PFX();
try {
pfx.decode(dec);
SafeBag safeBag = pfx.getAuthSafe().getSafeContents(0)
.getSafeBag(0);
PKCS8ShroudedKeyBag kBag = (PKCS8ShroudedKeyBag) safeBag
.getBagValue();
char[] password = "my password from …Run Code Online (Sandbox Code Playgroud) 使用NSNotification.userInfo中的NSNumber [UIKeyboardAnimationCurveUserInfoKey]
目标CI将执行以下操作
[UIView animateWithDuration:1.0
delay:0
options:(curveValue.intValue << 16)
Run Code Online (Sandbox Code Playgroud)
即使bitshift运算符相同,Swift也不允许我这样做.我想获得相当于枚举的原始值
UIViewAnimationOptionCurveEaseInOut = 0 << 16,
UIViewAnimationOptionCurveEaseIn = 1 << 16,
UIViewAnimationOptionCurveEaseOut = 2 << 16,
UIViewAnimationOptionCurveLinear = 3 << 16,
更新
我不确定以下方法是否正确,似乎有效
var animationCurve : UIViewAnimationOptions = UIViewAnimationOptions.CurveEaseOut
info[UIKeyboardAnimationCurveUserInfoKey].getValue(&animationCurve)
UIView.animateWithDuration(durationValue.doubleValue,
delay: 0,
options: animationCurve,
animations: {self.navigationController.toolbar.frame = myRect},
completion: nil)
Run Code Online (Sandbox Code Playgroud) 在Xcode 7.1/El Capitan上使用xcodebuild构建时出错
重启没有帮助.
xcodebuild -workspace CL.xcworkspace -scheme CL -configuration Release
2015-11-12 11:55:49.889 ibtoold[5348:95303] [MT] DVTAssertions:
Warning in
/Library/Caches/com.apple.xbs/Sources/IDEInterfaceBuilder/IDEInterfaceBuilder-9059/InterfaceBuilderKit/Utilities/IBAbstractInterfaceBuilderPlatformToolManager.m:253
Details: Failed to attach to Interface Builder Cocoa Touch Tool with error:
Error Domain=com.apple.InterfaceBuilder Code=-1 "Encountered an error
communicating with Interface Builder Cocoa Touch Tool."
UserInfo={NSUnderlyingError=0x7fda54ba7cc0 {Error
Domain=com.apple.InterfaceBuilder Code=-1 "Failed to launch Interface Builder
Cocoa Touch Tool via CoreSimulator spawn"
UserInfo={NSLocalizedDescription=Failed to launch Interface Builder Cocoa Touch
Tool via CoreSimulator spawn, NSUnderlyingError=0x7fda54b36cf0 {Error
Domain=com.apple.InterfaceBuilder Code=-1 "Failed to handshake with platform
tool" …Run Code Online (Sandbox Code Playgroud) 我试图了解使用 WKWebview 执行 javascript 的最佳方式
有人可以给我使用 WKWebView 时的用例/最佳实践。
何时使用addUserScript和WKScriptMessageHandler以及何时使用evaluateJavaScript
let jscript = "my script"
let userScript = WKUserScript(source: jscript, injectionTime: .atDocumentEnd, forMainFrameOnly: true)
let userContentController = WKUserContentController()
userContentController.addUserScript(userScript)
let webViewConfiguration = WKWebViewConfiguration()
webViewConfiguration.userContentController = userContentController
webView = WKWebView(frame: self.view.bounds, configuration: webViewConfiguration)
Run Code Online (Sandbox Code Playgroud)
对比
let myScript
self.wkWebView.evaluateJavaScript(script) { (result, error) in
if error != nil {
print("\(error)")
}
}
Run Code Online (Sandbox Code Playgroud) 我在IOS 7和IOS 8设备上运行相同的代码,结果不同
给定一个带有两个文本字段的屏幕
在IOS 7中,如果我触摸第一个字段,则键盘会被调用,但是如果我在键盘已经显示时触摸第二个字段,则不再调用第二个字段.
在IOS 8中,keyboardWillShow被调用两次
这是记录在案的行为?
我想了解我从 Firbase IOS 收到的警告
<FIRAnalytics/WARNING> setScreenName:screenClass: must be called after a view controller has appeared
Run Code Online (Sandbox Code Playgroud)
我的 info.plist 包含
FirebaseAutomaticScreenReportingEnabled = NO
Run Code Online (Sandbox Code Playgroud)
我在打电话
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
recordScreenView()
}
func recordScreenView() {
// title from the story board
// These strings must be <= 36 characters long in order for setScreenName:screenClass: to succeed.
guard let screenName = title else {
return
}
let screenClass = classForCoder.description()
// [START set_current_screen]
GCITracking.sharedInstance.trackSetScreenName(screenName, screenClass: screenClass)
// [END set_current_screen]
}
Run Code Online (Sandbox Code Playgroud)
从示例应用程序中获取的代码
我没有按预期看到我的屏幕事件,但我不确定这是否与我的代码有关还是 …
我刚刚开始学习Android的OpenCV,我已经玩了一下它一切正常.
我安装了NDK并设法运行包含它的一些示例应用程序.
我不清楚我们需要什么NDK.我在文档中的任何地方都找不到它.
是否有常规库2.4.8中没有的OpenCV功能?
是这样我们可以使用其他人提供的用c ++编写的模块,而不是用java重写它们吗?
我希望创建一个等效的Swift方法
+ (void)insertFileWithService:(GTLServiceDrive *)service
title:(NSString *)title
Run Code Online (Sandbox Code Playgroud)
当我输入
func insertFileWithService(service: GTLServiceDrive,
title title: String,
Run Code Online (Sandbox Code Playgroud)
我得到一个警告标题标题可以更简洁地表达为#title
但当我将其更改为func insertFileWithService(service:GTLServiceDrive,#title:String
我得到一个警告参数title中的无关'#'已经是关键字参数名称
我应该忽略这些警告并将其归结为Beta中的错误吗?
我有一个临时使用大量沙箱缓存的应用程序。我想通过不填充超出触发点的磁盘来防止操作系统触发“存储几乎已满”警告。
我找不到有关如何设置此级别的文档。
是否可以为用户配置?它是设备或 IOS 版本独有的吗?

ios ×6
swift ×3
android ×2
android-ndk ×1
firebase ×1
google-api ×1
javascript ×1
oauth-2.0 ×1
opencv ×1
wkwebview ×1
xcode10 ×1
xcode7 ×1
xcodebuild ×1