¢前言

我想大家在 Google Play 上發佈 app 時都會有,版本更新了可是 User 卻打死不更新的現象
有時是有人沒開 Google Play 的自動更新
有時是 Google Play 沒有自動更新

那我們是否可以手動進行更新或版本確認呢?
答案絕對是可以的
而方法不外乎兩個

1. 製作一個 API 提供 application 呼叫,確認是否有更新版本
2. 直接 parser Google Play 進行版本確認

在這裡說明第二個方法,第一個方法簡單很多,但就是要有自己的 API 可提供呼叫
另外在此只說明版本如何確認,看哪天心血來潮再把下載更新的 code 貼出來吧
請按下繼續觀賞~~

版本更新確認
public class CheckVersionAsyncTask extends AsyncTask<String, Void, Boolean> {
    
    Context context;
    String currentVersion; // Google Play 上的版本

    String oldVersion;     // 目前的 app 版本

    
    public CheckVersionAsyncTask(Context context, String version) {
        this.context = context;
        this.oldVersion = version;
    }

    @Override
    protected Boolean doInBackground(String... params) {
        boolean result = false;
        String url = params[0];   //請在 excecute 時傳入你 google play 的 url 位置,不是 market 喔,要 http

        
        HttpPost post = new HttpPost(url);

        HttpClient client = AndroidHttpClient.newInstance("android");
        
        BufferedReader reader = null; 
        try {
            HttpResponse reponse = client.execute(post);
            
            reader = new BufferedReader(new InputStreamReader(reponse.getEntity().getContent()));
            String line;
            String content = "";
            Pattern p = Pattern.compile("\"softwareVersion\"\\W*([\\d\\.]+)");
            while( ( line = reader.readLine() ) != null ){
                Matcher matcher = p.matcher(line);
                if( matcher.find() ){
                    Log.v("ids", "ver.: " + matcher.group(1) );
                    currentVersion = matcher.group(1);
                }
                content += line;
            }
            /*
            * 檢查版本,在此使用的是我們自定的版本名稱 <app version name>,並不是版本號 <app version code>
            * 請特別注意這一點
            */
            if (currentVersion.compareTo(oldVersion) > 0)
                result = true;
            Log.v("ids", content);
            
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            Log.v("ids", "close reader");
            try {
                if( reader != null ) {
                    reader.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return result;
    }
    
    @Override
    protected void onPostExecute(Boolean result) {
        super.onPostExecute(result);
        if (result) {
            // 檢查到有新的版本,做下一個動作

        }
    }
}

有問題歡迎再詢問~
這算是比較單純的 code 了

Comments

comments powered by Disqus