1

ご存知かもしれませんが、www.android.comなどのGoogleサーバーと、 developer.android.comなどのすべてのサブドメインへのアクセスは、一部の国ではGoogleによって拒否されています。したがって、GCMを使用することはできません。

NEWS&Magazineアプリケーションがあり、特定のデバイスにメッセージをブロードキャストしたい。たとえば、スポーツの新しい更新を希望するユーザーもいれば、他のカテゴリの新しい更新を希望するユーザーもいます。

GCMシステムをシミュレートする方法を探しています。出来ますか?

ありがとう

4

2 に答える 2

2

はい、可能です。

  • Message API(任意の形式の JSON または XML を使用できます)
  • Android ServiceそのメッセージAPIに接続し、新しいメッセージをチェックします
  • そして、あなたも必要かもしれませんBroadcastReceiver

これが私が使用したコードです。

まず、作成BroadcastReceiverServiceAndroidManifest.xml

<receiver android:name="com.example.Push_Notification" >
    <intent-filter>
        <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
        <action android:name="android.net.wifi.WIFI_STATE_CHANGED" />
        <action android:name="android.net.wifi.NETWORK_IDS_CHANGED" />
        <action android:name="android.intent.action.BOOT_COMPLETED" />
    </intent-filter>
</receiver>

<service
    android:name="com.example.Push_Notification_Checker"
    android:enabled="true" />

これはPush_Notification次のとおりです。

public class Push_Notification extends BroadcastReceiver{

    private Context context;

    @Override
    public void onReceive(Context context, Intent intent) {
        // TODO Auto-generated method stub
        this.context = context;
        startService();
    }

    public void startService(){
        ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE );
        NetworkInfo activeNetInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE|ConnectivityManager.TYPE_WIFI);
        boolean isConnected = activeNetInfo != null && activeNetInfo.isConnectedOrConnecting();

        Calendar cur_cal = Calendar.getInstance();
        cur_cal.setTimeInMillis(System.currentTimeMillis());
        Intent i = new Intent(context, Push_Notification_Checker.class);
        PendingIntent pintent = PendingIntent.getService(context, 0, i, 0);
        AlarmManager alarm = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
        if (isConnected){
            catchLog("connecte " +isConnected);
            alarm.setRepeating(AlarmManager.RTC_WAKEUP, cur_cal.getTimeInMillis(), 1 * 60*1000, pintent);
        }
        else {
            catchLog("not connecte " +isConnected);
            alarm.cancel(pintent);
        }
    }

    private void catchLog(String log) {
        Log.i("PushNotification", log);
    }
}

これはPush_Notification_Checkerサービスです。:

public class Push_Notification_Checker extends Service {

    @Override
    public void onCreate() {
        // TODO Auto-generated method stub
        super.onCreate();
        catchLog("Service got created");
        nm = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
        pref = getSharedPreferences(Constants.SHARED_PRED, 0);
    }

    @Override
    public void onStart(Intent intent, int startId) {
        super.onStart(intent, startId);

        //Here i call AsyncTask to check Message. Android didn't allow Network Connection directly tied into Main Thread
        new GetMessage(getApplicationContext()).execute();
    }

}

Android UDID をサーバーに送信することで、特定のデバイスに新しいメッセージがあるかどうかを確認できます。このようにして、特定のデバイスにメッセージを送信できます。UDID を取得する方法は?

AsyncTaskを使用して接続する理由は次のとおりです。これらの 2 つの例は、サーバーとの通信方法に役立ちます。

Httpポストメソッドでアンドロイドを使用してサーバーにデータを送信する方法は?

JSON経由でAndroidからサーバーにデータを送信する

これがロングショットであることは承知していますが、これが何らかの形で役立つことを願っています。

PS: 私も Google によって拒否された国の出身です

于 2013-01-11T04:26:30.210 に答える
1

GCM 以外にもさまざまなオプションがあります。

ハッキングが必要なオプション:

MQTT -ブログ 1ブログ 2

XMPPを使用したaSmack

ディーコン・プロジェクト

サードパーティのすぐに使えるプロバイダー:

パース

都会の飛行船

特にPush.io

以下も参照してください。

Android はほぼリアルタイムのプッシュ通知をサポートしていますか?

Android プラットフォームでのプッシュ通知

于 2013-01-11T04:33:30.603 に答える