簡體   English   中英

Unity3D推送通知iOS和Android Vuforia和UrbanAirship

[英]Unity3D Push Notifications iOS & Android Vuforia & UrbanAirship

我正在開發一個使用Vuforia SDK的游戲,我希望最好使用UrbanAirship集成推送通知(這是我的客戶要求的)

我一直在嘗試讓Push Notifications在iOS和android上都可以運行,但是沒有運氣,沒有UrbanAirship,也沒有其他任何方式,我也嘗試了Pushwoosh Unity插件。

問題1:是否可以將UrbanAirship與Unity3d集成? 任何鏈接/建議/示例都很好,我已經搜索過但找不到任何相關內容。

問題2 :(如果我理解正確的話)是Vurforia SDK需要在Android Manifest文件中進行MAIN活動,因此阻止我實施諸如Pushwoosh之類的插件或其他類似插件,以使用它們所需的GCM(Google雲消息傳遞)以及主要活動。

問題3:同樣,如果我從閱讀過的所有站點/論壇/帖子中都能正確理解,GCM就是向Android推送通知的方法。 閱讀有關GCM的一些知識,它是一個通用的兩個消息傳遞API,可以在應用未運行時將其用於推送通知嗎? 還是我完全走錯了軌道?

我知道,很抱歉,這個問題很長,但這是第一次處理推送通知,更不用說在iOS和Android上都可以使用的東西了。 對於如何使它正常工作,我將不勝感激。 TIA!

這是我為Urban Airship構建的android插件中的代碼

請注意,我擴展了該應用程序。 您還需要一個意圖接收器類。

package com.yourapp.urbanairship;

import android.app.Application;
import android.util.Log;

import com.urbanairship.AirshipConfigOptions;
import com.urbanairship.Logger;
import com.urbanairship.UAirship;
import com.urbanairship.push.CustomPushNotificationBuilder;
import com.urbanairship.push.PushManager;

public class UrbanAirShipPlugin extends Application {


    @Override
    public void onCreate() {

        super.onCreate();

        AirshipConfigOptions options = AirshipConfigOptions.loadDefaultOptions(this);

    options.productionAppKey ="XXXXXXXXXXXXXXXXXXXXXXXXXX";  // from urban airship
    options.productionAppSecret = "XXXXXXXXXXXXXXXXXXXXXXXXXX"; // from urban airship
    options.developmentAppKey ="XXXXXXXXXXXXXXXXXXXXXXXXXX"; // from urban airship
    options.developmentAppSecret = "XXXXXXXXXXXXXXXXXXXXXXXXXX";// from urban airship
    options.gcmSender = "XXXXXXXXXXXXXX"; // from GOOGLE -> basically your project id

    options.inProduction = true;
    options.analyticsEnabled =false;
    options.minSdkVersion=18;

    //determines which app key to use
    // Take off initializes the services
    UAirship.takeOff(this, options);
    PushManager.shared().setIntentReceiver(IntentReceiver.class);

    }
}

這是意圖接收器類:

package your.package.name;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;

import com.urbanairship.UAirship;
import com.urbanairship.push.GCMMessageHandler;
import com.urbanairship.push.PushManager;

import java.util.Arrays;
import java.util.List;
import java.util.Set;

public class IntentReceiver extends BroadcastReceiver {

    private static final String logTag = "PushSample";

    public static String APID_UPDATED_ACTION_SUFFIX = ".apid.updated";

    @Override
    public void onReceive(Context context, Intent intent) {
        Log.i(logTag, "Received intent: " + intent.toString());
        String action = intent.getAction();

        if (action.equals(PushManager.ACTION_PUSH_RECEIVED)) {

            int id = intent.getIntExtra(PushManager.EXTRA_NOTIFICATION_ID, 0);

            Log.i(logTag, "Received push notification. Alert: "
                + intent.getStringExtra(PushManager.EXTRA_ALERT)
                + " [NotificationID="+id+"]");

            logPushExtras(intent);

        } else if (action.equals(PushManager.ACTION_NOTIFICATION_OPENED)) {

            Log.i(logTag, "User clicked notification. Message: " + intent.getStringExtra(PushManager.EXTRA_ALERT));

            logPushExtras(intent);

            Intent launch = new Intent(Intent.ACTION_MAIN);
            launch.setClassName(UAirship.shared().getApplicationContext(), "your.main.activity" );
            launch.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

            UAirship.shared().getApplicationContext().startActivity(launch);

        } else if (action.equals(PushManager.ACTION_REGISTRATION_FINISHED)) {
            Log.i(logTag, "Registration complete. APID:" + intent.getStringExtra(PushManager.EXTRA_APID)
                + ". Valid: " +     intent.getBooleanExtra(PushManager.EXTRA_REGISTRATION_VALID, false));

            // Notify any app-specific listeners
            Intent launch = new Intent(UAirship.getPackageName() + APID_UPDATED_ACTION_SUFFIX);
            UAirship.shared().getApplicationContext().sendBroadcast(launch);

        } else if (action.equals(GCMMessageHandler.ACTION_GCM_DELETED_MESSAGES)) {
            Log.i(logTag, "The GCM service deleted "+intent.getStringExtra(GCMMessageHandler.EXTRA_GCM_TOTAL_DELETED)+" messages.");
    }

}

/**
 * Log the values sent in the payload's "extra" dictionary.
 * 
 * @param intent A PushManager.ACTION_NOTIFICATION_OPENED or ACTION_PUSH_RECEIVED intent.
 */
    private void logPushExtras(Intent intent) {
        Set<String> keys = intent.getExtras().keySet();
        for (String key : keys) {

            //ignore standard C2DM extra keys
            List<String> ignoredKeys = (List<String>)Arrays.asList(
                "collapse_key",//c2dm collapse key
                "from",//c2dm sender
                PushManager.EXTRA_NOTIFICATION_ID,//int id of generated notification (ACTION_PUSH_RECEIVED only)
                PushManager.EXTRA_PUSH_ID,//internal UA push id
                PushManager.EXTRA_ALERT);//ignore alert
            if (ignoredKeys.contains(key)) {
                continue;
            }
            Log.i(logTag, "Push Notification Extra: ["+key+" : " + intent.getStringExtra(key) + "]");
        }
    }
}

另請注意,您需要將應用程序擴展名的插件com.yourapp.urbanairship名稱添加到清單中(在此處需要的所有其他內容旁邊):

<application android:allowClearUserData="true" android:icon="@drawable/app_icon" android:label="@string/app_name" android:name="com.yourapp.urbanairship"  android:debuggable="true">

別忘了清單中還有其他城市飛艇需求(另請參見此處

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM