如果我将验证卸载到远程服务器,我认为该过程将是这样的:
Android Market Application Remote Server
|--------IN_APP_NOTIFY------->| |
| |-----nonce----->|
| |<----nonce------|
|<-GET_PURCHASE_STATE_CHANGED-| |
|---PURCHASE_STATE_CHANGED--->| |
| |--verification->|
| |<-verification--|
Run Code Online (Sandbox Code Playgroud)
如果我理解正确,那么nonce就是减少重放攻击漏洞,验证是为了减少欺骗漏洞.此外,文档建议卸载安全处理的原因是验证步骤需要访问我的公共Android Market发布者密钥,远程服务器的目标是保持所述密钥不需要在我的代码中包含/计算.
第一个问题,远程服务器是否有安全原因进行nonce生成/检查?按下验证步骤正确完成,我们会从远程服务器中发现消息是否被欺骗.所以在我看来,nonce就是在那里检测某人转播IN_APP_NOTIFY.
第二个问题,为什么我们的公钥是文字字符串?文档说,"你不想让黑客或恶意用户轻易用另一个密钥替换公钥." 我不清楚有人可以利用我的应用程序,即使他们可以编辑二进制文件以包含恶意公钥而无需重新签名应用程序.
第三个问题,我是否会尝试从远程服务器验证验证时遇到所有这些问题(例如,将公钥存储到应用程序中的远程服务器)?
第四个问题,如果我想将这个购买验证的结果存储在手机上,那么所有这些额外的安全性都是徒劳的(即,我不想在用户访问内容时验证解锁内容的购买状态) ?
我最近了解到泄漏上下文会浪费多少内存,以及如何在屏幕方向更改后使用内存转储测试此类泄漏.应该实例化和创建新活动,销毁和收集原始活动.但是,除非我泄漏内存并且没有看到它,否则如果它开始不同的活动并且自我毁灭,则下面的活动似乎不会被收集:
public class Foo extends Activity {
private Button button;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
button = new Button(this);
button.setOnClickListener(new OnClickListener() {
public void onClick(View view) {
startActivity(new Intent(Foo.this, Bar.class));
finish();
}
});
setContentView(button);
}
protected void onDestroy() {
super.onDestroy();
button.setOnClickListener(null);
Log.e("you're it", "isFinishing() == " + isFinishing());
}
}
Run Code Online (Sandbox Code Playgroud)
public class Bar extends Activity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
TextView textView = new TextView(this);
textView.setText("hello, world");
setContentView(textView);
}
}
Run Code Online (Sandbox Code Playgroud)
这是内存转储信息,在单击按钮以启动Bar并请求垃圾收集几次后获取:
Class Name | Shallow Heap …Run Code Online (Sandbox Code Playgroud) 有没有办法为透明文本添加阴影,以便文本背后的背景仍然可见?也许某种方式使用文本本身作为掩码?或文本混合模式(具有合理的跨浏览器支持)?
我天真的尝试:
span {
background-image: url(http://i.imgur.com/EWDVnfb.png);
color: #FFF;
font-family: sans-serif;
font-size: 100pt;
font-weight: bold;
line-height: 2em;
padding: .5em;
text-shadow: 0 0 .5em #F00;
}Run Code Online (Sandbox Code Playgroud)
<span>Test</span>Run Code Online (Sandbox Code Playgroud)