许可证检查亲关键许可证、关键

2023-09-05 07:33:30 作者:赞助幸福

所以,我想就在加载全功能的免费应用程序。亲功能将被禁用,直到应用程序检测到有执照的亲关键。当然我想有亲重点检查它的许可使用拉特。虽然我知道该怎么做正确的事情,直到这一点,我不知道如何使亲键沟通的应用程序,它应使亲功能。

So I would like to make a free app with full functionality loaded in. The pro functionality will be disabled until the app detects a licensed pro key. And of course I would like to have the pro key check it's licence using LVL. While I know how to do things right until this point, I don't know how to make the pro key communicate with the app that it should enable the pro functionality.

下面是主要的应用程序code(com.test.mainapp):

Here's the main app code (com.test.mainapp):

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    context = getApplicationContext();

    final PackageManager pacman = getPackageManager();
    final int signatureMatch = pacman.checkSignatures(getPackageName(),
            "com.test.mainapp_key");

    if (signatureMatch == PackageManager.SIGNATURE_MATCH) {
        Toast.makeText(context, "Pro key detected!", Toast.LENGTH_SHORT)
                .show();
    } else {
        Toast.makeText(context, "Free version", Toast.LENGTH_SHORT).show();
    }
}

虽然这个人停止制造假钥匙我的应用程序,他们仍然可以在网上共享的关键应用程序给别人,它会工作。因为我们不能从其他应用程序做拉特查,我想许可证密钥的应用程序检查它的自己的许可证,如果它是正确的,只有用户得到亲功能。怎样才可以有许可证密钥的应用程序和主应用程序相互通信也是这样吗?

While this stops others making fake keys for my app, they still can share the key app online to others and it will work. Because we can't do the LVL check from another application, I would want the licence key app check it's own licence and if it's correct, only then the user gets the pro functionality. How can I have the licence key app and the main app communicate to each other like this?

我试图让这里的功能就像是钛备份呢,例如。

The functionality I'm trying to get here is like Titanium Backup does, for example.

推荐答案

您可以在主应用程序和关键应用程序之间发送的意图。如果您在关键应用程序中使用LVL然后一个例子回调将是:

You can send intents between the main app and the key app. If you are using LVL in the key app then an example callback would be:

private class MyLicenseCheckerCallback implements LicenseCheckerCallback {
    public void allow() {
        Log.i("Key", "License Accepted");
        Intent i = new Intent();
        i.setAction("intent.to.call.on.success");
        i.putExtra("licenseresult", 0);
        c.sendBroadcast(i);
        mChecker.onDestroy();
    }

    public void dontAllow() {
        Log.e("Key", "License Denied");
        Intent i = new Intent();
        i.setAction("intent.to.call.on.failure");
        i.putExtra("licenseresult", 1);
        c.sendBroadcast(i);
        mChecker.onDestroy();
    }

    public void applicationError(ApplicationErrorCode errorCode) {
        Log.i("Key", "LR Error");
        Intent i = new Intent();
        i.setAction("intent.to.call.on.error");
        i.putExtra("licenseresult", 2);
        c.sendBroadcast(i);
        mChecker.onDestroy();
    }
}

您将设立广播接收机在这两个应用程序来启动许可证检查和处理结果。例如,

You would set up broadcast receivers in both apps to initiate the license check and handle the result. e.g.

public class License extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {

    if (intent.getAction().equals("intent.called.to.initiate.request")) {
                // Initiate the license request here (possibly using a service)
        return;
    }
}

} 

您应该限制访问使用基于证书的权限,以prevent能够发送欺骗许可成功的意图其他应用程序的意图。

You should limit access to the intents using certificate based permissions to prevent other apps being able to send spoofed "License Success" intents.

http://developer.android.com/reference/android/content/BroadcastReceiver.html#Permissions

短版。

定义许可清单

< permission android:name="my.package.LicenseCheck" android:protectionLevel="signature"/> 

使用权限在接收声明:

<receiver android:name="name.of.your.receiver" android:permission="my.package.LicenseCheck"> 
<intent-filter>
    <action android:name="name.of.intent"/>
</intent-filter>
</receiver>